Skip to content
Snippets Groups Projects
Commit eee858de authored by Cresson Remi's avatar Cresson Remi
Browse files

Merge branch 'enh_base_model' into 'main'

wip

See merge request umr-tetis/stac/extensions/generic-metadata!13
parents 5f1c692b 00612158
Branches
Tags v0.1.3-dev1
No related merge requests found
......@@ -16,6 +16,6 @@ Tests:
except: [main, tags]
script:
- pip install pip --upgrade
- pip install .
- pip install .[test]
- python3 tests/extensions_test.py
......@@ -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__" }
......
......@@ -2,4 +2,4 @@
from .core import create_extension_cls, BaseExtensionModel # noqa
__version__ = "0.1.3"
__version__ = "0.1.3-dev1"
......@@ -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
......
......@@ -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")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment