From fbd3b349dff2da78b12fb6950ea1822f84ecdb9a Mon Sep 17 00:00:00 2001 From: Kaspar Emanuel Date: Wed, 18 Nov 2020 10:59:48 +0000 Subject: [PATCH 1/4] Detect camera not enabled picamerax error --- .../rescue/check_picamera.py | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/openflexure_microscope/rescue/check_picamera.py b/openflexure_microscope/rescue/check_picamera.py index 9b21305d..0c057e1d 100644 --- a/openflexure_microscope/rescue/check_picamera.py +++ b/openflexure_microscope/rescue/check_picamera.py @@ -9,17 +9,36 @@ picamera_import_error = ErrorSource( ) ) +picamera_errors = ( + "Camera is not enabled. Try running 'sudo raspi-config' and ensure that the camera has been enabled.", +) + + def main(): error_sources = [] logging.info("Attempting to import picamera...") try: - from picamerax import PiCamera as _ + from picamerax import PiCamera 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 + # 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) + else: + import picamerax.exc.PiCameraError + + try: + cam = PiCamera() + except picamerax.exc.PiCameraError as e: + if e.args[0] in picamera_errors: + error_sources.append(ErrorSource(e.args[0])) + + + + + return error_sources From cc1c5e77c3e595db33d1b89a0f9a3c60a0f952f8 Mon Sep 17 00:00:00 2001 From: Kaspar Emanuel Date: Mon, 23 Nov 2020 21:43:08 +0000 Subject: [PATCH 2/4] Format check_picamera.py with black --- openflexure_microscope/rescue/check_picamera.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/openflexure_microscope/rescue/check_picamera.py b/openflexure_microscope/rescue/check_picamera.py index 0c057e1d..c41126c7 100644 --- a/openflexure_microscope/rescue/check_picamera.py +++ b/openflexure_microscope/rescue/check_picamera.py @@ -14,13 +14,12 @@ picamera_errors = ( ) - def main(): error_sources = [] logging.info("Attempting to import picamera...") try: - from picamerax import PiCamera + from picamerax import PiCamera 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, @@ -36,9 +35,4 @@ def main(): if e.args[0] in picamera_errors: error_sources.append(ErrorSource(e.args[0])) - - - - - return error_sources From cc73aec2577b9c3d918629fccd4db18af96552de Mon Sep 17 00:00:00 2001 From: Kaspar Emanuel Date: Wed, 2 Dec 2020 10:43:43 +0000 Subject: [PATCH 3/4] Detect picamera in use error --- openflexure_microscope/rescue/check_picamera.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/openflexure_microscope/rescue/check_picamera.py b/openflexure_microscope/rescue/check_picamera.py index c41126c7..1088ca1e 100644 --- a/openflexure_microscope/rescue/check_picamera.py +++ b/openflexure_microscope/rescue/check_picamera.py @@ -13,13 +13,17 @@ 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." +} + def main(): error_sources = [] logging.info("Attempting to import picamera...") try: - from picamerax import PiCamera + 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, @@ -27,12 +31,14 @@ def main(): logging.error(e) error_sources.append(picamera_import_error) else: - import picamerax.exc.PiCameraError - try: - cam = PiCamera() - except picamerax.exc.PiCameraError as e: + cam = 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]])) + else: + error_sources.append(ErrorSource(e.args[0])) return error_sources From 805b9012ddf0e37892e156c99ecd1986d88291a3 Mon Sep 17 00:00:00 2001 From: Kaspar Emanuel Date: Wed, 2 Dec 2020 10:57:07 +0000 Subject: [PATCH 4/4] Make linter happy --- openflexure_microscope/rescue/check_picamera.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openflexure_microscope/rescue/check_picamera.py b/openflexure_microscope/rescue/check_picamera.py index 1088ca1e..f2279313 100644 --- a/openflexure_microscope/rescue/check_picamera.py +++ b/openflexure_microscope/rescue/check_picamera.py @@ -32,7 +32,7 @@ def main(): error_sources.append(picamera_import_error) else: try: - cam = picamerax.PiCamera() + _ = picamerax.PiCamera() except picamerax.PiCameraError as e: if e.args[0] in picamera_errors: error_sources.append(ErrorSource(e.args[0]))