From ec7809ccc1f905dbb88d376ebbb9a91b188513b8 Mon Sep 17 00:00:00 2001 From: Jon Duckworth Date: Tue, 15 Jun 2021 19:51:11 -0400 Subject: [PATCH 1/3] Add migration for pre-1.0.0-rc.1 Stats Object --- pystac/serialization/migrate.py | 13 +++++++++++++ tests/serialization/test_migrate.py | 15 ++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/pystac/serialization/migrate.py b/pystac/serialization/migrate.py index 86760cd7a..87f6e04da 100644 --- a/pystac/serialization/migrate.py +++ b/pystac/serialization/migrate.py @@ -20,10 +20,23 @@ def _migrate_catalog( d["stac_extensions"] = list(info.extensions) +def _migrate_collection_summaries( + d: Dict[str, Any], version: STACVersionID, info: STACJSONDescription +) -> None: + if version < "1.0.0-rc.1": + for prop, summary in d.get("summaries", {}).items(): + if isinstance(summary, dict) and "min" in summary and "max" in summary: + d["summaries"][prop] = { + "minimum": summary["min"], + "maximum": summary["max"], + } + + def _migrate_collection( d: Dict[str, Any], version: STACVersionID, info: STACJSONDescription ) -> None: _migrate_catalog(d, version, info) + _migrate_collection_summaries(d, version, info) def _migrate_item( diff --git a/tests/serialization/test_migrate.py b/tests/serialization/test_migrate.py index 1fe917cee..ec7a47951 100644 --- a/tests/serialization/test_migrate.py +++ b/tests/serialization/test_migrate.py @@ -10,7 +10,7 @@ merge_common_properties, migrate_to_latest, ) -from pystac.utils import str_to_datetime +from pystac.utils import str_to_datetime, get_required from tests.utils import TestCases @@ -83,3 +83,16 @@ def test_migrates_renamed_extension(self) -> None: self.assertTrue(ItemAssetsExtension.has_extension(collection)) self.assertIn("item_assets", collection.extra_fields) + + def test_migrates_pre_1_0_0_rc1_stats_summary(self) -> None: + collection = pystac.Collection.from_file( + TestCases.get_path( + "data-files/examples/1.0.0-beta.2/collection-spec/" + "examples/sentinel2.json" + ) + ) + datetime_summary = get_required( + collection.summaries.get_range("datetime"), collection.summaries, "datetime" + ) + self.assertEqual(datetime_summary.minimum, "2015-06-23T00:00:00Z") + self.assertEqual(datetime_summary.maximum, "2019-07-10T13:44:56Z") From 45563029edb008e5e0c8426c9aec2d34f8dafac3 Mon Sep 17 00:00:00 2001 From: Jon Duckworth Date: Tue, 15 Jun 2021 20:31:40 -0400 Subject: [PATCH 2/3] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42239d566..02b67810f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - `ItemCollection` class for working with GeoJSON FeatureCollections containing only STAC Items ([#430](https://github.com/stac-utils/pystac/pull/430)) - Support for Python 3.9 ([#420](https://github.com/stac-utils/pystac/pull/420)) +- Migration for pre-1.0.0-rc.1 Stats Objects (renamed to Range Objects in 1.0.0-rc.3) ([#447](https://github.com/stac-utils/pystac/pull/447)) ### Changed From e7eb186e47a229760e04bae1059ca449835f23bc Mon Sep 17 00:00:00 2001 From: Jon Duckworth Date: Wed, 16 Jun 2021 10:17:38 -0400 Subject: [PATCH 3/3] Add test coverage for schema summary types --- tests/test_collection.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/test_collection.py b/tests/test_collection.py index 7682e5846..29972410e 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -9,7 +9,7 @@ from pystac.extensions.eo import EOExtension from pystac.validation import validate_dict from pystac import Collection, Item, Extent, SpatialExtent, TemporalExtent, CatalogType -from pystac.utils import datetime_to_str +from pystac.utils import datetime_to_str, get_required from tests.utils import TestCases, ARBITRARY_GEOM, ARBITRARY_BBOX TEST_DATETIME = datetime(2020, 3, 14, 16, 32) @@ -182,6 +182,20 @@ def test_assets(self) -> None: collection = pystac.Collection.from_dict(data) collection.validate() + def test_schema_summary(self) -> None: + collection = pystac.Collection.from_file( + TestCases.get_path( + "data-files/examples/1.0.0/collection-only/collection-with-schemas.json" + ) + ) + instruments_schema = get_required( + collection.summaries.get_schema("instruments"), + collection.summaries, + "instruments", + ) + + self.assertIsInstance(instruments_schema, dict) + class ExtentTest(unittest.TestCase): def test_spatial_allows_single_bbox(self) -> None: