1818
1919code = "MGRS-4CFJ"
2020
21+ SENTINEL_EXAMPLE_URI = TestCases .get_path ("data-files/grid/example-sentinel2.json" )
2122
22- def make_item () -> pystac .Item :
23+
24+ @pytest .fixture
25+ def item () -> pystac .Item :
2326 """Create basic test items that are only slightly different."""
2427 asset_id = "an/asset"
2528 start = datetime (2018 , 1 , 2 )
@@ -30,119 +33,110 @@ def make_item() -> pystac.Item:
3033 GridExtension .add_to (item )
3134 return item
3235
36+ def test_stac_extensions (self ) -> None :
37+ self .assertTrue (GridExtension .has_extension (self .item ))
3338
34- class GridTest (unittest .TestCase ):
35- def setUp (self ) -> None :
36- super ().setUp ()
37- self .item = make_item ()
38- self .sentinel_example_uri = TestCases .get_path (
39- "data-files/grid/example-sentinel2.json"
40- )
41-
42- def test_stac_extensions (self ) -> None :
43- self .assertTrue (GridExtension .has_extension (self .item ))
44-
45- def test_item_repr (self ) -> None :
46- grid_item_ext = GridExtension .ext (self .item )
47- self .assertEqual (
48- f"<ItemGridExtension Item id={ self .item .id } >" , grid_item_ext .__repr__ ()
49- )
50-
51- @pytest .mark .vcr ()
52- def test_attributes (self ) -> None :
53- GridExtension .ext (self .item ).apply (code )
54- self .assertEqual (code , GridExtension .ext (self .item ).code )
55- self .item .validate ()
56-
57- def test_invalid_code_value (self ) -> None :
58- with self .assertRaises (ValueError ):
59- GridExtension .ext (self .item ).apply ("not_a_valid_code" )
60-
61- @pytest .mark .vcr ()
62- def test_modify (self ) -> None :
63- GridExtension .ext (self .item ).apply (code )
64- GridExtension .ext (self .item ).apply (code + "a" )
65- self .assertEqual (code + "a" , GridExtension .ext (self .item ).code )
66- self .item .validate ()
67-
68- def test_from_dict (self ) -> None :
69- d : dict [str , Any ] = {
70- "type" : "Feature" ,
71- "stac_version" : "1.1.0" ,
72- "id" : "an/asset" ,
73- "properties" : {
74- "grid:code" : code ,
75- "datetime" : "2018-01-02T00:00:00Z" ,
76- },
77- "geometry" : None ,
78- "links" : [],
79- "assets" : {},
80- "stac_extensions" : [GridExtension .get_schema_uri ()],
81- }
82- item = pystac .Item .from_dict (d )
83- self .assertEqual (code , GridExtension .ext (item ).code )
84-
85- def test_to_from_dict (self ) -> None :
86- GridExtension .ext (self .item ).apply (code )
87- d = self .item .to_dict ()
88- self .assertEqual (code , d ["properties" ][grid .CODE_PROP ])
89-
90- item = pystac .Item .from_dict (d )
91- self .assertEqual (code , GridExtension .ext (item ).code )
92-
93- def test_clear_code (self ) -> None :
94- GridExtension .ext (self .item ).apply (code )
95-
96- with self .assertRaises (ValueError ):
97- # Ignore type errors because this test intentionally checks behavior
98- # that does not conform to the type signature.
99- # https://github.com/stac-utils/pystac/pull/878#discussion_r957352232
100- GridExtension .ext (self .item ).code = None # type: ignore
101- with self .assertRaises (ValueError ):
102- # First segment has to be all caps
103- # https://github.com/stac-utils/pystac/pull/878#discussion_r957354927
104- GridExtension .ext (self .item ).code = "this-is-not-a-grid-code"
105- with self .assertRaises (ValueError ):
106- # Folks might try to put an epsg code in
107- # https://github.com/stac-utils/pystac/pull/878#discussion_r957355415
108- GridExtension .ext (self .item ).code = "4326"
109- with self .assertRaises (ValueError ):
110- # Folks might try to put an epsg code in
111- # https://github.com/stac-utils/pystac/pull/878#discussion_r957355415
112- GridExtension .ext (self .item ).code = "EPSG:4326"
113-
114- def test_extension_not_implemented (self ) -> None :
115- # Should raise exception if Item does not include extension URI
116- item = pystac .Item .from_file (self .sentinel_example_uri )
117- item .stac_extensions .remove (GridExtension .get_schema_uri ())
118-
119- with self .assertRaises (pystac .ExtensionNotImplemented ):
120- _ = GridExtension .ext (item )
121-
122- # Should raise exception if owning Item does not include extension URI
123- item .properties ["grid:code" ] = None
124-
125- with self .assertRaises (pystac .ExtensionNotImplemented ):
126- _ = GridExtension .ext (item )
127-
128- def test_item_ext_add_to (self ) -> None :
129- item = pystac .Item .from_file (self .sentinel_example_uri )
130- item .stac_extensions .remove (GridExtension .get_schema_uri ())
131- self .assertNotIn (GridExtension .get_schema_uri (), item .stac_extensions )
132-
133- _ = GridExtension .ext (item , add_if_missing = True )
134-
135- self .assertIn (GridExtension .get_schema_uri (), item .stac_extensions )
136-
137- def test_should_raise_exception_when_passing_invalid_extension_object (
138- self ,
139- ) -> None :
140- self .assertRaisesRegex (
141- ExtensionTypeError ,
142- r"^GridExtension does not apply to type 'object'$" ,
143- GridExtension .ext ,
144- object (),
145- )
39+ def test_item_repr (self ) -> None :
40+ grid_item_ext = GridExtension .ext (self .item )
41+ self .assertEqual (
42+ f"<ItemGridExtension Item id={ self .item .id } >" , grid_item_ext .__repr__ ()
43+ )
44+
45+ @pytest .mark .vcr ()
46+ def test_attributes (self ) -> None :
47+ GridExtension .ext (self .item ).apply (code )
48+ self .assertEqual (code , GridExtension .ext (self .item ).code )
49+ self .item .validate ()
50+
51+ def test_invalid_code_value (self ) -> None :
52+ with self .assertRaises (ValueError ):
53+ GridExtension .ext (self .item ).apply ("not_a_valid_code" )
54+
55+ @pytest .mark .vcr ()
56+ def test_modify (self ) -> None :
57+ GridExtension .ext (self .item ).apply (code )
58+ GridExtension .ext (self .item ).apply (code + "a" )
59+ self .assertEqual (code + "a" , GridExtension .ext (self .item ).code )
60+ self .item .validate ()
61+
62+ def test_from_dict (self ) -> None :
63+ d : dict [str , Any ] = {
64+ "type" : "Feature" ,
65+ "stac_version" : "1.1.0" ,
66+ "id" : "an/asset" ,
67+ "properties" : {
68+ "grid:code" : code ,
69+ "datetime" : "2018-01-02T00:00:00Z" ,
70+ },
71+ "geometry" : None ,
72+ "links" : [],
73+ "assets" : {},
74+ "stac_extensions" : [GridExtension .get_schema_uri ()],
75+ }
76+ item = pystac .Item .from_dict (d )
77+ self .assertEqual (code , GridExtension .ext (item ).code )
78+
79+ def test_to_from_dict (self ) -> None :
80+ GridExtension .ext (self .item ).apply (code )
81+ d = self .item .to_dict ()
82+ self .assertEqual (code , d ["properties" ][grid .CODE_PROP ])
83+
84+ item = pystac .Item .from_dict (d )
85+ self .assertEqual (code , GridExtension .ext (item ).code )
86+
87+ def test_clear_code (self ) -> None :
88+ GridExtension .ext (self .item ).apply (code )
89+
90+ with self .assertRaises (ValueError ):
91+ # Ignore type errors because this test intentionally checks behavior
92+ # that does not conform to the type signature.
93+ # https://github.com/stac-utils/pystac/pull/878#discussion_r957352232
94+ GridExtension .ext (self .item ).code = None # type: ignore
95+ with self .assertRaises (ValueError ):
96+ # First segment has to be all caps
97+ # https://github.com/stac-utils/pystac/pull/878#discussion_r957354927
98+ GridExtension .ext (self .item ).code = "this-is-not-a-grid-code"
99+ with self .assertRaises (ValueError ):
100+ # Folks might try to put an epsg code in
101+ # https://github.com/stac-utils/pystac/pull/878#discussion_r957355415
102+ GridExtension .ext (self .item ).code = "4326"
103+ with self .assertRaises (ValueError ):
104+ # Folks might try to put an epsg code in
105+ # https://github.com/stac-utils/pystac/pull/878#discussion_r957355415
106+ GridExtension .ext (self .item ).code = "EPSG:4326"
107+
108+ def test_extension_not_implemented (self ) -> None :
109+ # Should raise exception if Item does not include extension URI
110+ item = pystac .Item .from_file (SENTINEL_EXAMPLE_URI )
111+ item .stac_extensions .remove (GridExtension .get_schema_uri ())
112+
113+ with self .assertRaises (pystac .ExtensionNotImplemented ):
114+ _ = GridExtension .ext (item )
115+
116+ # Should raise exception if owning Item does not include extension URI
117+ item .properties ["grid:code" ] = None
118+
119+ with self .assertRaises (pystac .ExtensionNotImplemented ):
120+ _ = GridExtension .ext (item )
121+
122+ def test_item_ext_add_to (self ) -> None :
123+ item = pystac .Item .from_file (SENTINEL_EXAMPLE_URI )
124+ item .stac_extensions .remove (GridExtension .get_schema_uri ())
125+ self .assertNotIn (GridExtension .get_schema_uri (), item .stac_extensions )
126+
127+ _ = GridExtension .ext (item , add_if_missing = True )
128+
129+ self .assertIn (GridExtension .get_schema_uri (), item .stac_extensions )
130+
131+ def test_should_raise_exception_when_passing_invalid_extension_object (
132+ self ,
133+ ) -> None :
134+ self .assertRaisesRegex (
135+ ExtensionTypeError ,
136+ r"^GridExtension does not apply to type 'object'$" ,
137+ GridExtension .ext ,
138+ object (),
139+ )
146140
147141
148142@pytest .fixture
0 commit comments