"""Module holding classes dealing with registration routes of STAC objects
"""
import json
from typing import List, Optional
import pystac
from ..abc import Route
from ..config import SourceConfig
from ..source import Source, get_source
[docs]class ItemRoute(Route[pystac.Item]):
"""A route implementation for STAC Items"""
[docs] def parse(self, raw: str) -> pystac.Item:
return pystac.Item.from_dict(json.loads(raw))
[docs] def get_source(
self, source_cfgs: List[SourceConfig], item: pystac.Item
) -> Optional[Source]:
return get_source(
source_cfgs, [asset.href for asset in item.assets.values()]
)
[docs]class CollectionRoute(Route[pystac.Catalog]):
"""A route implementation for STAC Collections"""
[docs] def parse(self, raw: str) -> pystac.Catalog:
values = json.loads(raw)
if values.get("type") == "Collection":
return pystac.Collection.from_dict(values)
elif values.get("type") == "Catalog":
return pystac.Catalog.from_dict(values)
else:
raise ValueError(f"Invalid collection/catalog object {values}")
[docs] def get_source(
self, source_cfgs: List[SourceConfig], item: pystac.Catalog
) -> Optional[Source]:
if isinstance(item, pystac.Collection):
return get_source(
source_cfgs, [asset.href for asset in item.assets.values()]
)
return get_source(
source_cfgs, [item.get_self_href() or ""]
)