Skip to content

Commit

Permalink
🐛 Prevent invalid annotations caused by list shadowing by method si…
Browse files Browse the repository at this point in the history
…gnature (without autogen).
  • Loading branch information
sterliakov committed Jan 24, 2025
1 parent c7154c6 commit 36fa243
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions codegen/parser/schemas/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -357,38 +357,46 @@ class ListSchema(SchemaData):

@override
def get_type_string(self, include_constraints: bool = True) -> str:
type_string = f"list[{self.item_schema.get_type_string()}]"
type_string = f"builtins.list[{self.item_schema.get_type_string()}]"
if include_constraints and (args := self._get_field_args()):
return f"Annotated[{type_string}, {self._get_field_string(args)}]"
return type_string

@override
def get_param_type_string(self) -> str:
return f"list[{self.item_schema.get_param_type_string()}]"
# We **must** refer to `builtins.list` here explicitly to avoid shadowing:
# class A:
# def list(self): ...
# def meth(self) -> list[int]: ... # Oops, it's the `list` method, bad hint
return f"builtins.list[{self.item_schema.get_param_type_string()}]"

@override
def get_model_imports(self) -> set[str]:
imports = super().get_model_imports()
imports.add("from githubkit.compat import PYDANTIC_V2")
imports.add("import builtins")
imports.update(self.item_schema.get_model_imports())
return imports

@override
def get_type_imports(self) -> set[str]:
imports = super().get_type_imports()
imports.add("import builtins")
imports.update(self.item_schema.get_type_imports())
return imports

@override
def get_param_imports(self) -> set[str]:
imports = super().get_param_imports()
imports.add("import builtins")
imports.update(self.item_schema.get_param_imports())
return imports

@override
def get_using_imports(self) -> set[str]:
imports = super().get_using_imports()
imports.add("from githubkit.compat import PYDANTIC_V2")
imports.add("import builtins")
imports.update(self.item_schema.get_using_imports())
return imports

Expand Down

0 comments on commit 36fa243

Please sign in to comment.