Hello community, here is the log from the commit of package python-azure-storage-blob for openSUSE:Factory checked in at 2019-05-14 13:38:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-azure-storage-blob (Old) and /work/SRC/openSUSE:Factory/.python-azure-storage-blob.new.5148 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-azure-storage-blob" Tue May 14 13:38:48 2019 rev:2 rq:694556 version:1.5.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-azure-storage-blob/python-azure-storage-blob.changes 2018-10-15 10:46:19.143205646 +0200 +++ /work/SRC/openSUSE:Factory/.python-azure-storage-blob.new.5148/python-azure-storage-blob.changes 2019-05-14 13:38:51.360475407 +0200 @@ -1,0 +2,19 @@ +Mon Apr 15 09:56:03 UTC 2019 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- New upstream release + + Version 1.5.0 + + For detailed information about changes see the + HISTORY.txt file provided with this package +- Bump minimum version for namespace packages + to 3.0.0 in BuildRequires and Requires +- Remove python-devel package from BuildRequires +- Remove unzip package from BuildRequires +- Refresh patches for new version + + asb_drop-compatible-releases-operator.patch + + asb_drop-extras-require.patch +- Run fdupes to hardlink duplicate files + + Add fdupes to BuildRequires + + Add %fdupes invocation to %install +- Update BuildRequires and Requires from setup.py + +------------------------------------------------------------------- Old: ---- azure-storage-blob-1.3.1.tar.gz New: ---- azure-storage-blob-1.5.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-azure-storage-blob.spec ++++++ --- /var/tmp/diff_new_pack.Q9X51N/_old 2019-05-14 13:38:51.796476386 +0200 +++ /var/tmp/diff_new_pack.Q9X51N/_new 2019-05-14 13:38:51.800476395 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-azure-storage-blob # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,12 +12,13 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # + %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-azure-storage-blob -Version: 1.3.1 +Version: 1.5.0 Release: 0 Summary: Microsoft Azure Storage Blob Client Library for Python License: MIT @@ -27,17 +28,16 @@ Source1: LICENSE.txt Patch1: asb_drop-compatible-releases-operator.patch Patch2: asb_drop-extras-require.patch -BuildRequires: %{python_module devel} +BuildRequires: %{python_module azure-nspkg >= 3.0.0} +BuildRequires: %{python_module azure-storage-nspkg >= 3.0.0} BuildRequires: %{python_module setuptools} +BuildRequires: fdupes BuildRequires: python-rpm-macros -BuildRequires: unzip -BuildRequires: %{python_module azure-storage-nspkg} -BuildRequires: %{python_module azure-nspkg} -Requires: python-azure-storage-nspkg -Requires: python-azure-nspkg Requires: python-azure-common >= 1.1.5 -Requires: python-azure-storage-common >= 1.3 +Requires: python-azure-nspkg >= 3.0.0 Requires: python-azure-storage-common < 2.0.0 +Requires: python-azure-storage-common >= 1.4 +Requires: python-azure-storage-nspkg >= 3.0.0 %if "%{python_flavor}" == "python2" Requires: python-futures %endif @@ -65,6 +65,7 @@ %install %python_install +%python_expand %fdupes %{buildroot}%{$python_sitelib} %{python_expand # delete common files rm -rf %{buildroot}%{$python_sitelib}/azure/storage/__init__.* rm -rf %{buildroot}%{$python_sitelib}/azure/storage/__pycache__ @@ -78,4 +79,5 @@ %license LICENSE.txt %{python_sitelib}/azure/storage/blob %{python_sitelib}/azure_storage_blob-*.egg-info + %changelog ++++++ asb_drop-compatible-releases-operator.patch ++++++ --- /var/tmp/diff_new_pack.Q9X51N/_old 2019-05-14 13:38:51.820476440 +0200 +++ /var/tmp/diff_new_pack.Q9X51N/_new 2019-05-14 13:38:51.824476449 +0200 @@ -1,12 +1,12 @@ -diff -Nru azure-storage-blob-1.3.1.orig/setup.py azure-storage-blob-1.3.1/setup.py ---- azure-storage-blob-1.3.1.orig/setup.py 2018-07-17 00:26:12.000000000 +0200 -+++ azure-storage-blob-1.3.1/setup.py 2018-10-04 14:20:14.401890261 +0200 -@@ -74,7 +74,7 @@ - packages=find_packages(), +diff -Nru azure-storage-blob-1.5.0.orig/setup.py azure-storage-blob-1.5.0/setup.py +--- azure-storage-blob-1.5.0.orig/setup.py 2019-02-16 00:11:37.000000000 +0100 ++++ azure-storage-blob-1.5.0/setup.py 2019-04-02 12:16:35.116776872 +0200 +@@ -72,7 +72,7 @@ + ]), install_requires=[ - 'azure-common>=1.1.5', -- 'azure-storage-common~=1.3' -+ 'azure-storage-common>=1.3' - ], + 'azure-common>=1.1.5', +- 'azure-storage-common~=1.4' ++ 'azure-storage-common>=1.4' + ], extras_require={ ":python_version<'3.0'": ['futures'], ++++++ asb_drop-extras-require.patch ++++++ --- /var/tmp/diff_new_pack.Q9X51N/_old 2019-05-14 13:38:51.828476458 +0200 +++ /var/tmp/diff_new_pack.Q9X51N/_new 2019-05-14 13:38:51.828476458 +0200 @@ -1,12 +1,11 @@ -diff -Nru azure-storage-blob-1.3.1.orig/setup.py azure-storage-blob-1.3.1/setup.py ---- azure-storage-blob-1.3.1.orig/setup.py 2018-10-04 14:20:14.401890261 +0200 -+++ azure-storage-blob-1.3.1/setup.py 2018-10-04 14:22:15.759789246 +0200 -@@ -76,8 +76,5 @@ - 'azure-common>=1.1.5', - 'azure-storage-common>=1.3' - ], +diff -Nru azure-storage-blob-1.5.0.orig/setup.py azure-storage-blob-1.5.0/setup.py +--- azure-storage-blob-1.5.0.orig/setup.py 2019-04-02 12:19:39.018438103 +0200 ++++ azure-storage-blob-1.5.0/setup.py 2019-04-02 12:19:50.926545674 +0200 +@@ -74,7 +74,4 @@ + 'azure-common>=1.1.5', + 'azure-storage-common>=1.4' + ], - extras_require={ - ":python_version<'3.0'": ['futures'], - }, - cmdclass=cmdclass ) ++++++ azure-storage-blob-1.3.1.tar.gz -> azure-storage-blob-1.5.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/LICENSE.txt new/azure-storage-blob-1.5.0/LICENSE.txt --- old/azure-storage-blob-1.3.1/LICENSE.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/azure-storage-blob-1.5.0/LICENSE.txt 2018-12-18 01:05:25.000000000 +0100 @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/MANIFEST.in new/azure-storage-blob-1.5.0/MANIFEST.in --- old/azure-storage-blob-1.3.1/MANIFEST.in 2017-11-01 22:31:22.000000000 +0100 +++ new/azure-storage-blob-1.5.0/MANIFEST.in 2018-12-18 01:05:25.000000000 +0100 @@ -1,2 +1,4 @@ include *.rst -include azure_bdist_wheel.py +include azure/__init__.py +include azure/storage/__init__.py +include LICENSE.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/PKG-INFO new/azure-storage-blob-1.5.0/PKG-INFO --- old/azure-storage-blob-1.3.1/PKG-INFO 2018-07-17 00:29:36.000000000 +0200 +++ new/azure-storage-blob-1.5.0/PKG-INFO 2019-02-16 00:21:24.000000000 +0100 @@ -1,18 +1,22 @@ Metadata-Version: 1.1 Name: azure-storage-blob -Version: 1.3.1 +Version: 1.5.0 Summary: Microsoft Azure Storage Blob Client Library for Python Home-page: https://github.com/Azure/azure-storage-python Author: Microsoft Corporation Author-email: a...@microsoft.com License: MIT License -Description-Content-Type: UNKNOWN Description: Microsoft Azure Storage SDK for Python ====================================== + .. image:: https://travis-ci.org/Azure/azure-storage-python.svg + :target: https://travis-ci.org/Azure/azure-storage-python + .. image:: https://img.shields.io/codecov/c/github/azure/azure-storage-python.svg + :target: https://codecov.io/gh/Azure/azure-storage-python + This project provides a client library in Python that makes it easy to consume Microsoft Azure Storage services. For documentation please see - the Microsoft Azure `Python Developer Center`_ and our `API Reference`_ Page. + the Microsoft Azure `Python Developer Center`_ and our `API Reference`_ (also available on `readthedocs`_). If you are looking for the Service Bus or Azure Management libraries, please visit @@ -38,7 +42,7 @@ pip uninstall azure pip install azure - If you are upgrading from a version older than 0.30.0, see the upgrade doc, the + If you are upgrading from a version older than 0.30.0, see the upgrade doc, the usage samples in the samples directory, and the ChangeLog and BreakingChanges. If you are encountering `problems`_ installing azure storage on Azure Web Apps, @@ -220,7 +224,8 @@ - `API Reference`_ .. _Python Developer Center: http://azure.microsoft.com/en-us/develop/python/ - .. _API Reference: https://azure-storage.readthedocs.io/en/latest/ + .. _API Reference: https://docs.microsoft.com/en-us/python/api/overview/azure/storage/client?view=azure-python + .. _readthedocs: https://azure-storage.readthedocs.io/ .. _here: https://github.com/Azure/azure-storage-python/archive/master.zip .. _create an account: https://account.windowsazure.com/signup .. _Developer Forums on MSDN: http://social.msdn.microsoft.com/Forums/windowsazure/en-US/home?forum=windowsazuredata @@ -233,6 +238,7 @@ .. _problems: https://github.com/Azure/azure-storage-python/issues/219 .. _upgrading pip: https://docs.microsoft.com/en-us/visualstudio/python/managing-python-on-azure-app-service .. _cosmosdb: https://github.com/Azure/azure-cosmosdb-python + Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Programming Language :: Python @@ -243,4 +249,5 @@ Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 Classifier: License :: OSI Approved :: MIT License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/README.rst new/azure-storage-blob-1.5.0/README.rst --- old/azure-storage-blob-1.3.1/README.rst 2018-07-09 07:05:42.000000000 +0200 +++ new/azure-storage-blob-1.5.0/README.rst 2019-02-15 23:59:43.000000000 +0100 @@ -1,9 +1,14 @@ Microsoft Azure Storage SDK for Python ====================================== +.. image:: https://travis-ci.org/Azure/azure-storage-python.svg + :target: https://travis-ci.org/Azure/azure-storage-python +.. image:: https://img.shields.io/codecov/c/github/azure/azure-storage-python.svg + :target: https://codecov.io/gh/Azure/azure-storage-python + This project provides a client library in Python that makes it easy to consume Microsoft Azure Storage services. For documentation please see -the Microsoft Azure `Python Developer Center`_ and our `API Reference`_ Page. +the Microsoft Azure `Python Developer Center`_ and our `API Reference`_ (also available on `readthedocs`_). If you are looking for the Service Bus or Azure Management libraries, please visit @@ -29,7 +34,7 @@ pip uninstall azure pip install azure -If you are upgrading from a version older than 0.30.0, see the upgrade doc, the +If you are upgrading from a version older than 0.30.0, see the upgrade doc, the usage samples in the samples directory, and the ChangeLog and BreakingChanges. If you are encountering `problems`_ installing azure storage on Azure Web Apps, @@ -211,7 +216,8 @@ - `API Reference`_ .. _Python Developer Center: http://azure.microsoft.com/en-us/develop/python/ -.. _API Reference: https://azure-storage.readthedocs.io/en/latest/ +.. _API Reference: https://docs.microsoft.com/en-us/python/api/overview/azure/storage/client?view=azure-python +.. _readthedocs: https://azure-storage.readthedocs.io/ .. _here: https://github.com/Azure/azure-storage-python/archive/master.zip .. _create an account: https://account.windowsazure.com/signup .. _Developer Forums on MSDN: http://social.msdn.microsoft.com/Forums/windowsazure/en-US/home?forum=windowsazuredata @@ -223,4 +229,4 @@ .. _CONTRIBUTING.md doc: CONTRIBUTING.md .. _problems: https://github.com/Azure/azure-storage-python/issues/219 .. _upgrading pip: https://docs.microsoft.com/en-us/visualstudio/python/managing-python-on-azure-app-service -.. _cosmosdb: https://github.com/Azure/azure-cosmosdb-python \ No newline at end of file +.. _cosmosdb: https://github.com/Azure/azure-cosmosdb-python diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/azure/__init__.py new/azure-storage-blob-1.5.0/azure/__init__.py --- old/azure-storage-blob-1.3.1/azure/__init__.py 2018-01-12 09:40:56.000000000 +0100 +++ new/azure-storage-blob-1.5.0/azure/__init__.py 2018-12-11 03:29:57.000000000 +0100 @@ -1 +1 @@ -__import__('pkg_resources').declare_namespace(__name__) +__path__ = __import__('pkgutil').extend_path(__path__, __name__) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/azure/storage/__init__.py new/azure-storage-blob-1.5.0/azure/storage/__init__.py --- old/azure-storage-blob-1.3.1/azure/storage/__init__.py 2018-01-12 09:40:56.000000000 +0100 +++ new/azure-storage-blob-1.5.0/azure/storage/__init__.py 2018-12-11 03:29:57.000000000 +0100 @@ -1 +1 @@ -__import__('pkg_resources').declare_namespace(__name__) +__path__ = __import__('pkgutil').extend_path(__path__, __name__) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/azure/storage/blob/_constants.py new/azure-storage-blob-1.5.0/azure/storage/blob/_constants.py --- old/azure-storage-blob-1.3.1/azure/storage/blob/_constants.py 2018-07-17 00:26:12.000000000 +0200 +++ new/azure-storage-blob-1.5.0/azure/storage/blob/_constants.py 2019-02-16 00:11:37.000000000 +0100 @@ -5,7 +5,7 @@ # -------------------------------------------------------------------------- __author__ = 'Microsoft Corp. <ptvsh...@microsoft.com>' -__version__ = '1.3.1' +__version__ = '1.5.0' # x-ms-version for storage service. X_MS_VERSION = '2018-03-28' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/azure/storage/blob/_deserialization.py new/azure-storage-blob-1.5.0/azure/storage/blob/_deserialization.py --- old/azure-storage-blob-1.3.1/azure/storage/blob/_deserialization.py 2018-07-10 09:09:37.000000000 +0200 +++ new/azure-storage-blob-1.5.0/azure/storage/blob/_deserialization.py 2019-02-15 23:59:43.000000000 +0100 @@ -351,6 +351,77 @@ return blob_list +def _convert_xml_to_blob_name_list(response): + ''' + <?xml version="1.0" encoding="utf-8"?> + <EnumerationResults ServiceEndpoint="http://myaccount.blob.core.windows.net/" ContainerName="mycontainer"> + <Prefix>string-value</Prefix> + <Marker>string-value</Marker> + <MaxResults>int-value</MaxResults> + <Delimiter>string-value</Delimiter> + <Blobs> + <Blob> + <Name>blob-name</name> + <Deleted>true</Deleted> + <Snapshot>date-time-value</Snapshot> + <Properties> + <Last-Modified>date-time-value</Last-Modified> + <Etag>etag</Etag> + <Content-Length>size-in-bytes</Content-Length> + <Content-Type>blob-content-type</Content-Type> + <Content-Encoding /> + <Content-Language /> + <Content-MD5 /> + <Cache-Control /> + <x-ms-blob-sequence-number>sequence-number</x-ms-blob-sequence-number> + <BlobType>BlockBlob|PageBlob|AppendBlob</BlobType> + <LeaseStatus>locked|unlocked</LeaseStatus> + <LeaseState>available | leased | expired | breaking | broken</LeaseState> + <LeaseDuration>infinite | fixed</LeaseDuration> + <CopyId>id</CopyId> + <CopyStatus>pending | success | aborted | failed </CopyStatus> + <CopySource>source url</CopySource> + <CopyProgress>bytes copied/bytes total</CopyProgress> + <CopyCompletionTime>datetime</CopyCompletionTime> + <CopyStatusDescription>error string</CopyStatusDescription> + <AccessTier>P4 | P6 | P10 | P20 | P30 | P40 | P50 | P60 | Archive | Cool | Hot</AccessTier> + <AccessTierChangeTime>date-time-value</AccessTierChangeTime> + <AccessTierInferred>true</AccessTierInferred> + <DeletedTime>datetime</DeletedTime> + <RemainingRetentionDays>int</RemainingRetentionDays> + <Creation-Time>date-time-value</Creation-Time> + </Properties> + <Metadata> + <Name>value</Name> + </Metadata> + </Blob> + <BlobPrefix> + <Name>blob-prefix</Name> + </BlobPrefix> + </Blobs> + <NextMarker /> + </EnumerationResults> + ''' + if response is None or response.body is None: + return None + + blob_list = _list() + list_element = ETree.fromstring(response.body) + + setattr(blob_list, 'next_marker', list_element.findtext('NextMarker')) + + blobs_element = list_element.find('Blobs') + blob_prefix_elements = blobs_element.findall('BlobPrefix') + if blob_prefix_elements is not None: + for blob_prefix_element in blob_prefix_elements: + blob_list.append(blob_prefix_element.findtext('Name')) + + for blob_element in blobs_element.findall('Blob'): + blob_list.append(blob_element.findtext('Name')) + + return blob_list + + def _convert_xml_to_block_list(response): ''' <?xml version="1.0" encoding="utf-8"?> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/azure/storage/blob/_encryption.py new/azure-storage-blob-1.5.0/azure/storage/blob/_encryption.py --- old/azure-storage-blob-1.3.1/azure/storage/blob/_encryption.py 2018-01-12 09:40:56.000000000 +0100 +++ new/azure-storage-blob-1.5.0/azure/storage/blob/_encryption.py 2018-12-18 01:05:25.000000000 +0100 @@ -123,8 +123,8 @@ except: if require_encryption: raise ValueError(_ERROR_DATA_NOT_ENCRYPTED) - else: - return content + + return content if not (encryption_data.encryption_agent.encryption_algorithm == _EncryptionAlgorithm.AES_CBC_256): raise ValueError(_ERROR_UNSUPPORTED_ENCRYPTION_ALGORITHM) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/azure/storage/blob/baseblobservice.py new/azure-storage-blob-1.5.0/azure/storage/blob/baseblobservice.py --- old/azure-storage-blob-1.3.1/azure/storage/blob/baseblobservice.py 2018-07-13 00:18:53.000000000 +0200 +++ new/azure-storage-blob-1.5.0/azure/storage/blob/baseblobservice.py 2019-02-15 23:59:43.000000000 +0100 @@ -58,6 +58,7 @@ _convert_xml_to_containers, _parse_blob, _convert_xml_to_blob_list, + _convert_xml_to_blob_name_list, _parse_container, _parse_snapshot_blob, _parse_lease, @@ -1243,14 +1244,66 @@ args = (container_name,) kwargs = {'prefix': prefix, 'marker': marker, 'max_results': num_results, 'include': include, 'delimiter': delimiter, 'timeout': timeout, - '_context': operation_context} + '_context': operation_context, + '_converter': _convert_xml_to_blob_list} + resp = self._list_blobs(*args, **kwargs) + + return ListGenerator(resp, self._list_blobs, args, kwargs) + + def list_blob_names(self, container_name, prefix=None, num_results=None, + include=None, delimiter=None, marker=None, + timeout=None): + ''' + Returns a generator to list the blob names under the specified container. + The generator will lazily follow the continuation tokens returned by + the service and stop when all blobs have been returned or num_results is reached. + + If num_results is specified and the account has more than that number of + blobs, the generator will have a populated next_marker field once it + finishes. This marker can be used to create a new generator if more + results are desired. + + :param str container_name: + Name of existing container. + :param str prefix: + Filters the results to return only blobs whose names + begin with the specified prefix. + :param int num_results: + Specifies the maximum number of blobs to return, + including all :class:`BlobPrefix` elements. If the request does not specify + num_results or specifies a value greater than 5,000, the server will + return up to 5,000 items. Setting num_results to a value less than + or equal to zero results in error response code 400 (Bad Request). + :param ~azure.storage.blob.models.Include include: + Specifies one or more additional datasets to include in the response. + :param str delimiter: + When the request includes this parameter, the operation + returns a :class:`~azure.storage.blob.models.BlobPrefix` element in the + result list that acts as a placeholder for all blobs whose names begin + with the same substring up to the appearance of the delimiter character. + The delimiter may be a single character or a string. + :param str marker: + An opaque continuation token. This value can be retrieved from the + next_marker field of a previous generator object if num_results was + specified and that generator has finished enumerating results. If + specified, this generator will begin returning results from the point + where the previous generator stopped. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + operation_context = _OperationContext(location_lock=True) + args = (container_name,) + kwargs = {'prefix': prefix, 'marker': marker, 'max_results': num_results, + 'include': include, 'delimiter': delimiter, 'timeout': timeout, + '_context': operation_context, + '_converter': _convert_xml_to_blob_name_list} resp = self._list_blobs(*args, **kwargs) return ListGenerator(resp, self._list_blobs, args, kwargs) def _list_blobs(self, container_name, prefix=None, marker=None, max_results=None, include=None, delimiter=None, timeout=None, - _context=None): + _context=None, _converter=None): ''' Returns the list of blobs under the specified container. @@ -1319,7 +1372,7 @@ 'timeout': _int_to_str(timeout), } - return self._perform_request(request, _convert_xml_to_blob_list, operation_context=_context) + return self._perform_request(request, _converter, operation_context=_context) def get_blob_account_information(self, container_name=None, blob_name=None, timeout=None): """ @@ -1976,11 +2029,11 @@ if max_connections > 1: if sys.version_info >= (3,) and not stream.seekable(): raise ValueError(_ERROR_PARALLEL_NOT_SEEKABLE) - else: - try: - stream.seek(stream.tell()) - except (NotImplementedError, AttributeError): - raise ValueError(_ERROR_PARALLEL_NOT_SEEKABLE) + + try: + stream.seek(stream.tell()) + except (NotImplementedError, AttributeError): + raise ValueError(_ERROR_PARALLEL_NOT_SEEKABLE) # The service only provides transactional MD5s for chunks under 4MB. # If validate_content is on, get only self.MAX_CHUNK_GET_SIZE for the first @@ -3070,7 +3123,7 @@ destination_if_none_match, destination_lease_id, source_lease_id, timeout, - False) + False, False) def _copy_blob(self, container_name, blob_name, copy_source, metadata=None, @@ -3084,12 +3137,16 @@ destination_if_none_match=None, destination_lease_id=None, source_lease_id=None, timeout=None, - incremental_copy=False): + incremental_copy=False, + requires_sync=None): ''' See copy_blob for more details. This helper method - allows for standard copies as well as incremental copies which are only supported for page blobs. + allows for standard copies as well as incremental copies which are only supported for page blobs and sync + copies which are only supported for block blobs. :param bool incremental_copy: - The timeout parameter is expressed in seconds. + Performs an incremental copy operation on a page blob instead of a standard copy operation. + :param bool requires_sync: + Enforces that the service will not return a response until the copy is complete. ''' _validate_not_none('container_name', container_name) _validate_not_none('blob_name', blob_name) @@ -3136,8 +3193,10 @@ 'If-None-Match': _to_str(destination_if_none_match), 'x-ms-lease-id': _to_str(destination_lease_id), 'x-ms-source-lease-id': _to_str(source_lease_id), - 'x-ms-access-tier': _to_str(premium_page_blob_tier) + 'x-ms-access-tier': _to_str(premium_page_blob_tier), + 'x-ms-requires-sync': _to_str(requires_sync) } + _add_metadata_headers(metadata, request) return self._perform_request(request, _parse_properties, [BlobProperties]).copy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/azure/storage/blob/blockblobservice.py new/azure-storage-blob-1.5.0/azure/storage/blob/blockblobservice.py --- old/azure-storage-blob-1.3.1/azure/storage/blob/blockblobservice.py 2018-07-10 09:09:37.000000000 +0200 +++ new/azure-storage-blob-1.5.0/azure/storage/blob/blockblobservice.py 2018-12-18 01:05:25.000000000 +0100 @@ -880,6 +880,136 @@ self._perform_request(request) + def copy_blob(self, container_name, blob_name, copy_source, + metadata=None, source_if_modified_since=None, + source_if_unmodified_since=None, source_if_match=None, + source_if_none_match=None, destination_if_modified_since=None, + destination_if_unmodified_since=None,destination_if_match=None, + destination_if_none_match=None, destination_lease_id=None, + source_lease_id=None, timeout=None, requires_sync=None): + + ''' + Copies a blob. This operation returns a copy operation + properties object. The copy operation may be configured to either be an + asynchronous, best-effort operation, or a synchronous operation. + + The source must be a block blob if requires_sync is true. Any existing + destination blob will be overwritten. The destination blob cannot be + modified while a copy operation is in progress. + + When copying from a block blob, all committed blocks and their block IDs are + copied. Uncommitted blocks are not copied. At the end of the copy operation, + the destination blob will have the same committed block count as the source. + + You can call get_blob_properties on the destination blob to check the status + of the copy operation. The final blob will be committed when the copy completes. + + :param str container_name: + Name of the destination container. The container must exist. + :param str blob_name: + Name of the destination blob. If the destination blob exists, it will + be overwritten. Otherwise, it will be created. + :param str copy_source: + A URL of up to 2 KB in length that specifies an Azure file or blob. + The value should be URL-encoded as it would appear in a request URI. + If the source is in another account, the source must either be public + or must be authenticated via a shared access signature. If the source + is public, no authentication is required. + Examples: + https://myaccount.blob.core.windows.net/mycontainer/myblob + https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime> + https://otheraccount.blob.core.windows.net/mycontainer/myblob?sastoken + :param metadata: + Name-value pairs associated with the blob as metadata. If no name-value + pairs are specified, the operation will copy the metadata from the + source blob or file to the destination blob. If one or more name-value + pairs are specified, the destination blob is created with the specified + metadata, and metadata is not copied from the source blob or file. + :type metadata: dict(str, str) + :param datetime source_if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only if the source + blob has been modified since the specified date/time. + :param datetime source_if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only if the source blob + has not been modified since the specified date/time. + :param ETag source_if_match: + An ETag value, or the wildcard character (*). Specify this conditional + header to copy the source blob only if its ETag matches the value + specified. If the ETag values do not match, the Blob service returns + status code 412 (Precondition Failed). This header cannot be specified + if the source is an Azure File. + :param ETag source_if_none_match: + An ETag value, or the wildcard character (*). Specify this conditional + header to copy the blob only if its ETag does not match the value + specified. If the values are identical, the Blob service returns status + code 412 (Precondition Failed). This header cannot be specified if the + source is an Azure File. + :param datetime destination_if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only + if the destination blob has been modified since the specified date/time. + If the destination blob has not been modified, the Blob service returns + status code 412 (Precondition Failed). + :param datetime destination_if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only + if the destination blob has not been modified since the specified + date/time. If the destination blob has been modified, the Blob service + returns status code 412 (Precondition Failed). + :param ETag destination_if_match: + An ETag value, or the wildcard character (*). Specify an ETag value for + this conditional header to copy the blob only if the specified ETag value + matches the ETag value for an existing destination blob. If the ETag for + the destination blob does not match the ETag specified for If-Match, the + Blob service returns status code 412 (Precondition Failed). + :param ETag destination_if_none_match: + An ETag value, or the wildcard character (*). Specify an ETag value for + this conditional header to copy the blob only if the specified ETag value + does not match the ETag value for the destination blob. Specify the wildcard + character (*) to perform the operation only if the destination blob does not + exist. If the specified condition isn't met, the Blob service returns status + code 412 (Precondition Failed). + :param str destination_lease_id: + The lease ID specified for this header must match the lease ID of the + destination blob. If the request does not include the lease ID or it is not + valid, the operation fails with status code 412 (Precondition Failed). + :param str source_lease_id: + Specify this to perform the Copy Blob operation only if + the lease ID given matches the active lease ID of the source blob. + :param int timeout: + The timeout parameter is expressed in seconds. + :param bool requires_sync: + Enforces that the service will not return a response until the copy is complete. + :return: Copy operation properties such as status, source, and ID. + :rtype: :class:`~azure.storage.blob.models.CopyProperties` + ''' + + return self._copy_blob(container_name, blob_name, copy_source, + metadata, + premium_page_blob_tier=None, + source_if_modified_since=source_if_modified_since, + source_if_unmodified_since=source_if_unmodified_since, + source_if_match=source_if_match, + source_if_none_match=source_if_none_match, + destination_if_modified_since=destination_if_modified_since, + destination_if_unmodified_since=destination_if_unmodified_since, + destination_if_match=destination_if_match, + destination_if_none_match=destination_if_none_match, + destination_lease_id=destination_lease_id, + source_lease_id=source_lease_id, timeout=timeout, + incremental_copy=False, + requires_sync=requires_sync) + # -----Helper methods------------------------------------ def _put_blob(self, container_name, blob_name, blob, content_settings=None, metadata=None, validate_content=False, lease_id=None, if_modified_since=None, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/azure_bdist_wheel.py new/azure-storage-blob-1.5.0/azure_bdist_wheel.py --- old/azure-storage-blob-1.3.1/azure_bdist_wheel.py 2018-06-01 00:48:14.000000000 +0200 +++ new/azure-storage-blob-1.5.0/azure_bdist_wheel.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,54 +0,0 @@ -#------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -#-------------------------------------------------------------------------- - -from distutils import log as logger -import os.path - -from wheel.bdist_wheel import bdist_wheel -class azure_bdist_wheel(bdist_wheel): - """The purpose of this class is to build wheel a little differently than the sdist, - without requiring to build the wheel from the sdist (i.e. you can build the wheel - directly from source). - """ - - description = "Create an Azure wheel distribution" - - user_options = bdist_wheel.user_options + \ - [('azure-namespace-package=', None, - "Name of the deepest nspkg used")] - - def initialize_options(self): - bdist_wheel.initialize_options(self) - self.azure_namespace_package = None - - def finalize_options(self): - bdist_wheel.finalize_options(self) - if self.azure_namespace_package and not self.azure_namespace_package.endswith("-nspkg"): - raise ValueError("azure_namespace_package must finish by -nspkg") - - def run(self): - if not self.distribution.install_requires: - self.distribution.install_requires = [] - self.distribution.install_requires.append( - "{}>=2.0.0".format(self.azure_namespace_package)) - bdist_wheel.run(self) - - def write_record(self, bdist_dir, distinfo_dir): - if self.azure_namespace_package: - # Split and remove last part, assuming it's "nspkg" - subparts = self.azure_namespace_package.split('-')[0:-1] - folder_with_init = [os.path.join(*subparts[0:i+1]) for i in range(len(subparts))] - for azure_sub_package in folder_with_init: - init_file = os.path.join(bdist_dir, azure_sub_package, '__init__.py') - if os.path.isfile(init_file): - logger.info("manually remove {} while building the wheel".format(init_file)) - os.remove(init_file) - else: - raise ValueError("Unable to find {}. Are you sure of your namespace package?".format(init_file)) - bdist_wheel.write_record(self, bdist_dir, distinfo_dir) -cmdclass = { - 'bdist_wheel': azure_bdist_wheel, -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/azure_storage_blob.egg-info/PKG-INFO new/azure-storage-blob-1.5.0/azure_storage_blob.egg-info/PKG-INFO --- old/azure-storage-blob-1.3.1/azure_storage_blob.egg-info/PKG-INFO 2018-07-17 00:29:36.000000000 +0200 +++ new/azure-storage-blob-1.5.0/azure_storage_blob.egg-info/PKG-INFO 2019-02-16 00:21:24.000000000 +0100 @@ -1,18 +1,22 @@ Metadata-Version: 1.1 Name: azure-storage-blob -Version: 1.3.1 +Version: 1.5.0 Summary: Microsoft Azure Storage Blob Client Library for Python Home-page: https://github.com/Azure/azure-storage-python Author: Microsoft Corporation Author-email: a...@microsoft.com License: MIT License -Description-Content-Type: UNKNOWN Description: Microsoft Azure Storage SDK for Python ====================================== + .. image:: https://travis-ci.org/Azure/azure-storage-python.svg + :target: https://travis-ci.org/Azure/azure-storage-python + .. image:: https://img.shields.io/codecov/c/github/azure/azure-storage-python.svg + :target: https://codecov.io/gh/Azure/azure-storage-python + This project provides a client library in Python that makes it easy to consume Microsoft Azure Storage services. For documentation please see - the Microsoft Azure `Python Developer Center`_ and our `API Reference`_ Page. + the Microsoft Azure `Python Developer Center`_ and our `API Reference`_ (also available on `readthedocs`_). If you are looking for the Service Bus or Azure Management libraries, please visit @@ -38,7 +42,7 @@ pip uninstall azure pip install azure - If you are upgrading from a version older than 0.30.0, see the upgrade doc, the + If you are upgrading from a version older than 0.30.0, see the upgrade doc, the usage samples in the samples directory, and the ChangeLog and BreakingChanges. If you are encountering `problems`_ installing azure storage on Azure Web Apps, @@ -220,7 +224,8 @@ - `API Reference`_ .. _Python Developer Center: http://azure.microsoft.com/en-us/develop/python/ - .. _API Reference: https://azure-storage.readthedocs.io/en/latest/ + .. _API Reference: https://docs.microsoft.com/en-us/python/api/overview/azure/storage/client?view=azure-python + .. _readthedocs: https://azure-storage.readthedocs.io/ .. _here: https://github.com/Azure/azure-storage-python/archive/master.zip .. _create an account: https://account.windowsazure.com/signup .. _Developer Forums on MSDN: http://social.msdn.microsoft.com/Forums/windowsazure/en-US/home?forum=windowsazuredata @@ -233,6 +238,7 @@ .. _problems: https://github.com/Azure/azure-storage-python/issues/219 .. _upgrading pip: https://docs.microsoft.com/en-us/visualstudio/python/managing-python-on-azure-app-service .. _cosmosdb: https://github.com/Azure/azure-cosmosdb-python + Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Programming Language :: Python @@ -243,4 +249,5 @@ Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 Classifier: License :: OSI Approved :: MIT License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/azure_storage_blob.egg-info/SOURCES.txt new/azure-storage-blob-1.5.0/azure_storage_blob.egg-info/SOURCES.txt --- old/azure-storage-blob-1.3.1/azure_storage_blob.egg-info/SOURCES.txt 2018-07-17 00:29:36.000000000 +0200 +++ new/azure-storage-blob-1.5.0/azure_storage_blob.egg-info/SOURCES.txt 2019-02-16 00:21:24.000000000 +0100 @@ -1,6 +1,6 @@ +LICENSE.txt MANIFEST.in README.rst -azure_bdist_wheel.py setup.cfg setup.py azure/__init__.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/azure_storage_blob.egg-info/requires.txt new/azure-storage-blob-1.5.0/azure_storage_blob.egg-info/requires.txt --- old/azure-storage-blob-1.3.1/azure_storage_blob.egg-info/requires.txt 2018-07-17 00:29:36.000000000 +0200 +++ new/azure-storage-blob-1.5.0/azure_storage_blob.egg-info/requires.txt 2019-02-16 00:21:24.000000000 +0100 @@ -1,5 +1,5 @@ azure-common>=1.1.5 -azure-storage-common~=1.3 +azure-storage-common~=1.4 [:python_version<'3.0'] futures diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/setup.cfg new/azure-storage-blob-1.5.0/setup.cfg --- old/azure-storage-blob-1.3.1/setup.cfg 2018-07-17 00:29:36.000000000 +0200 +++ new/azure-storage-blob-1.5.0/setup.cfg 2019-02-16 00:21:24.000000000 +0100 @@ -1,6 +1,5 @@ [bdist_wheel] universal = 1 -azure-namespace-package = azure-storage-nspkg [egg_info] tag_build = diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-storage-blob-1.3.1/setup.py new/azure-storage-blob-1.5.0/setup.py --- old/azure-storage-blob-1.3.1/setup.py 2018-07-17 00:26:12.000000000 +0200 +++ new/azure-storage-blob-1.5.0/setup.py 2019-02-16 00:11:37.000000000 +0100 @@ -10,13 +10,6 @@ from setuptools import setup, find_packages -try: - from azure_bdist_wheel import cmdclass -except ImportError: - from distutils import log as logger - - logger.warn("Wheel is not available, disabling bdist_wheel hook") - cmdclass = {} # azure v0.x is not compatible with this package # azure v0.x used to have a __version__ attribute (newer versions don't) @@ -51,7 +44,7 @@ setup( name='azure-storage-blob', - version='1.3.1', + version='1.5.0', description='Microsoft Azure Storage Blob Client Library for Python', long_description=open('README.rst', 'r').read(), license='MIT License', @@ -68,16 +61,20 @@ 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', 'License :: OSI Approved :: MIT License', ], zip_safe=False, - packages=find_packages(), + packages=find_packages(exclude=[ + # Exclude packages that will be covered by PEP420 or nspkg + 'azure', + 'azure.storage', + ]), install_requires=[ - 'azure-common>=1.1.5', - 'azure-storage-common~=1.3' - ], + 'azure-common>=1.1.5', + 'azure-storage-common~=1.4' + ], extras_require={ ":python_version<'3.0'": ['futures'], }, - cmdclass=cmdclass )