| 
19 | 19 |     PropertiesExtension,  | 
20 | 20 | )  | 
21 | 21 | from pystac.extensions.classification import Classification  | 
 | 22 | +from pystac.extensions.hooks import ExtensionHooks  | 
22 | 23 | from pystac.extensions.raster import DataType  | 
 | 24 | +from pystac.serialization.identify import STACJSONDescription, STACVersionID  | 
23 | 25 | from pystac.utils import StringEnum, get_required  | 
24 | 26 | 
 
  | 
25 | 27 | T = TypeVar(  | 
@@ -1718,6 +1720,7 @@ class _AssetMLMExtension(ABC):  | 
1718 | 1720 |     Abstract base class for (derived) MLM asset extensions.  | 
1719 | 1721 |     """  | 
1720 | 1722 | 
 
  | 
 | 1723 | +    name: Literal["mlm"] = "mlm"  | 
1721 | 1724 |     asset: pystac.Asset  | 
1722 | 1725 |     asset_href: str  | 
1723 | 1726 |     properties: dict[str, Any]  | 
@@ -2009,3 +2012,41 @@ def __init__(self, item_asset: pystac.ItemAssetDefinition):  | 
2009 | 2012 | 
 
  | 
2010 | 2013 |     def __repr__(self) -> str:  | 
2011 | 2014 |         return f"<ItemAssetsMLMExtension ItemAssetDefinition={self.asset_defn}"  | 
 | 2015 | + | 
 | 2016 | + | 
 | 2017 | +class MLMExtensionHooks(ExtensionHooks):  | 
 | 2018 | +    schema_uri: str = SCHEMA_URI_PATTERN.format(version=DEFAULT_VERSION)  | 
 | 2019 | +    prev_extension_ids = {  | 
 | 2020 | +        SCHEMA_URI_PATTERN.format(version=v)  | 
 | 2021 | +        for v in SUPPORTED_VERSIONS  | 
 | 2022 | +        if v != DEFAULT_VERSION  | 
 | 2023 | +    }  | 
 | 2024 | +    stac_object_types = {pystac.STACObjectType.ITEM, pystac.STACObjectType.COLLECTION}  | 
 | 2025 | + | 
 | 2026 | +    def migrate(  | 
 | 2027 | +        self, obj: dict[str, Any], version: STACVersionID, info: STACJSONDescription  | 
 | 2028 | +    ) -> None:  | 
 | 2029 | +        # migrate from 1.0.0 to 1.1.0  | 
 | 2030 | +        if SCHEMA_URI_PATTERN.format(version="1.0.0") in info.extensions:  | 
 | 2031 | +            # no migrations needed  | 
 | 2032 | +            pass  | 
 | 2033 | + | 
 | 2034 | +        # migrate from 1.1.0 to 1.2.0  | 
 | 2035 | +        if SCHEMA_URI_PATTERN.format(version="1.1.0") in info.extensions:  | 
 | 2036 | +            # no migrations needed  | 
 | 2037 | +            pass  | 
 | 2038 | + | 
 | 2039 | +        # migrate from 1.2.0 to 1.3.0  | 
 | 2040 | +        if SCHEMA_URI_PATTERN.format(version="1.2.0") in info.extensions:  | 
 | 2041 | +            # no migration needed  | 
 | 2042 | +            pass  | 
 | 2043 | + | 
 | 2044 | +        # migrate from 1.3.0 to 1.4.0  | 
 | 2045 | +        if SCHEMA_URI_PATTERN.format(version="1.3.0") in info.extensions:  | 
 | 2046 | +            # no migration needed  | 
 | 2047 | +            pass  | 
 | 2048 | + | 
 | 2049 | +        super().migrate(obj, version, info)  | 
 | 2050 | + | 
 | 2051 | + | 
 | 2052 | +MLM_EXTENSION_HOOKS: ExtensionHooks = MLMExtensionHooks()  | 
0 commit comments