[aiofiles] Fix NamedTemporaryFile name type - #16357
nightcityblade wants to merge 1 commit into
Conversation
|
According to mypy_primer, this change has no effect on the checked open source code. 🤖🎉 |
| @type_check_only | ||
| class _NamedAsyncTextIOWrapper(AsyncTextIOWrapper, Generic[AnyStr]): | ||
| @property | ||
| def name(self) -> AnyStr: ... |
There was a problem hiding this comment.
Considering these all derive from _UnknownAsyncBinaryIO or _UnknownAsyncTextIO, I think a better approach is to make these classes and their sub-classes generic over name.
_NameT = TypeVar("_NameT", bound=FileDescriptorOrPath, default=FileDescriptorOrPath)| loop: AbstractEventLoop | None = None, | ||
| executor: Executor | None = None, | ||
| ) -> AiofilesContextManager[AsyncTextIOWrapper]: ... | ||
| ) -> AiofilesContextManager[_NamedAsyncTextIOWrapper[AnyStr]]: ... |
There was a problem hiding this comment.
I don't think using AnyStr here or in the other branches is correct. For one, if neither suffix or prefix is given, AnyStr is unbound. Also the name attribute of the wrapped temporary file object always seems to to be str. This would require further investigation.
|
Thanks for the review. Agreed that making the existing unknown async I/O hierarchy generic over |
a638ba6 to
5c5d12f
Compare
|
Updated based on the review: the existing async binary/text wrapper hierarchies are now generic over the file name type, and the temporary-file overloads reuse those classes directly. The default type remains FileDescriptorOrPath for calls without suffix/prefix constraints. Local pre-commit, mypy (all supported Python versions), and pyright checks for aiofiles pass. |
Fixes #13551. Replaces #16162 after its branch history was repaired.
Models the path-dependent
nameattribute on wrappers returned byaiofiles.tempfile.NamedTemporaryFile(), preservingbyteswhen bytes path arguments are supplied while retainingstrfor string paths.OpenAI Codex was used to prepare this change.