-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Update __exit__
parameters in stubs
#9696
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
Conversation
This comment has been minimized.
This comment has been minimized.
I'm not sure that replacing proper |
…/typeshed into __exit__-parameters-stubs
Should non-star |
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 |
This comment has been minimized.
This comment has been minimized.
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 |
Side note: Changing |
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:
|
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? |
…__-parameters-stubs
This comment has been minimized.
This comment has been minimized.
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 |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
I know you said there could be exceptions. But that sounds like something Flake8-PYI could check for and/or add in its existing |
…/typeshed into __exit__-parameters-stubs
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 |
@@ -50,7 +51,9 @@ class DAVClient: | |||
ssl_cert: str | tuple[str, str] | None = ..., | |||
) -> None: ... | |||
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 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.
This used to be typed with objects. Please validate it's still correct.
@@ -43,7 +44,9 @@ class InfluxDBClient(_BaseClient): | |||
profilers: Incomplete | None = ..., | |||
) -> None: ... | |||
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 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.
This used to be typed with objects. Please validate it's still correct.
@@ -37,7 +38,9 @@ class InfluxDBClientAsync(_BaseClient): | |||
profilers: Incomplete | None = ..., | |||
) -> None: ... | |||
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 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.
This used to be typed with objects. Please validate it's still correct.
@@ -57,7 +58,9 @@ class BlockingConnection: | |||
self, parameters: Parameters | Sequence[Parameters] | None = ..., _impl_class: Incomplete | None = ... | |||
) -> None: ... | |||
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 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.
This used to be typed with objects. Please validate it's still correct.
@@ -462,7 +462,7 @@ class connection: | |||
def tpc_rollback(self, __xid: str | bytes | Xid = ...) -> None: ... | |||
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 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.
This used to be typed with objects. Please validate it's still correct.
@@ -42,4 +43,6 @@ class ReaderThread(threading.Thread): | |||
def close(self) -> None: ... | |||
def connect(self) -> tuple[Self, Protocol]: ... | |||
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 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.
This used to be typed with objects. Please validate it's still correct.
@@ -76,7 +77,9 @@ class RedisCluster(AbstractRedis, AbstractRedisCluster, Generic[_StrType]): # T | |||
async def initialize(self) -> Self: ... | |||
async def close(self) -> None: ... | |||
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 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.
This used to be typed with objects. Please validate it still makes sense.
@@ -200,7 +201,9 @@ class tqdm(Generic[_T], Iterable[_T], Comparable): | |||
def __reversed__(self) -> Iterator[_T]: ... | |||
def __contains__(self, item: object) -> bool: ... | |||
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 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.
This used to be typed with objects. Please validate it's still correct.
@@ -9,4 +10,6 @@ class pipeline(Generic[_StrType]): | |||
p: Pipeline[_StrType] | |||
def __init__(self, redis_obj: Redis[_StrType]) -> None: ... | |||
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 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.
This used to be typed with objects. Please validate it's still correct.
@@ -146,10 +149,14 @@ class ClusterPipeline(AbstractRedis, AbstractRedisCluster, Generic[_StrType]): | |||
def __init__(self, client: RedisCluster[_StrType]) -> None: ... | |||
async def initialize(self) -> Self: ... | |||
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 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.
This used to be typed with objects. Please validate it's still correct.
def __await__(self) -> Awaitable[Self]: ... | ||
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 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.
This used to be typed with objects. Please validate it's still correct.
Me neither, just throwing suggestions :) Just in case, I flagged all the 3 parameters definitions that used to all be objects. |
This comment has been minimized.
This comment has been minimized.
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.
All the places you flagged look fine -- just one suggestion
Co-authored-by: Alex Waygood <[email protected]>
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.
Thanks!
According to mypy_primer, this change has no effect on the checked open source code. 🤖🎉 |
Follow-up to #9519 for third-party stubs now that a new version of mypy has been released
Ref #9297
I could not validate
psycopg2
,hdbcli
and_cffi_backend
so I left those as-is