Skip to content

Commit

Permalink
Add support for mypy 1.0.1
Browse files Browse the repository at this point in the history
  • Loading branch information
Viicos committed Jan 13, 2024
1 parent 5176b39 commit 8d216c6
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions pydantic/mypy.py
Expand Up @@ -475,7 +475,7 @@ def transform(self) -> bool:
return False

is_settings = any(base.fullname == BASESETTINGS_FULLNAME for base in info.mro[:-1])
self.add_initializer(fields, config, is_settings)
self.add_initializer(fields, config, is_settings, is_root_model)
self.add_model_construct_method(fields, config, is_settings)
try:
self.set_frozen(fields, frozen=config.frozen is True)
Expand Down Expand Up @@ -839,7 +839,9 @@ def _infer_dataclass_attr_init_type(self, sym: SymbolTableNode, name: str, conte

return default

def add_initializer(self, fields: list[PydanticModelField], config: ModelConfigData, is_settings: bool) -> None:
def add_initializer(
self, fields: list[PydanticModelField], config: ModelConfigData, is_settings: bool, is_root_model: bool
) -> None:
"""Adds a fields-aware `__init__` method to the class.
The added `__init__` will be annotated with types vs. all `Any` depending on the plugin settings.
Expand All @@ -859,6 +861,11 @@ def add_initializer(self, fields: list[PydanticModelField], config: ModelConfigD
is_settings=is_settings,
)

if is_root_model and MYPY_VERSION_TUPLE <= (1, 0, 1):
# convert root argument to positional argument
# This is needed because mypy support for `dataclass_transform` isn't complete on 1.0.1
args[0].kind = ARG_POS if args[0].kind == ARG_NAMED else ARG_OPT

if is_settings:
base_settings_node = self._api.lookup_fully_qualified(BASESETTINGS_FULLNAME).node
if '__init__' in base_settings_node.names:
Expand Down

0 comments on commit 8d216c6

Please sign in to comment.