Skip to content

Commit

Permalink
Merge pull request #17524 from github/revert-17514-redsun82/codegen-i…
Browse files Browse the repository at this point in the history
…nclude

Revert "Codegen: allow to include `.py` files in `schema.py`"
  • Loading branch information
aibaars authored Sep 19, 2024
2 parents a065434 + 97cca76 commit cf5d56a
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 58 deletions.
13 changes: 3 additions & 10 deletions misc/codegen/lib/schemadefs.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,9 @@ def modify(self, prop: _schema.Property):


def include(source: str):
scope = _inspect.currentframe().f_back.f_locals
if source.endswith(".dbscheme"):
# add to `includes` variable in calling context
scope.setdefault("__includes", []).append(source)
elif source.endswith(".py"):
# just load the contents
with open(source) as input:
exec(input.read(), scope)
else:
raise _schema.Error(f"Unsupported file for inclusion: {source}")
# add to `includes` variable in calling context
_inspect.currentframe().f_back.f_locals.setdefault(
"__includes", []).append(source)


class _Namespace:
Expand Down
2 changes: 1 addition & 1 deletion misc/codegen/loaders/schemaloader.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def _check_test_with(classes: typing.Dict[str, schema.Class]):


def load(m: types.ModuleType) -> schema.Schema:
includes = []
includes = set()
classes = {}
known = {"int", "string", "boolean"}
known.update(n for n in m.__dict__ if not n.startswith("__"))
Expand Down
48 changes: 1 addition & 47 deletions misc/codegen/test/test_schemaloader.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class data:
pass

assert data.classes == {}
assert data.includes == []
assert data.includes == set()
assert data.null is None
assert data.null_class is None

Expand Down Expand Up @@ -838,51 +838,5 @@ class C(Root):
pass


def test_include_dbscheme():
@load
class data:
defs.include("foo.dbscheme")
defs.include("bar.dbscheme")

assert data.includes == ["foo.dbscheme", "bar.dbscheme"]


def test_include_source(tmp_path):
(tmp_path / "foo.py").write_text("""
class A(Root):
pass
""")
(tmp_path / "bar.py").write_text("""
class C(Root):
pass
""")

@load
class data:
class Root:
pass

defs.include(str(tmp_path / "foo.py"))

class B(Root):
pass

defs.include(str(tmp_path / "bar.py"))

assert data.classes == {
"Root": schema.Class("Root", derived=set("ABC")),
"A": schema.Class("A", bases=["Root"]),
"B": schema.Class("B", bases=["Root"]),
"C": schema.Class("C", bases=["Root"]),
}


def test_include_not_supported(tmp_path):
with pytest.raises(schema.Error):
@load
class data:
defs.include("foo.bar")


if __name__ == '__main__':
sys.exit(pytest.main([__file__] + sys.argv[1:]))

0 comments on commit cf5d56a

Please sign in to comment.