Skip to content

Commit 12866c4

Browse files
author
Jon Duckworth
authored
Merge pull request #447 from duckontheweb/add/gh-330-summary-migration
Add migration for pre-1.0.0-rc.1 Stats Object
2 parents e73c570 + e7eb186 commit 12866c4

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
- `ItemCollection` class for working with GeoJSON FeatureCollections containing only
1212
STAC Items ([#430](https://github.com/stac-utils/pystac/pull/430))
1313
- Support for Python 3.9 ([#420](https://github.com/stac-utils/pystac/pull/420))
14+
- 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))
1415

1516
### Changed
1617

pystac/serialization/migrate.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,23 @@ def _migrate_catalog(
2020
d["stac_extensions"] = list(info.extensions)
2121

2222

23+
def _migrate_collection_summaries(
24+
d: Dict[str, Any], version: STACVersionID, info: STACJSONDescription
25+
) -> None:
26+
if version < "1.0.0-rc.1":
27+
for prop, summary in d.get("summaries", {}).items():
28+
if isinstance(summary, dict) and "min" in summary and "max" in summary:
29+
d["summaries"][prop] = {
30+
"minimum": summary["min"],
31+
"maximum": summary["max"],
32+
}
33+
34+
2335
def _migrate_collection(
2436
d: Dict[str, Any], version: STACVersionID, info: STACJSONDescription
2537
) -> None:
2638
_migrate_catalog(d, version, info)
39+
_migrate_collection_summaries(d, version, info)
2740

2841

2942
def _migrate_item(

tests/serialization/test_migrate.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
merge_common_properties,
1111
migrate_to_latest,
1212
)
13-
from pystac.utils import str_to_datetime
13+
from pystac.utils import str_to_datetime, get_required
1414

1515
from tests.utils import TestCases
1616

@@ -83,3 +83,16 @@ def test_migrates_renamed_extension(self) -> None:
8383

8484
self.assertTrue(ItemAssetsExtension.has_extension(collection))
8585
self.assertIn("item_assets", collection.extra_fields)
86+
87+
def test_migrates_pre_1_0_0_rc1_stats_summary(self) -> None:
88+
collection = pystac.Collection.from_file(
89+
TestCases.get_path(
90+
"data-files/examples/1.0.0-beta.2/collection-spec/"
91+
"examples/sentinel2.json"
92+
)
93+
)
94+
datetime_summary = get_required(
95+
collection.summaries.get_range("datetime"), collection.summaries, "datetime"
96+
)
97+
self.assertEqual(datetime_summary.minimum, "2015-06-23T00:00:00Z")
98+
self.assertEqual(datetime_summary.maximum, "2019-07-10T13:44:56Z")

tests/test_collection.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from pystac.extensions.eo import EOExtension
1010
from pystac.validation import validate_dict
1111
from pystac import Collection, Item, Extent, SpatialExtent, TemporalExtent, CatalogType
12-
from pystac.utils import datetime_to_str
12+
from pystac.utils import datetime_to_str, get_required
1313
from tests.utils import TestCases, ARBITRARY_GEOM, ARBITRARY_BBOX
1414

1515
TEST_DATETIME = datetime(2020, 3, 14, 16, 32)
@@ -182,6 +182,20 @@ def test_assets(self) -> None:
182182
collection = pystac.Collection.from_dict(data)
183183
collection.validate()
184184

185+
def test_schema_summary(self) -> None:
186+
collection = pystac.Collection.from_file(
187+
TestCases.get_path(
188+
"data-files/examples/1.0.0/collection-only/collection-with-schemas.json"
189+
)
190+
)
191+
instruments_schema = get_required(
192+
collection.summaries.get_schema("instruments"),
193+
collection.summaries,
194+
"instruments",
195+
)
196+
197+
self.assertIsInstance(instruments_schema, dict)
198+
185199

186200
class ExtentTest(unittest.TestCase):
187201
def test_spatial_allows_single_bbox(self) -> None:

0 commit comments

Comments
 (0)