From 27187474bd0ad95e7858f2d1bf4c1e86747e7cb7 Mon Sep 17 00:00:00 2001 From: Tyler <31015976+tylanderson@users.noreply.github.com> Date: Wed, 2 Oct 2024 23:16:53 -0400 Subject: [PATCH 1/3] add roles --- CHANGELOG.md | 1 + pystac/common_metadata.py | 9 ++++++++ .../item/sample-item-asset-properties.json | 1 + tests/test_common_metadata.py | 22 +++++++++++++++++++ 4 files changed, 33 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 254536bea..e0a2a1b1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - Add netCDF to pystac.media_type ([#1386](https://github.com/stac-utils/pystac/pull/1386)) - Add convenience method for accessing pystac_client ([#1365](https://github.com/stac-utils/pystac/pull/1365)) - Fix field ordering when saving `Item`s ([#1423](https://github.com/stac-utils/pystac/pull/1423)) +- Add roles to common metadata ### Changed diff --git a/pystac/common_metadata.py b/pystac/common_metadata.py index c2d12e71d..cd4e02d6e 100644 --- a/pystac/common_metadata.py +++ b/pystac/common_metadata.py @@ -213,3 +213,12 @@ def updated(self) -> datetime | None: @updated.setter def updated(self, v: datetime | None) -> None: self._set_field("updated", utils.map_opt(utils.datetime_to_str, v)) + + @property + def roles(self) -> list[str] | None: + """Get or set the semantic roles of an object.""" + return self._get_field("roles", list[str]) + + @roles.setter + def roles(self, v: list[str] | None) -> None: + self._set_field("roles", v) diff --git a/tests/data-files/item/sample-item-asset-properties.json b/tests/data-files/item/sample-item-asset-properties.json index a47273ea0..78be8ac57 100644 --- a/tests/data-files/item/sample-item-asset-properties.json +++ b/tests/data-files/item/sample-item-asset-properties.json @@ -74,6 +74,7 @@ "start_datetime": "2017-05-01T13:22:30.040Z", "end_datetime": "2017-05-02T13:22:30.040Z", "license": "CC-BY-4.0", + "roles": ["a_role"], "providers": [ { "name": "USGS", diff --git a/tests/test_common_metadata.py b/tests/test_common_metadata.py index f7113481c..e18072672 100644 --- a/tests/test_common_metadata.py +++ b/tests/test_common_metadata.py @@ -538,3 +538,25 @@ def test_updated(self) -> None: self.assertEqual( analytic.to_dict()["updated"], utils.datetime_to_str(set_value) ) + + def test_roles(self) -> None: + item = self.item.clone() + cm = item.common_metadata + analytic = item.assets["analytic"] + analytic_cm = CommonMetadata(analytic) + thumbnail = item.assets["thumbnail"] + thumbnail_cm = CommonMetadata(thumbnail) + + item_value = cm.roles + a2_known_value = ["a_role"] + + # Get + self.assertNotEqual(thumbnail_cm.roles, item_value) + self.assertEqual(thumbnail_cm.roles, a2_known_value) + + # Set + set_value = ["another_role"] + analytic_cm.roles = set_value + + self.assertEqual(analytic_cm.roles, set_value) + self.assertEqual(analytic.to_dict()["roles"], set_value) From 6e4781352db99364576f8a300fb651818662319b Mon Sep 17 00:00:00 2001 From: Tyler <31015976+tylanderson@users.noreply.github.com> Date: Mon, 14 Oct 2024 22:23:17 -0400 Subject: [PATCH 2/3] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0a2a1b1c..55652f938 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ - Add netCDF to pystac.media_type ([#1386](https://github.com/stac-utils/pystac/pull/1386)) - Add convenience method for accessing pystac_client ([#1365](https://github.com/stac-utils/pystac/pull/1365)) - Fix field ordering when saving `Item`s ([#1423](https://github.com/stac-utils/pystac/pull/1423)) -- Add roles to common metadata +- Add roles to common metadata ([#1444](https://github.com/stac-utils/pystac/pull/1444/files)) ### Changed From 0e540d3e3152086a9d88d631e37047a1c9979323 Mon Sep 17 00:00:00 2001 From: Pete Gadomski Date: Tue, 15 Oct 2024 14:34:13 -0600 Subject: [PATCH 3/3] Update pystac/common_metadata.py --- pystac/common_metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pystac/common_metadata.py b/pystac/common_metadata.py index cd4e02d6e..77404b5b5 100644 --- a/pystac/common_metadata.py +++ b/pystac/common_metadata.py @@ -216,7 +216,7 @@ def updated(self, v: datetime | None) -> None: @property def roles(self) -> list[str] | None: - """Get or set the semantic roles of an object.""" + """Get or set the semantic roles of the entity.""" return self._get_field("roles", list[str]) @roles.setter