@@ -99,7 +99,10 @@ def rebuild_with_none_defaults(
9999 namespace = {}
100100 for key , value in cls .__dict__ .items ():
101101 if key .startswith ('__' ) and key .endswith ('__' ):
102- continue # Skip dunders (make_dataclass will generate them)
102+ # Skip most dunders (make_dataclass will generate them)
103+ # BUT preserve __registry_key__ for AutoRegisterMeta
104+ if key != '__registry_key__' :
105+ continue
103106 if key == '__dataclass_fields__' :
104107 continue # Will be regenerated
105108 namespace [key ] = value
@@ -114,6 +117,9 @@ def rebuild_with_none_defaults(
114117 for b in cls .__mro__ [1 :]
115118 )
116119
120+ # Get the original metaclass to preserve it
121+ orig_metaclass = type (cls )
122+
117123 # Create new class
118124 new_cls = make_dataclass (
119125 new_name or cls .__name__ ,
@@ -128,6 +134,18 @@ def rebuild_with_none_defaults(
128134 if new_name is None :
129135 new_cls .__qualname__ = cls .__qualname__
130136
137+ # Preserve original metaclass if it's not just type
138+ # This is critical for AutoRegisterMeta and other custom metaclasses
139+ if orig_metaclass is not type :
140+ # Re-create the class with the original metaclass
141+ # We need to do this because make_dataclass doesn't accept metaclass parameter
142+ # But we must NOT re-apply @dataclass since make_dataclass already did that
143+ new_cls = orig_metaclass (
144+ new_cls .__name__ ,
145+ new_cls .__bases__ ,
146+ dict (new_cls .__dict__ ),
147+ )
148+
131149 return new_cls
132150
133151
0 commit comments