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
 )


Reply via email to