[Storage] Download stream refactor#7848
Conversation
|
Can one of the admins verify this patch? |
|
Would be great if you can update History.md :) |
|
@rakshith91 - Done. |
| self.download_size = min(self.file_size, self.length - self.offset + 1) | ||
| elif self.offset is not None: | ||
| self.download_size = self.file_size - self.offset | ||
| self._file_size = parse_length_from_content_range(response.properties.content_range) |
There was a problem hiding this comment.
I have a question about file_size. If we uploaded a 30 bytes file with client side encryption, then the encrypted file is 32 bytes. When we want to download the file, the parsed self._file_size is 32 I assume, are we intended to keep 32?
There was a problem hiding this comment.
The file size here is purely with regards to the bytes being downloaded, and the values used in the range header. So if the encrypted file is 32, that will be the value we use. If this does not match the decrypted value size, we don't update it... I think that's valid, as the size attribute is to determine the size of the Stream (i.e. what's being downloaded).
… storage-downloads
… storage-downloads
|
/azp run python - storage - ci |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
It looks great 😀 |
|
/azp run python - storage - ci |
|
Azure Pipelines successfully started running 1 pipeline(s). |
* Fix SubStream to respect IOBase protocol (#7843) * removes NoRetry policy (#7845) * [storage] Makes signed_identifiers a required param (#7844) * makes signed_identifiers a required param * fix tests and update history * removes unecessary check * fix files and queues tests * [storage] Changes `file_permission_key` param to `permission_key` (#7841) * changes file_permission_key param to permission_key * update history * Change the param directive to keyword in docstrings (#7855) * Change the directive to keyword in docstrings * pylint :( * [storage] Adds from_string to models (#7870) * adds from_string to models * fixes to naming and history * remove _str in docstrings * pylint * [storage-file] await async poller (#7872) * await files async poller * fix docstrings * fix type hints * [File and Queue] Client constructors (#7853) * from_queue_url * file client constructors * update CHANGELOG * fix test * lint fix * some doc changes * queue docs * blob docs * [storage-queue] rename queue messages (#7895) * rename queue messages * update history * [Storage-Queue][Storage-File] Kwargify positional params (#7877) * Queue kwargification * kwargify Files * small fix * minor fix * comments + lint * some changes * pylint * [storage-file, queue] moves param protocol to kwargs in gen_shared_access_signature() (#7897) * moves protocol in gen_sas to kwargs * delete whitespace * [storage] Unexposes models from aio (#7881) * unexposes models from aio * unexpose all except clients and pylint fixes * update history * unexpose sync paged models * update history phrasing * [Storage-queue] Allow None message encode policy (#7898) * Don't expose NoEncode policies * Support None value for encode/decode policies * Updated tests * Updated sync encryption tests * Updated async encryption tests * Updated async encoding tests * Fixed test * Fix test * Updated release notes * Rename enqueue_message to send_messgae (#7928) * [storage-blob, queue] Renames Logging to <ServiceName>AnalyticsLogging (#7921) * renames logging to ServiceAnalyticsLogging * changes param logging to analytics_logging * fixes tests due to param name change * [Blob][File][Encryption]Fix Download Encrypted Blob/File Bug (#7965) #7957 * Consolidate offset - length behavior in files (#7942) * Initital Commit * length changes * some test changes * some more changes * history.md * Update a couple of recrodings * comments address * ops * Stop modifying internal_response body (#7958) * Stop modifying internal body * Replicate for queues and files too * [Storage] Relocated SAS generation (#7955) * Expose account name on clients * Updated blob sas gen * Updated file sas gen * Update queue sas gen * Updated docstrings * Some pylint fixes * More pylint * More pylint * Reverted auth change * Added release notes * Fixed kwarg docstring * [Storage] Updated close handles (#7940) * Updated close handles * Pylint fixes * Fix tests * Review feedback * Missing recursive parameter * Added release notes * [Storage] Conditional etag parameters (#8047) * Updated clients * Process conditional headers * Updated tests * Fixed test * Updated error scenarios * Updated release notes * Revert skipped tests * [Storage] Download stream refactor (#7848) * Refactored download stream API * Unskip tests * Test warnings * Missing await * Fixed append tests * Fixed page tests * Pylint * Py2.7 iter support * Refactor downloaders * Added missing async module functions * Updated release notes * Keyword params * Documented more keyword options * Added module functions to exports * Fixed merge * Fix for Files download stream * Pylint fix * Updated File stream downloads * Fix tests * Updated error message * Added Files release notes * Pylint fix * Download stream error handling * Fixed some tests * Design Pipeline ownership (#7981) * Initital Commit * Pipeline Ownership * slight modifications * pipeline ownership for queues and files * fixes tests, adds docstrings to wrapper classes * pylint * Batching APIs Raise on Any Failure (#7963) * Raise on Single Failure * some changes * lint * some changes * oops * comments + lint * some optimization * history * comments * lint * recording * Plug HttpLoggingPolicy to Storage (#8081) * Plug HttpLoggingPolicy to Storage * Update dependencies * Skip depends job for Storage * Fix shared req * [storage] make storage files _internal (#7949) * blobs internal * files internal * queues internal * some fixes to docstrings * update history.md * fix async test import * some file mypy fixes * some queue mypy fixes * some blob mypy fixes * fix mistake in type annot * history edits * Merge fix * Revert "Merge fix" This reverts commit 748fbd6. * Better merge fix * fix some tests (#8100) * Fix tests (#8103) * minor fix special char * fix auth * comments * [Storage] Bumped version + Pipeline fix (#8089) * Bumped version * Docs tweak * Re-bumped version * Added 3.8 classifier * Added proxy policy to pipeline * Synced base clients * Added batch exception * Comment the echo check to workaround batch headers issue (#8118) * Fix 8091: expose generated enum to customers (#8117) * Fix #8091 * Add one in file
* Fix SubStream to respect IOBase protocol (#7843) * removes NoRetry policy (#7845) * [storage] Makes signed_identifiers a required param (#7844) * makes signed_identifiers a required param * fix tests and update history * removes unecessary check * fix files and queues tests * [storage] Changes `file_permission_key` param to `permission_key` (#7841) * changes file_permission_key param to permission_key * update history * Change the param directive to keyword in docstrings (#7855) * Change the directive to keyword in docstrings * pylint :( * [storage] Adds from_string to models (#7870) * adds from_string to models * fixes to naming and history * remove _str in docstrings * pylint * [storage-file] await async poller (#7872) * await files async poller * fix docstrings * fix type hints * [File and Queue] Client constructors (#7853) * from_queue_url * file client constructors * update CHANGELOG * fix test * lint fix * some doc changes * queue docs * blob docs * [storage-queue] rename queue messages (#7895) * rename queue messages * update history * [Storage-Queue][Storage-File] Kwargify positional params (#7877) * Queue kwargification * kwargify Files * small fix * minor fix * comments + lint * some changes * pylint * [storage-file, queue] moves param protocol to kwargs in gen_shared_access_signature() (#7897) * moves protocol in gen_sas to kwargs * delete whitespace * [storage] Unexposes models from aio (#7881) * unexposes models from aio * unexpose all except clients and pylint fixes * update history * unexpose sync paged models * update history phrasing * [Storage-queue] Allow None message encode policy (#7898) * Don't expose NoEncode policies * Support None value for encode/decode policies * Updated tests * Updated sync encryption tests * Updated async encryption tests * Updated async encoding tests * Fixed test * Fix test * Updated release notes * Rename enqueue_message to send_messgae (#7928) * [storage-blob, queue] Renames Logging to <ServiceName>AnalyticsLogging (#7921) * renames logging to ServiceAnalyticsLogging * changes param logging to analytics_logging * fixes tests due to param name change * [Blob][File][Encryption]Fix Download Encrypted Blob/File Bug (#7965) #7957 * Consolidate offset - length behavior in files (#7942) * Initital Commit * length changes * some test changes * some more changes * history.md * Update a couple of recrodings * comments address * ops * Stop modifying internal_response body (#7958) * Stop modifying internal body * Replicate for queues and files too * [Storage] Relocated SAS generation (#7955) * Expose account name on clients * Updated blob sas gen * Updated file sas gen * Update queue sas gen * Updated docstrings * Some pylint fixes * More pylint * More pylint * Reverted auth change * Added release notes * Fixed kwarg docstring * [Storage] Updated close handles (#7940) * Updated close handles * Pylint fixes * Fix tests * Review feedback * Missing recursive parameter * Added release notes * [Storage] Conditional etag parameters (#8047) * Updated clients * Process conditional headers * Updated tests * Fixed test * Updated error scenarios * Updated release notes * Revert skipped tests * [Storage] Download stream refactor (#7848) * Refactored download stream API * Unskip tests * Test warnings * Missing await * Fixed append tests * Fixed page tests * Pylint * Py2.7 iter support * Refactor downloaders * Added missing async module functions * Updated release notes * Keyword params * Documented more keyword options * Added module functions to exports * Fixed merge * Fix for Files download stream * Pylint fix * Updated File stream downloads * Fix tests * Updated error message * Added Files release notes * Pylint fix * Download stream error handling * Fixed some tests * Design Pipeline ownership (#7981) * Initital Commit * Pipeline Ownership * slight modifications * pipeline ownership for queues and files * fixes tests, adds docstrings to wrapper classes * pylint * Batching APIs Raise on Any Failure (#7963) * Raise on Single Failure * some changes * lint * some changes * oops * comments + lint * some optimization * history * comments * lint * recording * Plug HttpLoggingPolicy to Storage (#8081) * Plug HttpLoggingPolicy to Storage * Update dependencies * Skip depends job for Storage * Fix shared req * [storage] make storage files _internal (#7949) * blobs internal * files internal * queues internal * some fixes to docstrings * update history.md * fix async test import * some file mypy fixes * some queue mypy fixes * some blob mypy fixes * fix mistake in type annot * history edits * Merge fix * Revert "Merge fix" This reverts commit 748fbd6. * Better merge fix * fix some tests (#8100) * Fix tests (#8103) * minor fix special char * fix auth * comments * [Storage] Bumped version + Pipeline fix (#8089) * Bumped version * Docs tweak * Re-bumped version * Added 3.8 classifier * Added proxy policy to pipeline * Synced base clients * Added batch exception * Comment the echo check to workaround batch headers issue (#8118) * Fix 8091: expose generated enum to customers (#8117) * Fix #8091 * Add one in file
Refactored the StorageStreamDownloader objects to:
chunks()function ([StorageStreamDownloader] [Breaking Change] Replace iterable behavior with the chunk #7731).readall()andreadinto(stream)functions to start implementing stream interface (Storage Stream Downloader #7504).content_as_bytes(),content_as_text(),download_to_stream().