66import os
77import subprocess
88import json
9+ import logging
910import connexion
10- from tinydb import TinyDB , Query
11- from tinydb .operations import delete
11+ import pigpio
1212from cachetools import cached , TTLCache
1313from coderbot import CoderBot
1414from program import ProgramEngine , Program
1515from config import Config
16+ from activity import Activities
1617from coderbotTestUnit import run_test as runCoderbotTestUnit
17- import pigpio
18+ from cnn_manager import CNNManager
1819from musicPackages import MusicPackageManager
1920
2021BUTTON_PIN = 16
2526 encoder = bool (bot_config .get ("encoder" ))
2627)
2728
28- query = Query ()
29-
3029def get_serial ():
3130 """
3231 Extract serial from cpuinfo file
@@ -108,8 +107,7 @@ def get_info():
108107prog = None
109108prog_engine = ProgramEngine .get_instance ()
110109
111- # Programs and Activities databases
112- activities = TinyDB ("data/activities.json" )
110+ activities = Activities .get_instance ()
113111
114112## Robot control
115113
@@ -133,7 +131,8 @@ def turn(data):
133131
134132def exec (data ):
135133 program = prog_engine .create (data ["name" ], data ["code" ])
136- return json .dumps (program .execute ())
134+ options = data ["options" ]
135+ return json .dumps (program .execute (options ))
137136
138137## System
139138
@@ -173,14 +172,23 @@ def restoreSettings():
173172 Config .get ()
174173 return "ok"
175174
175+
176176def updateFromPackage ():
177177 os .system ('sudo bash /home/pi/clean-update.sh' )
178178 file_to_upload = connexion .request .files ['file_to_upload' ]
179179 file_to_upload .save (os .path .join ('/home/pi/' , 'update.tar' ))
180180 os .system ('sudo reboot' )
181181 return 200
182182
183- def updatePackages ():
183+ def listMusicPackages ():
184+ """
185+ list available music packages
186+ """
187+ musicPkg = MusicPackageManager .get_instance ()
188+ response = musicPkg .listPackages ()
189+ return json .dumps (response )
190+
191+ def updateMusicPackages ():
184192 """
185193 Add a musical package an save the list of available packages on disk
186194 also add sounds and directory
@@ -196,14 +204,23 @@ def updatePackages():
196204 if response == 1 :
197205 return 200
198206 elif response == 2 :
199- return 2
207+ return 400
200208 elif response == 3 :
201- return 3
209+ return 400
202210
211+ def deleteMusicPackage (package_data ):
212+ """
213+ Delete a musical package an save the list of available packages on disk
214+ also delete package sounds and directory
215+ """
216+ musicPkg = MusicPackageManager .get_instance ()
217+ musicPkg .deletePackage (package_data ['package_name' ])
218+ return 200
203219
204220## Programs
205221
206- def saveProgram (data , overwrite ):
222+ def saveProgram (data ):
223+ overwrite = data ["overwrite" ]
207224 existing_program = prog_engine .load (data ["name" ])
208225 if existing_program and not overwrite :
209226 return "askOverwrite"
@@ -227,23 +244,17 @@ def listPrograms():
227244## Activities
228245
229246def saveActivity (data ):
230- data = data ["activity" ]
231- if activities .search (query .name == data ["name" ]) == []:
232- activities .insert (data )
233- return 200
234- else :
235- activities .update (data , query .name == data ["name" ])
236- return 200
247+ activity = data ["activity" ]
248+ activities .save (activity )
237249
238- def loadActivity (name ):
239- return activities .search ( query . name == name )[ 0 ], 200
250+ def loadActivity (name = None , default = None ):
251+ return activities .load ( name , default )
240252
241253def deleteActivity (data ):
242- activities .remove (query .name == data ["name" ])
243-
254+ activities .delete (data ), 200
244255
245256def listActivities ():
246- return activities .all ()
257+ return activities .list ()
247258
248259def resetDefaultPrograms ():
249260 """
@@ -273,3 +284,9 @@ def testCoderbot(data):
273284 # taking first JSON key value (varargin)
274285 tests_state = runCoderbotTestUnit (data [list (data .keys ())[0 ]])
275286 return tests_state
287+
288+ def list_cnn_models ():
289+ cnn = CNNManager .get_instance ()
290+ logging .info ("cnn_models_list" )
291+ return json .dumps (cnn .get_models ())
292+
0 commit comments