Skip to content

Commit 26dd12e

Browse files
dmealingclaude
andcommitted
refactor(python): migrate all callers to MetaDataLoader class + module shortcuts
Replaces every `from metaobjects.loader.meta_data_loader import load_directory` import with the new public API (typically `from metaobjects import MetaDataLoader` + `MetaDataLoader.from_directory(...)`), completing the loader-unification cutover. Ten call sites updated: - tests/conformance/conformance_adapter.py - tests/codegen/test_runner.py, test_golden.py - tests/unit/test_loader.py, test_loader_bom.py, test_meta_source.py, test_one_primary_source.py, test_field_enum.py, test_relationship_referential_actions.py, test_common_attrs.py Full python suite now passes (442 tests), matching the pre-task baseline plus 25 new tests for the source/loader/shortcut layer. The single pre-existing `doc-common-attrs-on-all-types` conformance failure is unchanged (it is a metadata gap, not a loader regression — tracked elsewhere as a known issue). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 5e4621d commit 26dd12e

10 files changed

Lines changed: 23 additions & 23 deletions

server/python/tests/codegen/test_golden.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import importlib.util
22
from pathlib import Path
33

4-
from metaobjects.loader.meta_data_loader import load_directory
4+
from metaobjects import MetaDataLoader
55
from metaobjects.codegen.config import GenConfig
66
from metaobjects.codegen.runner import run_gen
77
from metaobjects.codegen.generators.entity_model import entity_model
@@ -17,7 +17,7 @@ def _generate(case_dir: Path, out: Path) -> Path:
1717
meta_dir = out / "meta"
1818
meta_dir.mkdir(parents=True)
1919
(meta_dir / "meta.json").write_text((case_dir / "meta.json").read_text())
20-
root = load_directory(str(meta_dir)).root
20+
root = MetaDataLoader.from_directory(meta_dir).root
2121
gen_out = out / "gen"
2222
run_gen(GenConfig(out_dir=str(gen_out)), root, generators=[entity_model()])
2323
return gen_out

server/python/tests/codegen/test_runner.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import pytest
55

6-
from metaobjects.loader.meta_data_loader import load_directory
6+
from metaobjects import MetaDataLoader
77
from metaobjects.meta.meta_data import MetaData
88
from metaobjects.codegen.config import GenConfig
99
from metaobjects.codegen.runner import run_gen
@@ -13,7 +13,7 @@
1313
def _load(meta_dir: Path, doc: dict[str, object]) -> MetaData:
1414
meta_dir.mkdir(parents=True, exist_ok=True)
1515
(meta_dir / "meta.json").write_text(json.dumps(doc))
16-
return load_directory(str(meta_dir)).root
16+
return MetaDataLoader.from_directory(meta_dir).root
1717

1818

1919
def test_run_gen_writes_a_model_per_entity(tmp_path: Path) -> None:

server/python/tests/conformance/conformance_adapter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33

44
from pathlib import Path
55

6+
from metaobjects import LoadResult, MetaDataLoader
67
from metaobjects.core_types import core_provider
78
from metaobjects.documentation import doc_provider
8-
from metaobjects.loader.meta_data_loader import LoadResult, load_directory
99
from metaobjects.meta.meta_data import MetaData
1010
from metaobjects.serializer_json import canonical_serialize
1111

@@ -14,12 +14,12 @@
1414

1515
def load_fixture(input_dir: Path) -> tuple[list[str], list[str], str]:
1616
"""Return (error_codes, warnings, canonical_serialization)."""
17-
result = load_directory(str(input_dir), providers=_PROVIDERS)
17+
result = MetaDataLoader.from_directory(input_dir, providers=_PROVIDERS)
1818
codes = [e.code.name for e in result.errors]
1919
canonical = canonical_serialize(result.root)
2020
return codes, list(result.warnings), canonical
2121

2222

2323
def load_fixture_result(input_dir: Path) -> LoadResult:
2424
"""Return the full LoadResult (including the root node) for script.json checks."""
25-
return load_directory(str(input_dir), providers=_PROVIDERS)
25+
return MetaDataLoader.from_directory(input_dir, providers=_PROVIDERS)

server/python/tests/unit/test_common_attrs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ def test_doc_provider_registers_common_attrs() -> None:
248248

249249
def test_stringarray_desugar_via_common_attr() -> None:
250250
"""A string scalar for a stringArray common attr is desugared to a single-element list."""
251-
from metaobjects.loader.meta_data_loader import load_directory
251+
from metaobjects import MetaDataLoader
252252
import json
253253
import tempfile
254254
import os
@@ -275,7 +275,7 @@ def test_stringarray_desugar_via_common_attr() -> None:
275275
path = os.path.join(tmpdir, "meta.acme.json")
276276
with open(path, "w") as f:
277277
json.dump(fixture, f)
278-
result = load_directory(tmpdir, providers=[core_provider, doc_provider])
278+
result = MetaDataLoader.from_directory(tmpdir, providers=[core_provider, doc_provider])
279279

280280
assert not result.errors, f"Unexpected errors: {result.errors}"
281281

server/python/tests/unit/test_field_enum.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99

1010
import pytest
1111

12+
from metaobjects import MetaDataLoader
1213
from metaobjects.core_types import core_provider
1314
from metaobjects.errors import ErrorCode
14-
from metaobjects.loader.meta_data_loader import load_directory
1515
from metaobjects.meta.core.attr.attr_constants import ATTR_SUBTYPE_STRINGARRAY
1616
from metaobjects.meta.core.field.field_constants import FIELD_ATTR_VALUES, FIELD_SUBTYPE_ENUM
1717
from metaobjects.meta.core.field.meta_field import MetaField
@@ -34,7 +34,7 @@ def _load(doc: dict) -> tuple[list[str], str]:
3434
with tempfile.TemporaryDirectory() as tmpdir:
3535
path = os.path.join(tmpdir, "meta.test.json")
3636
Path(path).write_text(json.dumps(doc))
37-
result = load_directory(tmpdir, providers=[core_provider])
37+
result = MetaDataLoader.from_directory(tmpdir, providers=[core_provider])
3838
codes = [e.code.name for e in result.errors]
3939
canonical = canonical_serialize(result.root)
4040
return codes, canonical

server/python/tests/unit/test_loader.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import json
22
from pathlib import Path
33

4-
from metaobjects.loader.meta_data_loader import load_directory
4+
from metaobjects import MetaDataLoader
55
from metaobjects.serializer_json import canonical_serialize
66

77

@@ -14,7 +14,7 @@ def test_load_single_entity_dir(tmp_path: Path) -> None:
1414
]}}
1515
]}
1616
}))
17-
result = load_directory(str(tmp_path))
17+
result = MetaDataLoader.from_directory(tmp_path)
1818
assert not result.errors
1919
assert result.root.frozen
2020
out = json.loads(canonical_serialize(result.root))

server/python/tests/unit/test_loader_bom.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import json
55
from pathlib import Path
66

7+
from metaobjects import MetaDataLoader
78
from metaobjects.errors import ErrorCode
8-
from metaobjects.loader.meta_data_loader import load_directory
99

1010

1111
def _minimal_root_json() -> str:
@@ -40,7 +40,7 @@ def test_bom_prefixed_file_does_not_produce_malformed_json_error(tmp_path: Path)
4040
bom_file = tmp_path / "meta.items.json"
4141
bom_file.write_text(bom + _minimal_root_json(), encoding="utf-8")
4242

43-
result = load_directory(str(tmp_path))
43+
result = MetaDataLoader.from_directory(tmp_path)
4444

4545
malformed = [e for e in result.errors if e.code == ErrorCode.ERR_MALFORMED_JSON]
4646
assert not malformed, (
@@ -54,7 +54,7 @@ def test_bom_prefixed_file_parses_entity(tmp_path: Path) -> None:
5454
bom_file = tmp_path / "meta.items.json"
5555
bom_file.write_text(bom + _minimal_root_json(), encoding="utf-8")
5656

57-
result = load_directory(str(tmp_path))
57+
result = MetaDataLoader.from_directory(tmp_path)
5858

5959
assert not result.errors, f"Unexpected errors: {result.errors}"
6060
entity_names = [c.name for c in result.root.children() if c.name]
@@ -66,6 +66,6 @@ def test_file_without_bom_still_loads(tmp_path: Path) -> None:
6666
plain_file = tmp_path / "meta.items.json"
6767
plain_file.write_text(_minimal_root_json(), encoding="utf-8")
6868

69-
result = load_directory(str(tmp_path))
69+
result = MetaDataLoader.from_directory(tmp_path)
7070

7171
assert not result.errors, f"Unexpected errors: {result.errors}"

server/python/tests/unit/test_meta_source.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import tempfile
1111
from pathlib import Path
1212

13+
from metaobjects import MetaDataLoader
1314
from metaobjects.core_types import core_provider
14-
from metaobjects.loader.meta_data_loader import load_directory
1515
from metaobjects.meta.persistence.source.meta_source import MetaSource
1616
from metaobjects.meta.persistence.source.source_constants import (
1717
DEFAULT_SOURCE_KIND,
@@ -173,7 +173,7 @@ def _load(doc: dict) -> tuple[list[str], str]:
173173
with tempfile.TemporaryDirectory() as tmpdir:
174174
path = os.path.join(tmpdir, "meta.test.json")
175175
Path(path).write_text(json.dumps(doc))
176-
result = load_directory(tmpdir, providers=[core_provider])
176+
result = MetaDataLoader.from_directory(tmpdir, providers=[core_provider])
177177
codes = [e.code.name for e in result.errors]
178178
canonical = canonical_serialize(result.root)
179179
return codes, canonical

server/python/tests/unit/test_one_primary_source.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@
1818
import tempfile
1919
from pathlib import Path
2020

21+
from metaobjects import MetaDataLoader
2122
from metaobjects.core_types import core_provider
22-
from metaobjects.loader.meta_data_loader import load_directory
2323

2424

2525
def _load(doc: dict) -> list[str]:
2626
with tempfile.TemporaryDirectory() as tmpdir:
2727
path = os.path.join(tmpdir, "meta.test.json")
2828
Path(path).write_text(json.dumps(doc))
29-
result = load_directory(tmpdir, providers=[core_provider])
29+
result = MetaDataLoader.from_directory(tmpdir, providers=[core_provider])
3030
return [e.code.name for e in result.errors]
3131

3232

server/python/tests/unit/test_relationship_referential_actions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
import tempfile
2020
from pathlib import Path
2121

22+
from metaobjects import MetaDataLoader
2223
from metaobjects.core_types import core_provider
23-
from metaobjects.loader.meta_data_loader import load_directory
2424
from metaobjects.meta.core.relationship.meta_relationship import MetaRelationship
2525
from metaobjects.meta.core.relationship.relationship_constants import (
2626
ON_DELETE_DEFAULT_BY_SUBTYPE,
@@ -92,7 +92,7 @@ def _load(doc: dict) -> list[str]:
9292
with tempfile.TemporaryDirectory() as tmpdir:
9393
path = os.path.join(tmpdir, "meta.test.json")
9494
Path(path).write_text(json.dumps(doc))
95-
result = load_directory(tmpdir, providers=[core_provider])
95+
result = MetaDataLoader.from_directory(tmpdir, providers=[core_provider])
9696
return [e.code.name for e in result.errors]
9797

9898

0 commit comments

Comments
 (0)