@@ -40,17 +40,18 @@ def _get_class(cls: type) -> schema.Class:
40
40
if len ({g for g in (getattr (b , f"{ schema .inheritable_pragma_prefix } group" , None )
41
41
for b in cls .__bases__ ) if g }) > 1 :
42
42
raise schema .Error (f"Bases with mixed groups for { cls .__name__ } " )
43
- if any (getattr (b , "_null" , False ) for b in cls .__bases__ ):
44
- raise schema .Error (f"Null class cannot be derived" )
45
43
pragmas = {
46
44
# dir and getattr inherit from bases
47
45
a [len (schema .inheritable_pragma_prefix ):]: getattr (cls , a )
48
46
for a in dir (cls ) if a .startswith (schema .inheritable_pragma_prefix )
49
47
}
50
48
pragmas |= cls .__dict__ .get ("_pragmas" , {})
49
+ derived = {d .__name__ for d in cls .__subclasses__ ()}
50
+ if "null" in pragmas and derived :
51
+ raise schema .Error (f"Null class cannot be derived" )
51
52
return schema .Class (name = cls .__name__ ,
52
53
bases = [b .__name__ for b in cls .__bases__ if b is not object ],
53
- derived = { d . __name__ for d in cls . __subclasses__ ()} ,
54
+ derived = derived ,
54
55
pragmas = pragmas ,
55
56
# in the following we don't use `getattr` to avoid inheriting
56
57
properties = [
@@ -150,11 +151,11 @@ def load(m: types.ModuleType) -> schema.Schema:
150
151
f"Only one root class allowed, found second root { name } " )
151
152
cls .check_types (known )
152
153
classes [name ] = cls
153
- if getattr (data , "_null" , False ):
154
+ if "null" in cls .pragmas :
155
+ del cls .pragmas ["null" ]
154
156
if null is not None :
155
157
raise schema .Error (f"Null class { null } already defined, second null class { name } not allowed" )
156
158
null = name
157
- cls .is_null_class = True
158
159
159
160
_fill_synth_information (classes )
160
161
_fill_hideable_information (classes )
0 commit comments