GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing github.com — Update `__exit__` parameters in stubs by Avasam · Pull Request #9696 · python/typeshed Conversation
|
|
I'm not sure that replacing proper |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
…/typeshed into __exit__-parameters-stubs
There was an error while loading. Please reload this page.
Should non-star |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I'd say ideally all _E = TypeVar("_E", bound=BaseException) class X: @overload def __exit__(self, __type: None, __value: None, __exc: None) -> None: ... @overload def __exit__(self, __type: type[_E], __value: type[_E], __exc: TracebackType) -> None: ... But since that is unwieldy, we can use the best approximation in a current situation. So I'm actually fine to use |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Ok, I think my last commit satisfies your comment. (now the PR only adds new
Given this isn't a "stopgap", "urgent" or "in the meantime" PR. It's just splitting off a would-be bigger PR about semantically using |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Side note: Changing |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
This PR has a lot of conflicts now. I'd be hesitant to use the overloaded signature @srittau suggests, though it is probably technically correct:
|
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Expected, but not hard to fix :) About the signature, should I leave it a-is, (can be done in a different PR and/or discussed further). At least get someway there? Or full-on change all signatures? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
…__-parameters-stubs
|
My preference would be to generally type def __exit__(self, *args: Unused) -> None: ... And to generally type def __exit__(self, exc_typ: type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None (There will obviously be exceptions to these rules where doing something else makes sense.) I agree with @srittau that using I also agree with @srittau that a truly precise signature for |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
I know you said there could be exceptions. But that sounds like something Flake8-PYI could check for and/or add in its existing |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
…/typeshed into __exit__-parameters-stubs
There was an error while loading. Please reload this page.
Y036 actually used to be stricter, but Jelle persuaded me to relax it slightly in PyCQA/flake8-pyi#209 after we came across a situation in #7625 (comment) where there was a good case for doing something different. Maybe the exceptions that break the rule are rare enough that we could consider reverting that change... idk, I don't really have a strong opinion on exactly how strict flake8-pyi should be on this |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| def __enter__(self) -> Self: ... | ||
| def __exit__(self, exc_type: object, exc_value: object, traceback: object) -> None: ... | ||
| def __exit__( | ||
| self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This used to be typed with objects. Please validate it's still correct.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| def __enter__(self) -> Self: ... | ||
| def __exit__(self, exc_type: object, exc_value: object, traceback: object) -> None: ... | ||
| def __exit__( | ||
| self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This used to be typed with objects. Please validate it's still correct.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| async def __aenter__(self) -> Self: ... | ||
| async def __aexit__(self, exc_type: object, exc: object, tb: object) -> None: ... | ||
| async def __aexit__( | ||
| self, exc_type: type[BaseException] | None, exc: BaseException | None, tb: TracebackType | None |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This used to be typed with objects. Please validate it's still correct.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| def __enter__(self) -> Self: ... | ||
| def __exit__(self, exc_type: object, value: object, traceback: object) -> None: ... | ||
| def __exit__( | ||
| self, exc_type: type[BaseException] | None, value: BaseException | None, traceback: TracebackType | None |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This used to be typed with objects. Please validate it's still correct.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| def xid(self, format_id, gtrid, bqual) -> Xid: ... | ||
| def __enter__(self) -> Self: ... | ||
| def __exit__(self, __type: object, __name: object, __tb: object) -> None: ... | ||
| def __exit__(self, __type: type[BaseException] | None, __name: BaseException | None, __tb: TracebackType | None) -> None: ... |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This used to be typed with objects. Please validate it's still correct.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| def __enter__(self) -> Protocol: ... | ||
| def __exit__(self, __exc_type: object, __exc_val: object, __exc_tb: object) -> None: ... | ||
| def __exit__( | ||
| self, __exc_type: type[BaseException] | None, __exc_val: BaseException | None, __exc_tb: TracebackType | None |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This used to be typed with objects. Please validate it's still correct.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| async def __aenter__(self) -> Self: ... | ||
| async def __aexit__(self, exc_type: object, exc_value: object, traceback: object) -> None: ... | ||
| async def __aexit__( | ||
| self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This used to be typed with objects. Please validate it still makes sense.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| def __enter__(self) -> Self: ... | ||
| def __exit__(self, exc_type: object, exc_value: object, traceback: object) -> None: ... | ||
| def __exit__( | ||
| self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This used to be typed with objects. Please validate it's still correct.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| async def __aenter__(self) -> Pipeline[_StrType]: ... | ||
| async def __aexit__(self, exc_type: object, exc_value: object, traceback: object) -> None: ... | ||
| async def __aexit__( | ||
| self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This used to be typed with objects. Please validate it's still correct.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| async def __aenter__(self) -> Self: ... | ||
| async def __aexit__(self, exc_type: object, exc_value: object, traceback: object) -> None: ... | ||
| async def __aexit__( | ||
| self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This used to be typed with objects. Please validate it's still correct.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| def __enter__(self) -> Self: ... | ||
| def __exit__(self, exc_type: object, exc_value: object, traceback: object) -> None: ... | ||
| def __exit__( | ||
| self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This used to be typed with objects. Please validate it's still correct.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Me neither, just throwing suggestions :) Just in case, I flagged all the 3 parameters definitions that used to all be objects. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
All the places you flagged look fine -- just one suggestion
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Co-authored-by: Alex Waygood <[email protected]>
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
According to mypy_primer, this change has no effect on the checked open source code. 🤖🎉 |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.