diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4bb2302d87b36cbd38be675803b0ecaed4842f2f..4a210d46633be4608625268995876ea1e50a1bed 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,6 +16,6 @@ Tests: except: [main, tags] script: - pip install pip --upgrade - - pip install . + - pip install .[test] - python3 tests/extensions_test.py diff --git a/pyproject.toml b/pyproject.toml index 916948230bb9b066aec60975d09b9c28f4010556..105cdbdc163d0d595be3cb493328eb1bb4c92bfe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ genmeta_cli = "stac_extension_genmeta.cli:app" packages = ["stac_extension_genmeta"] [project.optional-dependencies] -validation = ["requests", "pystac[validation]"] +test = ["requests", "pystac[validation]"] [tool.setuptools.dynamic] version = { attr = "stac_extension_genmeta.__version__" } diff --git a/stac_extension_genmeta/__init__.py b/stac_extension_genmeta/__init__.py index ff56c0323f6394d711381f3b721b994f4cd8d366..55989ae2477f21ad87fd52cc857dcf7b75aa550d 100644 --- a/stac_extension_genmeta/__init__.py +++ b/stac_extension_genmeta/__init__.py @@ -2,4 +2,4 @@ from .core import create_extension_cls, BaseExtensionModel # noqa -__version__ = "0.1.3" +__version__ = "0.1.3-dev1" diff --git a/stac_extension_genmeta/core.py b/stac_extension_genmeta/core.py index c8b1eb201029a83cfcce889ff4628f8514223422..15ace43924468bdb9426a8048f33809a22810aee 100644 --- a/stac_extension_genmeta/core.py +++ b/stac_extension_genmeta/core.py @@ -12,7 +12,7 @@ from .schema import generate_schema import json -class BaseExtensionModel(BaseException): +class BaseExtensionModel(BaseModel): """Base class for extensions models.""" model_config = ConfigDict(populate_by_name=True) @@ -59,7 +59,7 @@ def create_extension_cls(model_cls: BaseModel, schema_uri: str) -> PropertiesExt # If not possible, self.md is set to `None` props = { key: self._get_property(info.alias, str) - for key, info in model_cls.__fields__.items() + for key, info in model_cls.model_fields.items() } props = {p: v for p, v in props.items() if v is not None} self.md = model_cls(**props) if props else None @@ -81,7 +81,7 @@ def create_extension_cls(model_cls: BaseModel, schema_uri: str) -> PropertiesExt # Set properties md = md or model_cls(**kwargs) for key, value in md.model_dump(exclude_unset=True).items(): - alias = model_cls.__fields__[key].alias or key + alias = model_cls.model_fields[key].alias or key self._set_property(alias, value, pop_if_none=False) @classmethod diff --git a/stac_extension_genmeta/testing.py b/stac_extension_genmeta/testing.py index 5f51e2d4da6a3a2b7b5d721124ce7b65496688c8..f134f7c78253c3797b413f172e654cdf23061557 100644 --- a/stac_extension_genmeta/testing.py +++ b/stac_extension_genmeta/testing.py @@ -2,6 +2,8 @@ import pystac from datetime import datetime import random import json +import requests +import difflib def create_dummy_item(date=None): @@ -65,9 +67,11 @@ def basic_test( validate: bool = True ): print( - f"Extension metadata model: \n{ext_md.__class__.schema_json(indent=2)}" + f"Extension metadata model: \n{ext_md.__class__.model_json_schema()}" ) + ext_cls.print_schema() + def apply(stac_obj, method="arg"): """ Apply the extension to the item @@ -81,7 +85,7 @@ def basic_test( elif method == "dict": d = { name: getattr(ext_md, name) - for name in ext_md.__fields__ + for name in ext_md.model_fields } print(f"Passing kwargs: {d}") ext.apply(**d) @@ -97,7 +101,7 @@ def basic_test( Compare the metadata carried by the stac object with the expected metadata. """ read_ext = ext_cls(stac_obj) - for field in ext_md.__class__.__fields__: + for field in ext_md.__class__.model_fields: ref = getattr(ext_md, field) got = getattr(read_ext, field) assert got == ref, f"'{field}': values differ: {got} (expected {ref})" @@ -152,7 +156,6 @@ def basic_test( def is_schema_url_synced(cls): - import requests local_schema = cls.get_schema() url = cls.get_schema_uri() remote_schema = requests.get(url).json() @@ -165,7 +168,6 @@ def is_schema_url_synced(cls): ) if local_schema != remote_schema: print("Schema differs:") - import difflib def _json2str(dic): return json.dumps(dic, indent=2).split("\n")