Skip to content

Commit 757ba64

Browse files
committed
Add compatibility for S1 products converted with CPM 2.5.6
1 parent f91c334 commit 757ba64

File tree

1 file changed

+29
-10
lines changed

1 file changed

+29
-10
lines changed

src/eopf_stac/sentinel1/stac.py

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,22 @@ def create_item(
232232

233233
def get_product_components(metadata: dict, product_type: str) -> dict[str:str]:
234234
components = {}
235+
component_names: list[str] = None
235236
component_refs = metadata[".zattrs"]["stac_discovery"].get("assets")
236-
if component_refs:
237-
for component_name, _ in component_refs.items():
237+
if component_refs is not None and len(component_refs) > 0:
238+
# New versions of CPM put this information into assets (as map)
239+
component_names = component_refs.keys()
240+
else:
241+
# Older versions of CPM had put this informations into links section (as list)
242+
component_refs = metadata[".zattrs"]["stac_discovery"].get("links")
243+
for ref in component_refs:
244+
if isinstance(ref, str):
245+
if component_names is None:
246+
component_names = []
247+
component_names.append(ref)
248+
249+
if component_names is not None:
250+
for component_name in component_names:
238251
if isinstance(component_name, str):
239252
if product_type in S1_GRD_PRODUCT_TYPES:
240253
key = component_name.split("_")[6]
@@ -247,14 +260,20 @@ def get_product_components(metadata: dict, product_type: str) -> dict[str:str]:
247260
key = parts[6]
248261
components[key] = component_name
249262
elif product_type in S1_OCN_PRODUCT_TYPES:
250-
key = component_name
251-
for sub_component in (
252-
metadata.get(f"{component_name.lower()}/.zattrs", {})
253-
.get("stac_discovery", {})
254-
.get("assets", {})
255-
):
256-
if isinstance(sub_component, str):
257-
components[component_name] = sub_component
263+
sub_component_names: list[str] = None
264+
sub_component_refs = (
265+
metadata.get(f"{component_name.lower()}/.zattrs", {}).get("stac_discovery", {}).get("assets")
266+
)
267+
if sub_component_refs is not None:
268+
sub_component_names = sub_component_refs.keys()
269+
else:
270+
sub_component_names = (
271+
metadata.get(f"{component_name.lower()}/.zattrs", {}).get("stac_discovery", {}).get("links")
272+
)
273+
if sub_component_names is not None:
274+
for sub_component in sub_component_names:
275+
if isinstance(sub_component, str):
276+
components[component_name] = sub_component
258277
else:
259278
# raise ValueError("No references to product components found")
260279
logger.warning("Cannot detect all product parts. Some assets might not be available!")

0 commit comments

Comments
 (0)