Description
It seems inspection is not possible when using StructMeta.
The following error is returned when calling msgspec.structs.fields:
TypeError: Must be called with a struct type or instance
from msgspec import StructMeta, Struct
# Custom metaclass with kw_only_default parameter
class KwOnlyMeta(StructMeta):
_kw_only_default_settings = {}
def __new__(mcls, name, bases, namespace, **kwargs):
# Store and inherit kw_only_default
kw_only_default = kwargs.pop('kw_only_default', None)
if kw_only_default is None:
for base in bases:
if base.__name__ in mcls._kw_only_default_settings:
kw_only_default = mcls._kw_only_default_settings[base.__name__]
break
else:
mcls._kw_only_default_settings[name] = kw_only_default
# Apply kw_only_default if kw_only not specified
if 'kw_only' not in kwargs and kw_only_default is not None:
kwargs['kw_only'] = kw_only_default
return super().__new__(mcls, name, bases, namespace, **kwargs)
# Base model requiring keyword arguments
class BaseModel(metaclass=KwOnlyMeta, kw_only_default=True):
pass
# Child class inherits kw_only=True
class User(BaseModel):
name: str
age: int
msgspec.structs.fields(User)
If you construct the class using msgspec.Struct, this is working fine
Description
It seems inspection is not possible when using
StructMeta.The following error is returned when calling
msgspec.structs.fields:If you construct the class using
msgspec.Struct, this is working fine