forked from stac-utils/pystac
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_migrate.py
131 lines (106 loc) · 4.53 KB
/
test_migrate.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import pytest
import pystac
from pystac import ExtensionTypeError
from pystac.cache import CollectionCache
from pystac.extensions.item_assets import ItemAssetsExtension
from pystac.extensions.view import ViewExtension
from pystac.serialization import (
identify_stac_object,
identify_stac_object_type,
merge_common_properties,
migrate_to_latest,
)
from pystac.utils import get_required, str_to_datetime
from tests.utils import TestCases
from tests.utils.test_cases import ExampleInfo
class TestMigrate:
@pytest.mark.parametrize("example", TestCases.get_examples_info())
def test_migrate(self, example: ExampleInfo) -> None:
collection_cache = CollectionCache()
path = example.path
d = pystac.StacIO.default().read_json(path)
if identify_stac_object_type(d) == pystac.STACObjectType.ITEM:
merge_common_properties(
d, json_href=path, collection_cache=collection_cache
)
info = identify_stac_object(d)
migrated_d = migrate_to_latest(d, info)
migrated_info = identify_stac_object(migrated_d)
assert migrated_info.object_type == info.object_type
assert (
migrated_info.version_range.latest_valid_version()
== pystac.get_stac_version()
)
# Ensure all stac_extensions are schema URIs
for e_id in migrated_d["stac_extensions"]:
assert e_id.endswith(".json"), f"{e_id} is not a JSON schema URI"
def test_migrates_removed_extension(self) -> None:
item = pystac.Item.from_file(
TestCases.get_path(
"data-files/examples/0.8.1/extensions/sar/examples/sentinel1.json"
)
)
assert "dtr" not in item.stac_extensions
assert item.common_metadata.start_datetime == str_to_datetime(
"2018-11-03T23:58:55.121559Z"
)
def test_migrates_added_extension(self) -> None:
item = pystac.Item.from_file(
TestCases.get_path(
"data-files/examples/0.8.1/item-spec/" "examples/planet-sample.json"
)
)
assert ViewExtension.has_extension(item)
view_ext = ViewExtension.ext(item)
assert view_ext.sun_azimuth, 101.8
assert view_ext.sun_elevation, 58.8
assert view_ext.off_nadir, 1
def test_migrates_removes_extension(self) -> None:
collection = pystac.Collection.from_file(
TestCases.get_path(
"data-files/examples/0.9.0/extensions/asset/"
"examples/example-landsat8.json"
)
)
assert ItemAssetsExtension.get_schema_uri() not in collection.stac_extensions
assert not ItemAssetsExtension.has_extension(collection)
assert "item_assets" in collection.extra_fields
assert collection.stac_extensions == []
assert collection.item_assets["thumbnail"].title == "Thumbnail"
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"
)
assert datetime_summary.minimum == "2015-06-23T00:00:00Z"
assert datetime_summary.maximum, "2019-07-10T13:44:56Z"
def test_should_raise_exception_when_passing_invalid_extension_object(
self,
) -> None:
with pytest.raises(
ExtensionTypeError,
match=r"^ItemAssetsExtension does not apply to type 'object'$",
):
ItemAssetsExtension.ext(object()) # type: ignore
def test_migrate_works_even_if_stac_extensions_is_null(
test_case_1_catalog: pystac.Catalog,
) -> None:
collection = list(test_case_1_catalog.get_all_collections())[0]
collection_dict = collection.to_dict()
collection_dict["stac_extensions"] = None
pystac.Collection.from_dict(collection_dict, migrate=True)
def test_migrate_updates_license_from_various() -> None:
path = TestCases.get_path("data-files/examples/1.0.0/collectionless-item.json")
item = pystac.Item.from_file(path)
assert item.properties["license"] == "other"
def test_migrate_updates_license_from_proprietary() -> None:
path = TestCases.get_path(
"data-files/examples/1.0.0/collection-only/collection.json"
)
collection = pystac.Collection.from_file(path)
assert collection.license == "other"