Restructured camera rescue

This commit is contained in:
Joel Collins 2021-01-06 17:31:45 +00:00
parent 3501a5b624
commit 61554af270

View file

@ -2,21 +2,23 @@ import logging
from .error_sources import ErrorSource
picamera_import_error = ErrorSource(
(
"Picamera module could not be imported.",
"Check physical connections to the camera as it may be damaged or disconnected.",
)
)
picamera_errors = (
"Camera is not enabled. Try running 'sudo raspi-config' and ensure that the camera has been enabled.",
)
picamera_mmal_errors = {
"Failed to enable connection: Out of resources": "Camera already in use by another application."
# Error/exception messages we have enumerated and expect
PICAMERA_ERROR_MAP = {
"Camera is not enabled. Try running 'sudo raspi-config' and ensure that the camera has been enabled.": ErrorSource(
"Camera is not enabled. Try running 'sudo raspi-config' and ensure that the camera has been enabled."
),
"Failed to enable connection: Out of resources": ErrorSource(
"Camera already in use by another application. Please reboot your microscope."
),
}
# Basic import error. Usually damaged or disconnected camera
PICAMERA_IMPORT_ERROR = ErrorSource(
(
"Picamera module could not be imported. Check physical connections to the camera as it may be damaged or disconnected.",
)
)
def main():
error_sources = []
@ -25,20 +27,15 @@ def main():
try:
import picamerax
except Exception as e: # pylint: disable=W0703
# TODO: Parse exception object for a few different issues, and append
# different error sources E.g. pi with camera already in use,
# disconnected, unsupported OS, etc
logging.error(e)
error_sources.append(picamera_import_error)
error_sources.append(PICAMERA_IMPORT_ERROR)
else:
try:
_ = picamerax.PiCamera()
except picamerax.PiCameraError as e:
if e.args[0] in picamera_errors:
error_sources.append(ErrorSource(e.args[0]))
elif e.args[0] in picamera_mmal_errors:
error_sources.append(ErrorSource(picamera_mmal_errors[e.args[0]]))
msg = e.args[0]
if msg in PICAMERA_ERROR_MAP:
error_sources.append(PICAMERA_ERROR_MAP[msg])
else:
error_sources.append(ErrorSource(e.args[0]))
error_sources.append(ErrorSource("Unenumerated exception: " + msg))
return error_sources