-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support type stub generation for staticmethod
#14934
Support type stub generation for staticmethod
#14934
Conversation
Hi @sobolevn and @AlexWaygood, I updated this PR to work with the latest changes on master. Could you please review the current changes and merge the PR if everything is fine? |
Hey @sobolevn and @AlexWaygood, what is the status of this pull request? I would really like to see it merged into MyPy. Do you need anything from my side to proceed? |
Looking forward to this getting merged as well +1 |
Hi @sobolevn and @AlexWaygood, please give me an update on this PR. Is there a reason why it has not been merged? As far as I can see, I can not merge it myself since I don't have the necessary permissions. |
I can't merge this PR, because I don't fully understand the C++ code, but I think that @JukkaL or @msullivan can help us :) |
I can't merge this PR because I'm not a maintainer |
Thanks for the info :) I was under the impression that you could merge, since you were reviewing my changes. |
In the meantime you can resolve conflicts :) |
19f3832
to
a634dee
Compare
for more information, see https://pre-commit.ci
…l/mypy into support_staticmethod
Hi everyone, I integrated my changes into the new master branch and from my perspective it is ready for merging. I noticed, though, that the mypyc runtime tests with py39-macos seem to be unstable. Since I did not find a way to rerun tests for a commit, I added two empty dummy commits to get the pipeline to succeed. See #16420. |
You can ignore the mypyc runtime test failures, since it's a known issue happening on master. |
mypy/stubgenc.py
Outdated
return False | ||
elif self.is_c_module: | ||
raw_lookup = getattr(class_info.cls, "__dict__") # noqa: B009 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why has this been # noqa
'd? Wouldn't it be cleaner to do this, as the linter suggests?
raw_lookup = getattr(class_info.cls, "__dict__") # noqa: B009 | |
raw_lookup = class_info.cls.__dict__ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To be honest, I wrote it that way because there are two other places in stubgenc.py
where this pattern was used:
Lines 453 to 455 in 8121e3c
def get_members(self, obj: object) -> list[tuple[str, Any]]: obj_dict: Mapping[str, Any] = getattr(obj, "__dict__") # noqa: B009 results = [] Lines 718 to 725 in 8121e3c
def generate_class_stub(self, class_name: str, cls: type, output: list[str]) -> None: """Generate stub for a single class using runtime introspection. The result lines will be appended to 'output'. If necessary, any required names will be added to 'imports'. """ raw_lookup = getattr(cls, "__dict__") # noqa: B009 items = self.get_members(cls)
I will check the file history to see if I can find a specific reason whygetattr
is used.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The getattr
call originally comes from commit 6bcaf40 and was added to make typeshed happy:
Lines 140 to 142 in 6bcaf40
# typeshed gives obj.__dict__ the not quite correct type Dict[str, Any] | |
# (it could be a mappingproxy!), which makes mypyc mad, so obfuscate it. | |
obj_dict = getattr(obj, '__dict__') # type: Mapping[str, Any] |
The # noqa
was added in 4287af4:
Line 246 in 4287af4
obj_dict = getattr(obj, '__dict__') # type: Mapping[str, Any] # noqa |
Hi @JukkaL and @msullivan, I resolved conflicts with the current master branch. Can this PR be merged? |
Happy new year everyone! 🥳 |
I can merge this PR if somebody who has more context on the relevant code than I have gives a quick thumbs up. |
Or somebody who has any familiarity with the code :-) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not that familiar with stubgen, but this mostly looks good to me. I had one question
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you! :-)
Fixes #13574
This PR fixes the generation of type hints for static methods of pybind11 classes. The code changes are based on the suggestions in #13574.
The fix introduces an additional check if the property under inspection is of type
staticmethod
. If it is, the type information is read from the staticmethod's__func__
attribute, instead of the staticmethod instance itself.I added a test for C++ classes with static methods bound using pybind11. Both, an overloaded and a non-overloaded static method are tested.