Skip to content

Commit

Permalink
feat: add utility method to load model (#17)
Browse files Browse the repository at this point in the history
  • Loading branch information
jnicoulaud-ledger authored Sep 24, 2024
1 parent a209fbc commit 2e20c1d
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 8 deletions.
3 changes: 1 addition & 2 deletions src/erc7730/linter/lint.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from pathlib import Path

from erc7730 import ERC_7730_REGISTRY_CALLDATA_PREFIX, ERC_7730_REGISTRY_EIP712_PREFIX
from erc7730.common.pydantic import model_from_json_file_with_includes
from erc7730.linter import ERC7730Linter
from erc7730.linter.linter_base import MultiLinter
from erc7730.linter.linter_transaction_type_classifier_ai import ClassifyTransactionTypeLinter
Expand Down Expand Up @@ -46,7 +45,7 @@ def adder(output: ERC7730Linter.Output) -> None:
out(output.model_copy(update={"file": path}))

try:
descriptor = model_from_json_file_with_includes(path, ERC7730Descriptor)
descriptor = ERC7730Descriptor.load(path)
descriptor = resolve_external_references(descriptor)
linter.lint(descriptor, adder)
except Exception as e:
Expand Down
16 changes: 14 additions & 2 deletions src/erc7730/model/erc7730_descriptor.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
from pathlib import Path
from typing import Union, Optional

from pydantic import ConfigDict, Field

from erc7730.common.pydantic import model_from_json_file_with_includes, model_from_json_file_with_includes_or_none
from erc7730.model.base import BaseLibraryModel
from erc7730.model.context import ContractContext, EIP712Context
from erc7730.model.display import Display
from erc7730.model.metadata import Metadata
from pydantic import ConfigDict, Field
from typing import Union, Optional


class ERC7730Descriptor(BaseLibraryModel):
Expand All @@ -23,3 +27,11 @@ class ERC7730Descriptor(BaseLibraryModel):
context: Optional[Union[ContractContext, EIP712Context]] = None
metadata: Optional[Metadata] = None
display: Optional[Display] = None

@classmethod
def load(cls, path: Path) -> "ERC7730Descriptor":
return model_from_json_file_with_includes(path, ERC7730Descriptor)

@classmethod
def load_or_none(cls, path: Path) -> Optional["ERC7730Descriptor"]:
return model_from_json_file_with_includes_or_none(path, ERC7730Descriptor)
4 changes: 2 additions & 2 deletions tests/src/erc7730/common/test_datamodel.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from pathlib import Path
from erc7730.common.json import read_json_with_includes
from erc7730.common.pydantic import model_from_json_file_with_includes_or_none, json_file_from_model
from erc7730.common.pydantic import json_file_from_model
from erc7730.model.erc7730_descriptor import ERC7730Descriptor
import pytest
import glob
Expand All @@ -15,7 +15,7 @@
@pytest.mark.parametrize("file", files)
def test_from_erc7730(file: str) -> None:
original_dict_with_includes = read_json_with_includes(Path(file))
model_erc7730 = model_from_json_file_with_includes_or_none(Path(file), ERC7730Descriptor)
model_erc7730 = ERC7730Descriptor.load_or_none(Path(file))
assert model_erc7730 is not None
json_str_from_model = json_file_from_model(ERC7730Descriptor, model_erc7730)
json_from_model = json.loads(json_str_from_model)
Expand Down
3 changes: 1 addition & 2 deletions tests/src/erc7730/mapper/test_mapper.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from pathlib import Path
from erc7730.common.pydantic import model_from_json_file_with_includes_or_none
from erc7730.model.erc7730_descriptor import ERC7730Descriptor
from erc7730.mapper.mapper import to_eip712_mapper, to_erc7730_mapper
from eip712 import EIP712DAppDescriptor
Expand All @@ -11,7 +10,7 @@

@pytest.mark.parametrize("input", inputs)
def test_roundtrip(input: str) -> None:
erc7730Descriptor = model_from_json_file_with_includes_or_none(Path(input), ERC7730Descriptor)
erc7730Descriptor = ERC7730Descriptor.load_or_none(Path(input))
assert erc7730Descriptor is not None
assert isinstance(erc7730Descriptor, ERC7730Descriptor)
eip712DappDescriptor = to_eip712_mapper(erc7730Descriptor)
Expand Down

0 comments on commit 2e20c1d

Please sign in to comment.