11import unittest
22
3+ import pytest
4+
35from pystac import Collection
4- from pystac .extensions .item_assets import AssetDefinition , ItemAssetsExtension
6+ from pystac .errors import DeprecatedWarning
7+ from pystac .extensions .item_assets import ItemAssetsExtension
8+ from pystac .item_assets import ItemAssetDefinition
59from tests .utils import TestCases
610
11+ CLASSIFICATION_COLLECTION_RASTER_URI = TestCases .get_path (
12+ "data-files/classification/collection-item-assets-raster-bands.json"
13+ )
14+
715
8- class TestItemAssetsExtension (unittest .TestCase ):
16+ class TestItemAssets (unittest .TestCase ):
917 def setUp (self ) -> None :
1018 self .maxDiff = None
1119 self .collection = Collection .from_file (
@@ -14,13 +22,13 @@ def setUp(self) -> None:
1422
1523 def test_example (self ) -> None :
1624 collection = self .collection .clone ()
17- item_ext = ItemAssetsExtension .ext (collection )
1825
19- self .assertEqual (len (item_ext .item_assets ), 13 )
26+ assert collection .item_assets
27+ self .assertEqual (len (collection .item_assets ), 13 )
2028
2129 self .assertEqual (
22- item_ext .item_assets ["B1" ],
23- AssetDefinition (
30+ collection .item_assets ["B1" ],
31+ ItemAssetDefinition (
2432 {
2533 "type" : "image/tiff; application=geotiff" ,
2634 "eo:bands" : [
@@ -50,7 +58,7 @@ def test_create(self) -> None:
5058 description = "Coastal Band Top Of the Atmosphere"
5159 media_type = "image/tiff; application=geotiff"
5260 roles = ["data" ]
53- asset_defn = AssetDefinition .create (
61+ asset_defn = ItemAssetDefinition .create (
5462 title = title , description = description , media_type = media_type , roles = roles
5563 )
5664 self .assertEqual (asset_defn .title , title )
@@ -59,7 +67,7 @@ def test_create(self) -> None:
5967 self .assertEqual (asset_defn .roles , roles )
6068
6169 def test_title (self ) -> None :
62- asset_defn = AssetDefinition ({})
70+ asset_defn = ItemAssetDefinition ({})
6371 title = "Very Important Asset"
6472
6573 asset_defn .title = title
@@ -68,7 +76,7 @@ def test_title(self) -> None:
6876 self .assertEqual (asset_defn .to_dict ()["title" ], title )
6977
7078 def test_description (self ) -> None :
71- asset_defn = AssetDefinition ({})
79+ asset_defn = ItemAssetDefinition ({})
7280 description = "What an incredibly important asset this is!"
7381
7482 asset_defn .description = description
@@ -77,7 +85,7 @@ def test_description(self) -> None:
7785 self .assertEqual (asset_defn .to_dict ()["description" ], description )
7886
7987 def test_media_type (self ) -> None :
80- asset_defn = AssetDefinition ({})
88+ asset_defn = ItemAssetDefinition ({})
8189 media_type = "application/json"
8290
8391 asset_defn .media_type = media_type
@@ -86,7 +94,7 @@ def test_media_type(self) -> None:
8694 self .assertEqual (asset_defn .to_dict ()["type" ], media_type )
8795
8896 def test_roles (self ) -> None :
89- asset_defn = AssetDefinition ({})
97+ asset_defn = ItemAssetDefinition ({})
9098 roles = ["thumbnail" ]
9199
92100 asset_defn .roles = roles
@@ -96,23 +104,37 @@ def test_roles(self) -> None:
96104
97105
98106def test_extra_fields (collection : Collection ) -> None :
99- asset_definition = AssetDefinition .create (
107+ asset_definition = ItemAssetDefinition .create (
100108 title = None ,
101109 description = None ,
102110 media_type = None ,
103111 roles = None ,
104112 extra_fields = {"raster:bands" : [{"nodata" : 42 }]},
105113 )
106- item_assets = ItemAssetsExtension .ext (collection , add_if_missing = True )
107- item_assets .item_assets = {"data" : asset_definition }
114+ collection .item_assets = {"data" : asset_definition }
108115 collection_as_dict = collection .to_dict ()
109116 assert collection_as_dict ["item_assets" ]["data" ]["raster:bands" ] == [{"nodata" : 42 }]
110117 asset = asset_definition .create_asset ("asset.tif" )
111118 assert asset .extra_fields ["raster:bands" ] == [{"nodata" : 42 }]
112119
113- collection .ext . item_assets ["data" ].ext .add ("raster" )
114- assert (bands := collection .ext . item_assets ["data" ].ext .raster .bands )
120+ collection .item_assets ["data" ].ext .add ("raster" )
121+ assert (bands := collection .item_assets ["data" ].ext .raster .bands )
115122 assert bands [0 ].nodata == 42
116123
117- assert collection .ext . item_assets ["data" ].ext .has ("raster" )
124+ assert collection .item_assets ["data" ].ext .has ("raster" )
118125 assert collection .ext .has ("raster" )
126+
127+
128+ def test_item_assets_extension_is_deprecated () -> None :
129+ collection = Collection .from_file (CLASSIFICATION_COLLECTION_RASTER_URI )
130+ with pytest .warns (DeprecatedWarning , match = "top-level collection properties" ):
131+ item_asset = ItemAssetsExtension .ext (
132+ collection , add_if_missing = True
133+ ).item_assets ["cloud-mask-raster" ]
134+
135+ assert item_asset .ext .has ("eo" )
136+
137+ with pytest .warns (DeprecatedWarning , match = "top-level collection properties" ):
138+ assert collection .ext .item_assets ["cloud-mask-raster" ].ext .has ("eo" )
139+
140+ assert ItemAssetsExtension .get_schema_uri () in collection .stac_extensions
0 commit comments