From fb01ede9403a66d03b2fd2b21897d713f32d3564 Mon Sep 17 00:00:00 2001 From: Matt Craig Date: Mon, 7 Jul 2025 21:26:43 -0700 Subject: [PATCH 1/2] Change get methods to properties --- src/astro_image_display_api/api_test.py | 18 +++++++++--------- .../image_viewer_logic.py | 16 +++++++--------- .../interface_definition.py | 13 +++++++------ 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/astro_image_display_api/api_test.py b/src/astro_image_display_api/api_test.py index 8061fdf..706a6af 100644 --- a/src/astro_image_display_api/api_test.py +++ b/src/astro_image_display_api/api_test.py @@ -78,7 +78,7 @@ def _assert_empty_catalog_table(self, table): assert sorted(table.colnames) == sorted(["x", "y", "coord"]) def _get_catalog_names_as_set(self): - marks = self.image.get_catalog_names() + marks = self.image.catalog_names return set(marks) def test_width_height(self): @@ -498,7 +498,7 @@ def test_load_multiple_catalogs(self, catalog): catalog_label="test2", ) - assert sorted(self.image.get_catalog_names()) == ["test1", "test2"] + assert sorted(self.image.catalog_names) == ["test1", "test2"] # No guarantee markers will come back in the same order, so sort them. t1 = self.image.get_catalog(catalog_label="test1") @@ -522,7 +522,7 @@ def test_load_multiple_catalogs(self, catalog): # other one without a label. self.image.remove_catalog(catalog_label="test1") # Make sure test1 is really gone. - assert self.image.get_catalog_names() == ["test2"] + assert self.image.catalog_names == ["test2"] # Get without a catalog t2 = self.image.get_catalog() @@ -798,15 +798,15 @@ def test_save_overwrite(self, tmp_path): # Using overwrite should save successfully self.image.save(filename, overwrite=True) - def test_get_image_labels(self, data): + def test_image_labels(self, data): # the test viewer begins with a default empty image - assert len(self.image.get_image_labels()) == 1 - assert self.image.get_image_labels()[0] is None - assert isinstance(self.image.get_image_labels(), tuple) + assert len(self.image.image_labels) == 1 + assert self.image.image_labels[0] is None + assert isinstance(self.image.image_labels, tuple) self.image.load_image(data, image_label="test") - assert len(self.image.get_image_labels()) == 2 - assert self.image.get_image_labels()[-1] == "test" + assert len(self.image.image_labels) == 2 + assert self.image.image_labels[-1] == "test" def test_get_image(self, data): self.image.load_image(data, image_label="test") diff --git a/src/astro_image_display_api/image_viewer_logic.py b/src/astro_image_display_api/image_viewer_logic.py index 6879337..cba662c 100644 --- a/src/astro_image_display_api/image_viewer_logic.py +++ b/src/astro_image_display_api/image_viewer_logic.py @@ -371,12 +371,12 @@ def get_image( ) return self._images[image_label].data - def get_image_labels( - self, - **kwargs, # noqa: ARG002 - ) -> tuple[str, ...]: + @property + def image_labels(self) -> tuple[str, ...]: return tuple(self._images.keys()) + image_labels.__doc__ = ImageViewerInterface.image_labels.__doc__ + def _determine_largest_dimension(self, shape: tuple[int, int]) -> int: """ Determine which index is the largest dimension. @@ -647,13 +647,11 @@ def get_catalog( get_catalog.__doc__ = ImageViewerInterface.get_catalog.__doc__ - def get_catalog_names( - self, - **kwargs, # noqa: ARG002 - ) -> list[str]: + @property + def catalog_names(self) -> tuple[str, ...]: return list(self._user_catalog_labels()) - get_catalog_names.__doc__ = ImageViewerInterface.get_catalog_names.__doc__ + catalog_names.__doc__ = ImageViewerInterface.catalog_names.__doc__ # Methods that modify the view def set_viewport( diff --git a/src/astro_image_display_api/interface_definition.py b/src/astro_image_display_api/interface_definition.py index 5993f78..e98629a 100644 --- a/src/astro_image_display_api/interface_definition.py +++ b/src/astro_image_display_api/interface_definition.py @@ -85,13 +85,13 @@ def get_image( """ raise NotImplementedError + @property @abstractmethod - def get_image_labels( + def image_labels( self, - **kwargs, - ) -> tuple[str]: + ) -> tuple[str, ...]: """ - Get the labels of the loaded images. + Labels of the loaded images. Returns ------- @@ -547,10 +547,11 @@ def get_catalog( """ raise NotImplementedError + @property @abstractmethod - def get_catalog_names(self) -> list[str]: + def catalog_names(self) -> tuple[str, ...]: """ - Get the names of the loaded catalogs. + Names of the loaded catalogs. Returns ------- From 5f31213a3a1e6ec799cbbdb1b719786e7dd4dd82 Mon Sep 17 00:00:00 2001 From: Matt Craig Date: Tue, 8 Jul 2025 10:26:52 -0700 Subject: [PATCH 2/2] Fix return type and only return user-supplied labels --- src/astro_image_display_api/api_test.py | 7 +++---- src/astro_image_display_api/image_viewer_logic.py | 4 ++-- src/astro_image_display_api/interface_definition.py | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/astro_image_display_api/api_test.py b/src/astro_image_display_api/api_test.py index 706a6af..676368f 100644 --- a/src/astro_image_display_api/api_test.py +++ b/src/astro_image_display_api/api_test.py @@ -522,7 +522,7 @@ def test_load_multiple_catalogs(self, catalog): # other one without a label. self.image.remove_catalog(catalog_label="test1") # Make sure test1 is really gone. - assert self.image.catalog_names == ["test2"] + assert self.image.catalog_names == ("test2",) # Get without a catalog t2 = self.image.get_catalog() @@ -800,12 +800,11 @@ def test_save_overwrite(self, tmp_path): def test_image_labels(self, data): # the test viewer begins with a default empty image - assert len(self.image.image_labels) == 1 - assert self.image.image_labels[0] is None + assert len(self.image.image_labels) == 0 assert isinstance(self.image.image_labels, tuple) self.image.load_image(data, image_label="test") - assert len(self.image.image_labels) == 2 + assert len(self.image.image_labels) == 1 assert self.image.image_labels[-1] == "test" def test_get_image(self, data): diff --git a/src/astro_image_display_api/image_viewer_logic.py b/src/astro_image_display_api/image_viewer_logic.py index cba662c..db84dc2 100644 --- a/src/astro_image_display_api/image_viewer_logic.py +++ b/src/astro_image_display_api/image_viewer_logic.py @@ -373,7 +373,7 @@ def get_image( @property def image_labels(self) -> tuple[str, ...]: - return tuple(self._images.keys()) + return tuple(k for k in self._images.keys() if k is not None) image_labels.__doc__ = ImageViewerInterface.image_labels.__doc__ @@ -649,7 +649,7 @@ def get_catalog( @property def catalog_names(self) -> tuple[str, ...]: - return list(self._user_catalog_labels()) + return tuple(self._user_catalog_labels()) catalog_names.__doc__ = ImageViewerInterface.catalog_names.__doc__ diff --git a/src/astro_image_display_api/interface_definition.py b/src/astro_image_display_api/interface_definition.py index e98629a..e763e5d 100644 --- a/src/astro_image_display_api/interface_definition.py +++ b/src/astro_image_display_api/interface_definition.py @@ -555,7 +555,7 @@ def catalog_names(self) -> tuple[str, ...]: Returns ------- - list of str + tuple of str The names of the loaded catalogs. Notes