support chunked upload in async file-like interfaces #3698
+284
−6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR resolves #1620 and implements chunked upload for
anyio.open_file,trio.open_fileandaiofiles.open_filewhen used ascontent=parameter forpostandputrequest. And implements support for multipart file upload for the same libraries. Most of the code for multipart file upload copied from my old stale PR #3339.changes:
_compat.pyfile added to defineTypeIsandaclosingfor the range of supported python versions_types.AsyncReadableFileprotocol was added along withis_async_readable_filetype predicate function to detect and perform type narrowing for trio/asyncio/aiofiles async files_types.FileContentwas extended to include the._types.AsyncReadableFileprotocol_content.AsyncIteratorByteStreamupdated to useasync readmethods for async files instead of looping over lines_content.encode_contentupdated to attach content length header for_types.AsyncReadableFiletype_multipart.FileFieldupdated to include async versions ofrenderandrender_data_multipart.MultipartStreamupdated with async version ofiter_dataand__aiter__method updated to use ittest_chunked_async_file_multipartandtest_chunked_async_file_contenttests are added to test the new functionalityaiofilesandtypes-aiofilesadded in requirements to test aiofiles (can be removed with test if aiofiles support is not desirable)Checklist