Skip to content

Commit 84073a4

Browse files
committed
Implement #370 for View Geometry Extension
1 parent 5256766 commit 84073a4

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

pystac/extensions/view.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@ def sun_elevation(self, v: Optional[float]) -> None:
143143
def get_schema_uri(cls) -> str:
144144
return SCHEMA_URI
145145

146-
@staticmethod
147-
def ext(obj: T) -> "ViewExtension[T]":
146+
@classmethod
147+
def ext(cls, obj: T) -> "ViewExtension[T]":
148148
"""Extends the given STAC Object with properties from the :stac-ext:`View
149149
Geometry Extension <scientific>`.
150150
@@ -156,8 +156,10 @@ def ext(obj: T) -> "ViewExtension[T]":
156156
pystac.ExtensionTypeError : If an invalid object type is passed.
157157
"""
158158
if isinstance(obj, pystac.Item):
159+
cls.validate_has_extension(obj)
159160
return cast(ViewExtension[T], ItemViewExtension(obj))
160161
elif isinstance(obj, pystac.Asset):
162+
cls.validate_has_extension(obj)
161163
return cast(ViewExtension[T], AssetViewExtension(obj))
162164
else:
163165
raise pystac.ExtensionTypeError(

tests/extensions/test_view.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,24 @@ def test_sun_elevation(self) -> None:
220220
# Validate
221221
view_item.validate()
222222

223+
def test_extension_not_implemented(self) -> None:
224+
# Should raise exception if Item does not include extension URI
225+
item = pystac.Item.from_file(self.example_uri)
226+
item.stac_extensions.remove(ViewExtension.get_schema_uri())
227+
228+
with self.assertRaises(pystac.ExtensionNotImplemented):
229+
_ = ViewExtension.ext(item)
230+
231+
# Should raise exception if owning Item does not include extension URI
232+
asset = item.assets["blue"]
233+
234+
with self.assertRaises(pystac.ExtensionNotImplemented):
235+
_ = ViewExtension.ext(asset)
236+
237+
# Should succeed if Asset has no owner
238+
ownerless_asset = pystac.Asset.from_dict(asset.to_dict())
239+
_ = ViewExtension.ext(ownerless_asset)
240+
223241

224242
class ViewSummariestest(unittest.TestCase):
225243
def setUp(self) -> None:

0 commit comments

Comments
 (0)