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
<[email protected]>
+
+- 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: [email protected]
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. <[email protected]>'
-__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: [email protected]
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
)