From 1a4608af15bc8ed41ec0de0dc651d258d9b407cc Mon Sep 17 00:00:00 2001 From: Tim Huff Date: Wed, 17 Jul 2024 11:25:33 -0700 Subject: [PATCH] adding exception when grabbing fails --- pyproject.toml | 2 +- src/framegrab/__init__.py | 1 + src/framegrab/exceptions.py | 6 ++++++ src/framegrab/grabber.py | 6 ++++++ 4 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 src/framegrab/exceptions.py diff --git a/pyproject.toml b/pyproject.toml index 3faef40..17ed964 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "framegrab" -version = "0.5.3" +version = "0.5.4" description = "Easily grab frames from cameras or streams" authors = ["Groundlight "] license = "MIT" diff --git a/src/framegrab/__init__.py b/src/framegrab/__init__.py index 64792b7..6929cec 100644 --- a/src/framegrab/__init__.py +++ b/src/framegrab/__init__.py @@ -1,6 +1,7 @@ from .cli.clitools import preview_image from .grabber import FrameGrabber from .motion import MotionDetector +from .exceptions import GrabError from .rtsp_discovery import AutodiscoverModes, ONVIFDeviceInfo, RTSPDiscovery try: diff --git a/src/framegrab/exceptions.py b/src/framegrab/exceptions.py new file mode 100644 index 0000000..2ce90c1 --- /dev/null +++ b/src/framegrab/exceptions.py @@ -0,0 +1,6 @@ +class GrabError(Exception): + """Exception raised for errors in the frame grabbing process. + """ + def __init__(self, message="Failed to grab frame from camera."): + self.message = message + super().__init__(self.message) diff --git a/src/framegrab/grabber.py b/src/framegrab/grabber.py index e8a7def..d184771 100644 --- a/src/framegrab/grabber.py +++ b/src/framegrab/grabber.py @@ -14,6 +14,7 @@ import yaml from .unavailable_module import UnavailableModule +from .exceptions import GrabError logger = logging.getLogger(__name__) @@ -326,6 +327,11 @@ def grab(self) -> np.ndarray: """ frame = self._grab_implementation() + if frame is None: + name = self.config['name'] # all grabbers should have a name, either user-provided or generated + error_msg = f'Failed to grab frame from {name}' + raise GrabError(error_msg) + # apply post processing operations frame = self._crop(frame) frame = self._digital_zoom(frame)