Codegen: allow annotations to replace bases and drop fields

This commit is contained in:
Paolo Tranquilli
2024-10-10 14:33:06 +02:00
parent b18f8d3935
commit c364fd7e56
2 changed files with 67 additions and 7 deletions

View File

@@ -884,6 +884,56 @@ def test_annotate_not_underscore():
"""
def test_annotate_replace_bases():
@load
class data:
class Root:
pass
class A(Root):
pass
class B(Root):
pass
class C(B):
pass
class Derived(A, B):
pass
@defs.annotate(Derived, replace_bases={B: C})
class _:
pass
assert data.classes == {
"Root": schema.Class("Root", derived={"A", "B"}),
"A": schema.Class("A", bases=["Root"], derived={"Derived"}),
"B": schema.Class("B", bases=["Root"], derived={"C"}),
"C": schema.Class("C", bases=["B"], derived={"Derived"}),
"Derived": schema.Class("Derived", bases=["A", "C"]),
}
def test_annotate_drop_field():
@load
class data:
class Root:
x: defs.int
y: defs.string
z: defs.boolean
@defs.annotate(Root)
class _:
y: defs.drop
assert data.classes == {
"Root": schema.Class("Root", properties=[
schema.SingleProperty("x", "int"),
schema.SingleProperty("z", "boolean"),
]),
}
def test_test_with_unknown_string():
with pytest.raises(schema.Error):
@load