6363
6464SIMILAR_PICS_BEFORE_REFRESH = 20
6565MAX_PIC_THREAD_RETRIES = 2
66-
66+ CAMERA_SETTINGS_LAST_SESSION_YAML = "/home/pi/.octoprint/cam/last_session.yaml"
67+ CAMERA_SETTINGS_FALLBACK_JSON = "/home/pi/.octoprint/cam/last_markers.json"
6768
6869from octoprint_mrbeam .iobeam .iobeam_handler import IoBeamEvents
6970from octoprint .events import Events as OctoPrintEvents
@@ -1317,39 +1318,58 @@ def _createFolder_if_not_existing(self, filename):
13171318 makedirs (folder )
13181319 self ._logger .debug ("Created folder '%s' for camera images." , folder )
13191320
1320- def load_camera_settings (self , path = "/home/pi/.octoprint/cam/last_session.yaml" ):
1321+ def load_camera_settings (self , path = CAMERA_SETTINGS_LAST_SESSION_YAML ):
13211322 """
1322- Loads the settings saved from the last session.
1323- The file is located by default at .octoprint/cam/pic_settings.yaml
1323+ Loads and returns the camera settings.
1324+
1325+ Args:
1326+ path (str): path to the camera settings Yaml to load from
1327+
1328+ Returns:
1329+ (list): ["calibMarkers", "shutter_speed"]
1330+
13241331 """
1325- backup = "/home/pi/.octoprint/cam/last_markers.json"
1326- if os .path .isfile (path ):
1327- _path = path
1328- else :
1329- self ._logger .info (
1330- "last_session.yaml does not exist, using legacy backup (last_markers.json)"
1332+
1333+ # To Be used in case the default file not there or invalid
1334+ backup_path = CAMERA_SETTINGS_FALLBACK_JSON
1335+ camera_settings = []
1336+
1337+ # 1. Load from default
1338+ try :
1339+ with open (path ) as f :
1340+ settings = yaml .safe_load (f )
1341+ for k in ["calibMarkers" , "shutter_speed" ]:
1342+ camera_settings .append (settings .get (k , None ))
1343+ self ._logger .debug ("lid_handler: Default camera settings loaded from file: {}" .format (path ))
1344+ return camera_settings
1345+ except (IOError , OSError , yaml .YAMLError , yaml .reader .ReaderError , AttributeError ) as e :
1346+ if os .path .isfile (path ):
1347+ # An extra step to insure a smooth experience moving forward
1348+ os .remove (path )
1349+ self ._logger .warn (
1350+ "lid_handler: File: {} does not exist or invalid, Will try to use legacy backup_path...: {}" .format (
1351+ path , backup_path )
13311352 )
1332- _path = backup
1353+
1354+ # 2. Load from Backup
13331355 try :
1334- ret = []
1335- with open (_path ) as f :
1336- settings = yaml .load (f ) or {}
1337- if _path == backup :
1338- # No shutter speed info
1339- settings = {k : v [- 1 ] for k , v in settings .items ()}
1340- ret = [settings , None ]
1341- else :
1342- for k in ["calibMarkers" , "shutter_speed" ]:
1343- ret .append (settings .get (k , None ))
1344- return ret
1345- except (IOError , OSError ) as e :
1346- self ._logger .warning ("New or Legacy marker memory not found." )
1347- return [None ] * 2
1356+ with open (backup_path ) as f :
1357+ settings = yaml .safe_load (f )
1358+ # No shutter speed info present in this file
1359+ settings = {k : v [- 1 ] for k , v in settings .items ()}
1360+ camera_settings = [settings , None ]
1361+ self ._logger .debug ("lid_handler: Fallback camera settings loaded from file: {}" .format (backup_path ))
1362+ return camera_settings
1363+ except (IOError , OSError , yaml .YAMLError , yaml .reader .ReaderError , AttributeError ) as e :
1364+ self ._logger .exception (
1365+ "lid_handler: File: {} does not exist or invalid, Camera Settings Load failed" .format (backup_path )
1366+ )
1367+ return [None , None ]
13481368
13491369 # @logme(True)
13501370 def save_camera_settings (
13511371 self ,
1352- path = "/home/pi/.octoprint/cam/last_session.yaml" ,
1372+ path = CAMERA_SETTINGS_LAST_SESSION_YAML ,
13531373 markers = None ,
13541374 shutter_speed = None ,
13551375 ):
@@ -1371,10 +1391,10 @@ def save_camera_settings(
13711391 settings = {}
13721392 try :
13731393 with open (path ) as f :
1374- settings = yaml .load (f )
1375- except (OSError , IOError ) as e :
1394+ settings = yaml .safe_load (f )
1395+ except (OSError , IOError , yaml . YAMLError , yaml . reader . ReaderError , AttributeError ) as e :
13761396 self ._logger .warning (
1377- "file %s does not exist or could not be read. Overwriting..." % path
1397+ "lid_handler: file %s does not exist or could not be read. Overwriting..." % path
13781398 )
13791399
13801400 settings = dict_merge (
@@ -1389,7 +1409,7 @@ def save_camera_settings(
13891409 try :
13901410 with open (path , "w" ) as f :
13911411 f .write (yaml .dump (settings ))
1392- except (OSError , IOError ) as e :
1412+ except (OSError , IOError , yaml . YAMLError ) as e :
13931413 self ._logger .error (e )
13941414 except TypeError as e :
13951415 self ._logger .warning (
0 commit comments