Improve camera buffer typing

This commit is contained in:
Julian Stirling 2025-12-17 22:43:52 +00:00
parent e0c63ab354
commit d52548cc13
2 changed files with 18 additions and 18 deletions

View file

@ -59,7 +59,7 @@ class CameraMemoryBuffer:
However subclasses of BaseCamera can use this class to store other object types. However subclasses of BaseCamera can use this class to store other object types.
""" """
_storage: dict[int, tuple[Any, Optional[dict]]] _storage: dict[int, tuple[Any, Mapping[str, Any]]]
def __init__(self) -> None: def __init__(self) -> None:
"""Create the buffer instance.""" """Create the buffer instance."""
@ -73,7 +73,7 @@ class CameraMemoryBuffer:
def add_image( def add_image(
self, self,
image: Any, image: Any,
metadata: Optional[Mapping[str, Any]] = None, metadata: Mapping[str, Any],
buffer_max: int = 1, buffer_max: int = 1,
) -> int: ) -> int:
"""Add an image to the Memory buffer. """Add an image to the Memory buffer.
@ -97,7 +97,7 @@ class CameraMemoryBuffer:
def get_image( def get_image(
self, buffer_id: Optional[int] = None, remove: bool = True self, buffer_id: Optional[int] = None, remove: bool = True
) -> tuple[Any, Optional[dict]]: ) -> tuple[Any, Mapping[str, Any]]:
"""Return the image with the given id. """Return the image with the given id.
If no id is given the most recent image is returned. However, the If no id is given the most recent image is returned. However, the
@ -514,7 +514,7 @@ class BaseCamera(lt.Thing):
self, self,
jpeg_path: str, jpeg_path: str,
image: Image.Image, image: Image.Image,
metadata: dict, metadata: Mapping[str, Any],
save_resolution: Optional[Tuple[int, int]] = None, save_resolution: Optional[Tuple[int, int]] = None,
) -> None: ) -> None:
"""Save the captured image and metadata to disk. """Save the captured image and metadata to disk.

View file

@ -33,7 +33,7 @@ def test_add_and_get_image():
"""Check images can be captured and retrieved.""" """Check images can be captured and retrieved."""
mem_buf = CameraMemoryBuffer() mem_buf = CameraMemoryBuffer()
misc_image = random_image() misc_image = random_image()
buffer_id = mem_buf.add_image(misc_image) buffer_id = mem_buf.add_image(misc_image, random_metadata())
returned_image, _ = mem_buf.get_image(buffer_id) returned_image, _ = mem_buf.get_image(buffer_id)
# It is the same image # It is the same image
assert misc_image is returned_image assert misc_image is returned_image
@ -46,7 +46,7 @@ def test_add_and_get_image_twice():
"""Check images can be retrieved twice if remove flag set false.""" """Check images can be retrieved twice if remove flag set false."""
mem_buf = CameraMemoryBuffer() mem_buf = CameraMemoryBuffer()
misc_image = random_image() misc_image = random_image()
buffer_id = mem_buf.add_image(misc_image) buffer_id = mem_buf.add_image(misc_image, random_metadata())
returned_image, _ = mem_buf.get_image(buffer_id, remove=False) returned_image, _ = mem_buf.get_image(buffer_id, remove=False)
# It is the same image # It is the same image
assert misc_image is returned_image assert misc_image is returned_image
@ -62,7 +62,7 @@ def test_get_without_id():
"""Check images can be captured and retrieved without ID.""" """Check images can be captured and retrieved without ID."""
mem_buf = CameraMemoryBuffer() mem_buf = CameraMemoryBuffer()
misc_image = random_image() misc_image = random_image()
mem_buf.add_image(misc_image) mem_buf.add_image(misc_image, random_metadata())
returned_image, _ = mem_buf.get_image() returned_image, _ = mem_buf.get_image()
# It is the same image # It is the same image
assert misc_image is returned_image assert misc_image is returned_image
@ -76,8 +76,8 @@ def test_get_two_images():
mem_buf = CameraMemoryBuffer() mem_buf = CameraMemoryBuffer()
misc_image1 = random_image() misc_image1 = random_image()
misc_image2 = random_image() misc_image2 = random_image()
buffer_id1 = mem_buf.add_image(misc_image1, buffer_max=2) buffer_id1 = mem_buf.add_image(misc_image1, random_metadata(), buffer_max=2)
buffer_id2 = mem_buf.add_image(misc_image2, buffer_max=2) buffer_id2 = mem_buf.add_image(misc_image2, random_metadata(), buffer_max=2)
returned_image1, _ = mem_buf.get_image(buffer_id1) returned_image1, _ = mem_buf.get_image(buffer_id1)
returned_image2, _ = mem_buf.get_image(buffer_id2) returned_image2, _ = mem_buf.get_image(buffer_id2)
# It they the same images # It they the same images
@ -95,8 +95,8 @@ def test_get_two_images_without_setting_buffer_size():
mem_buf = CameraMemoryBuffer() mem_buf = CameraMemoryBuffer()
misc_image1 = random_image() misc_image1 = random_image()
misc_image2 = random_image() misc_image2 = random_image()
buffer_id1 = mem_buf.add_image(misc_image1) buffer_id1 = mem_buf.add_image(misc_image1, random_metadata())
buffer_id2 = mem_buf.add_image(misc_image2) buffer_id2 = mem_buf.add_image(misc_image2, random_metadata())
with pytest.raises(NoImageInMemoryError): with pytest.raises(NoImageInMemoryError):
mem_buf.get_image(buffer_id1) mem_buf.get_image(buffer_id1)
returned_image2, _ = mem_buf.get_image(buffer_id2) returned_image2, _ = mem_buf.get_image(buffer_id2)
@ -110,10 +110,10 @@ def test_buffer_size_changing():
misc_image1 = random_image() misc_image1 = random_image()
misc_image2 = random_image() misc_image2 = random_image()
misc_image3 = random_image() misc_image3 = random_image()
buffer_id1 = mem_buf.add_image(misc_image1, buffer_max=3) buffer_id1 = mem_buf.add_image(misc_image1, random_metadata(), buffer_max=3)
buffer_id2 = mem_buf.add_image(misc_image2, buffer_max=3) buffer_id2 = mem_buf.add_image(misc_image2, random_metadata(), buffer_max=3)
# Third capture doesn't set buffer size, so it will be reset # Third capture doesn't set buffer size, so it will be reset
buffer_id3 = mem_buf.add_image(misc_image3) buffer_id3 = mem_buf.add_image(misc_image3, random_metadata())
# As buffer size was reset, images 1 and 2 are deleted # As buffer size was reset, images 1 and 2 are deleted
with pytest.raises(NoImageInMemoryError): with pytest.raises(NoImageInMemoryError):
mem_buf.get_image(buffer_id1) mem_buf.get_image(buffer_id1)
@ -129,8 +129,8 @@ def test_capture_two_images_get_without_id():
mem_buf = CameraMemoryBuffer() mem_buf = CameraMemoryBuffer()
misc_image1 = random_image() misc_image1 = random_image()
misc_image2 = random_image() misc_image2 = random_image()
mem_buf.add_image(misc_image1, buffer_max=2) mem_buf.add_image(misc_image1, random_metadata(), buffer_max=2)
mem_buf.add_image(misc_image2, buffer_max=2) mem_buf.add_image(misc_image2, random_metadata(), buffer_max=2)
returned_image, _ = mem_buf.get_image() returned_image, _ = mem_buf.get_image()
# When buffer_id is not specified, the most recent image (image2) is expected to # When buffer_id is not specified, the most recent image (image2) is expected to
# be retrieved # be retrieved
@ -148,7 +148,7 @@ def test_buffer_size_respected():
buffer_ids = [] buffer_ids = []
for _i in range(10): for _i in range(10):
image = random_image() image = random_image()
buffer_id = mem_buf.add_image(image, buffer_max=5) buffer_id = mem_buf.add_image(image, random_metadata(), buffer_max=5)
images.append(image) images.append(image)
buffer_ids.append(buffer_id) buffer_ids.append(buffer_id)
@ -169,7 +169,7 @@ def test_clear_buffer():
buffer_ids = [] buffer_ids = []
for _i in range(10): for _i in range(10):
image = random_image() image = random_image()
buffer_id = mem_buf.add_image(image, buffer_max=10) buffer_id = mem_buf.add_image(image, random_metadata(), buffer_max=10)
images.append(image) images.append(image)
buffer_ids.append(buffer_id) buffer_ids.append(buffer_id)