in chz/data_model.py [0:0]
def _synthesise_init(fields: Collection[Field], user_globals: dict[str, Any]) -> Callable[..., Any]:
varlocals = {"__chz_MISSING": MISSING, "__chz_builtins": builtins}
# __chz_args is not strictly necessary, but makes for better errors
args = ["self", "*__chz_args"]
body = [
"if __chz_args:",
" raise __chz_builtins.TypeError(f'{self.__class__.__name__}.__init__ only takes keyword arguments')",
"if '__chz_fields__' not in __chz_builtins.type(self).__dict__:",
" raise __chz_builtins.TypeError(f'{self.__class__.__name__} is not decorated with @chz.chz')",
]
for field in fields:
if field.logical_name.startswith("__chz") or field.logical_name == "self":
raise ValueError(f"Field name {field.logical_name!r} is reserved")
_arg, _body = _synthesise_field_init(field, varlocals)
args.append(_arg)
body.append(_body)
# Note it's important we validate before we check all init_property
body.append("self.__chz_validate__()")
body.append("self.__chz_init_property__()")
return _create_fn("__init__", args, body, locals=varlocals, globals=user_globals)