Hello community,

here is the log from the commit of package python-glanceclient for 
openSUSE:Factory checked in at 2019-05-03 22:40:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-glanceclient (Old)
 and      /work/SRC/openSUSE:Factory/.python-glanceclient.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-glanceclient"

Fri May  3 22:40:27 2019 rev:29 rq:692825 version:2.16.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-glanceclient/python-glanceclient.changes  
2019-02-11 21:24:56.427094944 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-glanceclient.new.5148/python-glanceclient.changes
        2019-05-03 22:40:40.303019794 +0200
@@ -1,0 +2,26 @@
+Mon Apr  8 11:58:56 UTC 2019 - cloud-de...@suse.de
+
+- update to version 2.16.0
+  - Update irrelevant-files for dsvm-functional tests
+  - Refactor periodic "tips" jobs
+  - Cleanup .zuul.yaml
+  - Add Python 3.6 classifier to setup.cfg
+  - Show the backend store info
+  - add lib-forward-testing-python3 test job
+  - Change openstack-dev to openstack-discuss
+  - Use "multihash" for data download validation
+  - Update min tox version to 2.0
+  - Update reno for stable/rocky
+  - Skip quote '=' for token header
+  - Remove redundant information from error message
+  - switch documentation job to new PTI
+  - Add image-list filter for multihash
+  - Release notes for 2.16.0
+  - add python 3.6 unit test job
+  - Embed validation data when adding location
+  - Don't quote colon in HTTP headers
+  - add python 3.7 unit test job
+  - import zuul job settings from project-config
+  - Remove team diversity tags note in README
+
+-------------------------------------------------------------------

Old:
----
  python-glanceclient-2.13.1.tar.gz

New:
----
  python-glanceclient-2.16.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-glanceclient.spec ++++++
--- /var/tmp/diff_new_pack.AimCXf/_old  2019-05-03 22:40:41.175021630 +0200
+++ /var/tmp/diff_new_pack.AimCXf/_new  2019-05-03 22:40:41.175021630 +0200
@@ -17,13 +17,13 @@
 
 
 Name:           python-glanceclient
-Version:        2.13.1
+Version:        2.16.0
 Release:        0
 Summary:        Python API and CLI for OpenStack Glance
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://launchpad.net/python-glanceclient
-Source0:        
https://files.pythonhosted.org/packages/source/p/python-glanceclient/python-glanceclient-2.13.1.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/p/python-glanceclient/python-glanceclient-2.16.0.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python-devel
 BuildRequires:  python2-PrettyTable >= 0.7.1
@@ -94,16 +94,15 @@
 This package contains auto-generated documentation.
 
 %prep
-%autosetup -p1 -n python-glanceclient-2.13.1
+%autosetup -p1 -n python-glanceclient-2.16.0
 %py_req_cleanup
-sed -i 's/^warning-is-error.*/warning-is-error = 0/g' setup.cfg
 
 %build
 %python_build
 
 # generate html docs
-PBR_VERSION=2.13.1 sphinx-build -b html doc/source doc/build/html
-PBR_VERSION=2.13.1 sphinx-build -b man doc/source doc/build/man
+PBR_VERSION=2.16.0 sphinx-build -b html doc/source doc/build/html
+PBR_VERSION=2.16.0 sphinx-build -b man doc/source doc/build/man
 # remove the sphinx-build leftovers
 rm -rf doc/build/html/.{doctrees,buildinfo}
 

++++++ _service ++++++
--- /var/tmp/diff_new_pack.AimCXf/_old  2019-05-03 22:40:41.195021672 +0200
+++ /var/tmp/diff_new_pack.AimCXf/_new  2019-05-03 22:40:41.199021680 +0200
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/rocky/openstack/python-glanceclient/python-glanceclient.spec.j2</param>
+    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/stein/openstack/python-glanceclient/python-glanceclient.spec.j2</param>
     <param name="output-name">python-glanceclient.spec</param>
-    <param 
name="requirements">https://raw.githubusercontent.com/openstack/python-glanceclient/stable/rocky/requirements.txt</param>
+    <param 
name="requirements">https://raw.githubusercontent.com/openstack/python-glanceclient/stable/stein/requirements.txt</param>
     <param name="changelog-email">cloud-de...@suse.de</param>
     <param name="changelog-provider">gh,openstack,python-glanceclient</param>
   </service>

++++++ python-glanceclient-2.13.1.tar.gz -> python-glanceclient-2.16.0.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-glanceclient-2.13.1/.zuul.yaml 
new/python-glanceclient-2.16.0/.zuul.yaml
--- old/python-glanceclient-2.13.1/.zuul.yaml   2018-12-12 04:54:05.000000000 
+0100
+++ new/python-glanceclient-2.16.0/.zuul.yaml   2019-03-08 01:26:17.000000000 
+0100
@@ -36,6 +36,15 @@
         s-proxy: true
       # Hardcode glanceclient path so the job can be run on glance patches
       zuul_work_dir: src/git.openstack.org/openstack/python-glanceclient
+    irrelevant-files:
+      - ^doc/.*$
+      - ^releasenotes/.*$
+      - ^.*\.rst$
+      - ^(test-|)requirements.txt$
+      - ^lower-constraints.txt$
+      - ^setup.cfg$
+      - ^tox.ini$
+      - ^\.zuul\.yaml$
 
 - job:
     name: glanceclient-dsvm-functional
@@ -66,6 +75,15 @@
         s-proxy: true
       # Hardcode glanceclient path so the job can be run on glance patches
       zuul_work_dir: src/git.openstack.org/openstack/python-glanceclient
+    irrelevant-files:
+      - ^doc/.*$
+      - ^releasenotes/.*$
+      - ^.*\.rst$
+      - ^(test-|)requirements.txt$
+      - ^lower-constraints.txt$
+      - ^setup.cfg$
+      - ^tox.ini$
+      - ^\.zuul\.yaml$
 
 - job:
     name: glanceclient-tox-keystone-tips-base
@@ -125,22 +143,25 @@
 
 - project:
     templates:
-      - openstack-python-jobs
-      - openstack-python35-jobs
-      - release-notes-jobs
-      - publish-openstack-sphinx-docs
       - check-requirements
       - lib-forward-testing
+      - lib-forward-testing-python3
+      - openstack-cover-jobs
+      - openstack-lower-constraints-jobs
+      - openstack-python-jobs
+      - openstack-python35-jobs
+      - openstack-python36-jobs
+      - openstack-python37-jobs
+      - publish-openstack-docs-pti
+      - release-notes-jobs-python3
     check:
       jobs:
         - glanceclient-dsvm-functional-v1
         - glanceclient-dsvm-functional
-        - openstack-tox-lower-constraints
     gate:
       jobs:
         - glanceclient-dsvm-functional-v1
         - glanceclient-dsvm-functional
-        - openstack-tox-lower-constraints
     periodic:
       jobs:
         # NOTE(rosmaita): we only want the "tips" jobs to be run against
@@ -166,6 +187,3 @@
     experimental:
       jobs:
         - glanceclient-dsvm-functional-py3
-    post:
-      jobs:
-        - openstack-tox-cover
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-glanceclient-2.13.1/AUTHORS 
new/python-glanceclient-2.16.0/AUTHORS
--- old/python-glanceclient-2.13.1/AUTHORS      2018-12-12 04:56:32.000000000 
+0100
+++ new/python-glanceclient-2.16.0/AUTHORS      2019-03-08 01:28:04.000000000 
+0100
@@ -95,6 +95,7 @@
 Ian Wienand <iwien...@redhat.com>
 Ihar Hrachyshka <ihrac...@redhat.com>
 Itisha Dewan <ishadewa...@gmail.com>
+Jack Ding <jack.d...@windriver.com>
 Jake Yip <jake....@unimelb.edu.au>
 Jakub Ruzicka <jruzi...@redhat.com>
 James E. Blair <jebl...@hp.com>
@@ -124,6 +125,7 @@
 Lars Gellrich <lars.gellr...@hp.com>
 Le Tian Ren <ren...@cn.ibm.com>
 Li Wei <wei...@easystack.cn>
+Liang Fang <liang.a.f...@intel.com>
 LiuNanke <nanke....@easystack.cn>
 Long Quan Sha <sh...@cn.ibm.com>
 Longgeek <longg...@thstack.com>
@@ -221,6 +223,7 @@
 dineshbhor <dinesh.b...@nttdata.com>
 eddie-sheffield <eddie.sheffi...@rackspace.com>
 haobing1 <hao.bi...@zte.com.cn>
+huang.zhiping <huang.zhip...@99cloud.net>
 iccha-sethi <iccha.se...@rackspace.com>
 iccha.sethi <iccha.se...@rackspace.com>
 imacdonn <iain.macdonn...@oracle.com>
@@ -243,6 +246,7 @@
 shu-mutou <shu-mu...@rf.jp.nec.com>
 sonu.kumar <sonu.ku...@nectechnologies.in>
 sridhargaddam <sridhar.gad...@enovance.com>
+sunjia <sun...@inspur.com>
 venkatamahesh <venkatamaheshko...@gmail.com>
 wanghong <w.wangh...@huawei.com>
 wangqi <wang...@99cloud.net>
@@ -253,6 +257,7 @@
 yangds <dongsheng.y...@easystack.cn>
 yatin <yka...@redhat.com>
 yatin karel <yatin.ka...@nectechnologies.in>
+zhangbailin <zhangbai...@inspur.com>
 zheng yin <yin.zh...@easystack.cn>
 zhengyao1 <zheng.y...@zte.com.cn>
 zwei <leid...@unitedstack.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-glanceclient-2.13.1/ChangeLog 
new/python-glanceclient-2.16.0/ChangeLog
--- old/python-glanceclient-2.13.1/ChangeLog    2018-12-12 04:56:32.000000000 
+0100
+++ new/python-glanceclient-2.16.0/ChangeLog    2019-03-08 01:28:04.000000000 
+0100
@@ -1,25 +1,38 @@
 CHANGES
 =======
 
-2.13.1
+2.16.0
 ------
 
-* Don't quote colon in HTTP headers
+* Release notes for 2.16.0
+* Remove redundant information from error message
+* Update min tox version to 2.0
+* Update irrelevant-files for dsvm-functional tests
+* add python 3.7 unit test job
+* Add image-list filter for multihash
+* Change openstack-dev to openstack-discuss
+* Add Python 3.6 classifier to setup.cfg
 
-2.13.0
+2.15.0
 ------
 
-* Use "multihash" for data download validation
-* Refactor periodic "tips" jobs
-* import zuul job settings from project-config
+* Show the backend store info
+* Don't quote colon in HTTP headers
+* Embed validation data when adding location
 
-2.12.1
+2.14.0
 ------
 
+* Refactor periodic "tips" jobs
+* Cleanup .zuul.yaml
+* Use "multihash" for data download validation
+* add lib-forward-testing-python3 test job
+* add python 3.6 unit test job
+* switch documentation job to new PTI
+* import zuul job settings from project-config
+* Remove team diversity tags note in README
+* Update reno for stable/rocky
 * Skip quote '=' for token header
-* Add releasenote for 2.12.1
-* Update UPPER\_CONSTRAINTS\_FILE for stable/rocky
-* Update .gitreview for stable/rocky
 
 2.12.0
 ------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-glanceclient-2.13.1/PKG-INFO 
new/python-glanceclient-2.16.0/PKG-INFO
--- old/python-glanceclient-2.13.1/PKG-INFO     2018-12-12 04:56:32.000000000 
+0100
+++ new/python-glanceclient-2.16.0/PKG-INFO     2019-03-08 01:28:04.000000000 
+0100
@@ -1,10 +1,10 @@
 Metadata-Version: 1.1
 Name: python-glanceclient
-Version: 2.13.1
+Version: 2.16.0
 Summary: OpenStack Image API Client Library
 Home-page: https://docs.openstack.org/python-glanceclient/latest/
 Author: OpenStack
-Author-email: openstack-...@lists.openstack.org
+Author-email: openstack-disc...@lists.openstack.org
 License: Apache License, Version 2.0
 Description: ========================
         Team and repository tags
@@ -16,8 +16,7 @@
                   OpenStack Images API:
                   "project:official",
                   "stable:follows-policy",
-                  "vulnerability:managed",
-                  "team:diverse-affiliation".
+                  "vulnerability:managed".
                   Follow the link for an explanation of these tags.
         .. NOTE(rosmaita): the alt text above will have to be updated when
            additional tags are asserted for python-glanceclient.  (The SVG in 
the
@@ -35,9 +34,9 @@
         
         This is a client library for Glance built on the OpenStack Images API. 
It provides a Python API (the ``glanceclient`` module) and a command-line tool 
(``glance``). This library fully supports the v1 Images API, while support for 
the v2 API is in progress.
         
-        Development takes place via the usual OpenStack processes as outlined 
in the `developer guide 
<http://docs.openstack.org/infra/manual/developers.html>`_.  The master 
repository is in `Git 
<https://git.openstack.org/cgit/openstack/python-glanceclient>`_.
+        Development takes place via the usual OpenStack processes as outlined 
in the `developer guide 
<https://docs.openstack.org/infra/manual/developers.html>`_.  The master 
repository is in `Git 
<https://git.openstack.org/cgit/openstack/python-glanceclient>`_.
         
-        See release notes and more at 
`<http://docs.openstack.org/python-glanceclient/>`_.
+        See release notes and more at 
`<https://docs.openstack.org/python-glanceclient/latest/>`_.
         
         * License: Apache License, Version 2.0
         * `PyPi`_ - package installation
@@ -73,3 +72,4 @@
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-glanceclient-2.13.1/README.rst 
new/python-glanceclient-2.16.0/README.rst
--- old/python-glanceclient-2.13.1/README.rst   2018-12-12 04:54:05.000000000 
+0100
+++ new/python-glanceclient-2.16.0/README.rst   2019-03-08 01:26:17.000000000 
+0100
@@ -8,8 +8,7 @@
           OpenStack Images API:
           "project:official",
           "stable:follows-policy",
-          "vulnerability:managed",
-          "team:diverse-affiliation".
+          "vulnerability:managed".
           Follow the link for an explanation of these tags.
 .. NOTE(rosmaita): the alt text above will have to be updated when
    additional tags are asserted for python-glanceclient.  (The SVG in the
@@ -27,9 +26,9 @@
 
 This is a client library for Glance built on the OpenStack Images API. It 
provides a Python API (the ``glanceclient`` module) and a command-line tool 
(``glance``). This library fully supports the v1 Images API, while support for 
the v2 API is in progress.
 
-Development takes place via the usual OpenStack processes as outlined in the 
`developer guide <http://docs.openstack.org/infra/manual/developers.html>`_.  
The master repository is in `Git 
<https://git.openstack.org/cgit/openstack/python-glanceclient>`_.
+Development takes place via the usual OpenStack processes as outlined in the 
`developer guide <https://docs.openstack.org/infra/manual/developers.html>`_.  
The master repository is in `Git 
<https://git.openstack.org/cgit/openstack/python-glanceclient>`_.
 
-See release notes and more at 
`<http://docs.openstack.org/python-glanceclient/>`_.
+See release notes and more at 
`<https://docs.openstack.org/python-glanceclient/latest/>`_.
 
 * License: Apache License, Version 2.0
 * `PyPi`_ - package installation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-glanceclient-2.13.1/glanceclient/exc.py 
new/python-glanceclient-2.16.0/glanceclient/exc.py
--- old/python-glanceclient-2.13.1/glanceclient/exc.py  2018-12-12 
04:53:59.000000000 +0100
+++ new/python-glanceclient-2.16.0/glanceclient/exc.py  2019-03-08 
01:26:17.000000000 +0100
@@ -52,7 +52,7 @@
         self.details = details or self.__class__.__name__
 
     def __str__(self):
-        return "%s (HTTP %s)" % (self.details, self.code)
+        return "HTTP %s" % (self.details)
 
 
 class HTTPMultipleChoices(HTTPException):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-glanceclient-2.13.1/glanceclient/tests/unit/v2/test_images.py 
new/python-glanceclient-2.16.0/glanceclient/tests/unit/v2/test_images.py
--- old/python-glanceclient-2.13.1/glanceclient/tests/unit/v2/test_images.py    
2018-12-12 04:53:59.000000000 +0100
+++ new/python-glanceclient-2.16.0/glanceclient/tests/unit/v2/test_images.py    
2019-03-08 01:26:17.000000000 +0100
@@ -26,6 +26,10 @@
 _CHKSUM = '93264c3edf5972c9f1cb309543d38a5c'
 _CHKSUM1 = '54264c3edf5972c9f1cb309453d38a46'
 
+_HASHVAL = '54264c3edf93264c3edf5972c9f1cb309543d38a5c5972c9f1cb309453d38a46'
+_HASHVAL1 = 'cb309543d38a5c5972c9f1cb309453d38a4654264c3edf93264c3edf5972c9f1'
+_HASHBAD = '93264c3edf597254264c3edf5972c9f1cb309453d38a46c9f1cb309543d38a5c'
+
 _TAG1 = 'power'
 _TAG2 = '64bit'
 
@@ -457,6 +461,41 @@
             {'images': []},
         ),
     },
+    '/v2/images?limit=%d&os_hash_value=%s' % (images.DEFAULT_PAGE_SIZE,
+                                              _HASHVAL): {
+        'GET': (
+            {},
+            {'images': [
+                {
+                    'id': '3a4560a1-e585-443e-9b39-553b46ec92d1',
+                    'name': 'image-1',
+                }
+            ]},
+        ),
+    },
+    '/v2/images?limit=%d&os_hash_value=%s' % (images.DEFAULT_PAGE_SIZE,
+                                              _HASHVAL1): {
+        'GET': (
+            {},
+            {'images': [
+                {
+                    'id': '2a4560b2-e585-443e-9b39-553b46ec92d1',
+                    'name': 'image-1',
+                },
+                {
+                    'id': '6f99bf80-2ee6-47cf-acfe-1f1fabb7e810',
+                    'name': 'image-2',
+                },
+            ]},
+        ),
+    },
+    '/v2/images?limit=%d&os_hash_value=%s' % (images.DEFAULT_PAGE_SIZE,
+                                              _HASHBAD): {
+        'GET': (
+            {},
+            {'images': []},
+        ),
+    },
     '/v2/images?limit=%d&tag=%s' % (images.DEFAULT_PAGE_SIZE, _TAG1): {
         'GET': (
             {},
@@ -754,6 +793,27 @@
         images = self.controller.list(**filters)
         self.assertEqual(0, len(images))
 
+    def test_list_images_for_hash_single_image(self):
+        fake_id = '3a4560a1-e585-443e-9b39-553b46ec92d1'
+        filters = {'filters': {'os_hash_value': _HASHVAL}}
+        images = self.controller.list(**filters)
+        self.assertEqual(1, len(images))
+        self.assertEqual('%s' % fake_id, images[0].id)
+
+    def test_list_images_for_hash_multiple_images(self):
+        fake_id1 = '2a4560b2-e585-443e-9b39-553b46ec92d1'
+        fake_id2 = '6f99bf80-2ee6-47cf-acfe-1f1fabb7e810'
+        filters = {'filters': {'os_hash_value': _HASHVAL1}}
+        images = self.controller.list(**filters)
+        self.assertEqual(2, len(images))
+        self.assertEqual('%s' % fake_id1, images[0].id)
+        self.assertEqual('%s' % fake_id2, images[1].id)
+
+    def test_list_images_for_wrong_hash(self):
+        filters = {'filters': {'os_hash_value': _HASHBAD}}
+        images = self.controller.list(**filters)
+        self.assertEqual(0, len(images))
+
     def test_list_images_for_bogus_owner(self):
         filters = {'filters': {'owner': _BOGUS_ID}}
         images = self.controller.list(**filters)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-glanceclient-2.13.1/glanceclient/tests/unit/v2/test_shell_v2.py 
new/python-glanceclient-2.16.0/glanceclient/tests/unit/v2/test_shell_v2.py
--- old/python-glanceclient-2.13.1/glanceclient/tests/unit/v2/test_shell_v2.py  
2018-12-12 04:54:05.000000000 +0100
+++ new/python-glanceclient-2.16.0/glanceclient/tests/unit/v2/test_shell_v2.py  
2019-03-08 01:26:21.000000000 +0100
@@ -264,6 +264,8 @@
             'sort_dir': ['desc', 'asc'],
             'sort': None,
             'verbose': False,
+            'include_stores': False,
+            'os_hash_value': None,
             'os_hidden': False
         }
         args = self._make_args(input)
@@ -286,6 +288,86 @@
                                                 filters=exp_img_filters)
             utils.print_list.assert_called_once_with({}, ['ID', 'Name'])
 
+    def test_do_image_list_verbose(self):
+        input = {
+            'limit': None,
+            'page_size': 18,
+            'visibility': True,
+            'member_status': 'Fake',
+            'owner': 'test',
+            'checksum': 'fake_checksum',
+            'tag': 'fake tag',
+            'properties': [],
+            'sort_key': ['name', 'id'],
+            'sort_dir': ['desc', 'asc'],
+            'sort': None,
+            'verbose': True,
+            'include_stores': False,
+            'os_hash_value': None,
+            'os_hidden': False
+        }
+        args = self._make_args(input)
+        with mock.patch.object(self.gc.images, 'list') as mocked_list:
+            mocked_list.return_value = {}
+
+            test_shell.do_image_list(self.gc, args)
+            utils.print_list.assert_called_once_with(
+                {}, ['ID', 'Name', 'Disk_format', 'Container_format',
+                     'Size', 'Status', 'Owner'])
+
+    def test_do_image_list_with_include_stores_true(self):
+        input = {
+            'limit': None,
+            'page_size': 18,
+            'visibility': True,
+            'member_status': 'Fake',
+            'owner': 'test',
+            'checksum': 'fake_checksum',
+            'tag': 'fake tag',
+            'properties': [],
+            'sort_key': ['name', 'id'],
+            'sort_dir': ['desc', 'asc'],
+            'sort': None,
+            'verbose': False,
+            'include_stores': True,
+            'os_hash_value': None,
+            'os_hidden': False
+        }
+        args = self._make_args(input)
+        with mock.patch.object(self.gc.images, 'list') as mocked_list:
+            mocked_list.return_value = {}
+
+            test_shell.do_image_list(self.gc, args)
+            utils.print_list.assert_called_once_with(
+                {}, ['ID', 'Name', 'Stores'])
+
+    def test_do_image_list_verbose_with_include_stores_true(self):
+        input = {
+            'limit': None,
+            'page_size': 18,
+            'visibility': True,
+            'member_status': 'Fake',
+            'owner': 'test',
+            'checksum': 'fake_checksum',
+            'tag': 'fake tag',
+            'properties': [],
+            'sort_key': ['name', 'id'],
+            'sort_dir': ['desc', 'asc'],
+            'sort': None,
+            'verbose': True,
+            'include_stores': True,
+            'os_hash_value': None,
+            'os_hidden': False
+        }
+        args = self._make_args(input)
+        with mock.patch.object(self.gc.images, 'list') as mocked_list:
+            mocked_list.return_value = {}
+
+            test_shell.do_image_list(self.gc, args)
+            utils.print_list.assert_called_once_with(
+                {}, ['ID', 'Name', 'Disk_format', 'Container_format',
+                     'Size', 'Status', 'Owner', 'Stores'])
+
     def test_do_image_list_with_hidden_true(self):
         input = {
             'limit': None,
@@ -300,6 +382,8 @@
             'sort_dir': ['desc', 'asc'],
             'sort': None,
             'verbose': False,
+            'include_stores': False,
+            'os_hash_value': None,
             'os_hidden': True
         }
         args = self._make_args(input)
@@ -336,6 +420,8 @@
             'sort_dir': ['desc'],
             'sort': None,
             'verbose': False,
+            'include_stores': False,
+            'os_hash_value': None,
             'os_hidden': False
         }
         args = self._make_args(input)
@@ -372,6 +458,8 @@
             'sort_key': [],
             'sort_dir': [],
             'verbose': False,
+            'include_stores': False,
+            'os_hash_value': None,
             'os_hidden': False
         }
         args = self._make_args(input)
@@ -408,6 +496,8 @@
             'sort_dir': ['desc'],
             'sort': None,
             'verbose': False,
+            'include_stores': False,
+            'os_hash_value': None,
             'os_hidden': False
         }
         args = self._make_args(input)
@@ -1428,18 +1518,25 @@
 
     def test_do_location_add(self):
         gc = self.gc
-        loc = {'url': 'http://foo.com/', 'metadata': {'foo': 'bar'}}
-        args = self._make_args({'id': 'pass',
-                                'url': loc['url'],
-                                'metadata': json.dumps(loc['metadata'])})
+        loc = {'url': 'http://foo.com/',
+               'metadata': {'foo': 'bar'},
+               'validation_data': {'checksum': 'csum',
+                                   'os_hash_algo': 'algo',
+                                   'os_hash_value': 'value'}}
+        args = {'id': 'pass',
+                'url': loc['url'],
+                'metadata': json.dumps(loc['metadata']),
+                'checksum': 'csum',
+                'hash_algo': 'algo',
+                'hash_value': 'value'}
         with mock.patch.object(gc.images, 'add_location') as mocked_addloc:
             expect_image = {'id': 'pass', 'locations': [loc]}
             mocked_addloc.return_value = expect_image
 
-            test_shell.do_location_add(self.gc, args)
-            mocked_addloc.assert_called_once_with('pass',
-                                                  loc['url'],
-                                                  loc['metadata'])
+            test_shell.do_location_add(self.gc, self._make_args(args))
+            mocked_addloc.assert_called_once_with(
+                'pass', loc['url'], loc['metadata'],
+                validation_data=loc['validation_data'])
             utils.print_dict.assert_called_once_with(expect_image)
 
     def test_do_location_delete(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-glanceclient-2.13.1/glanceclient/v2/images.py 
new/python-glanceclient-2.16.0/glanceclient/v2/images.py
--- old/python-glanceclient-2.13.1/glanceclient/v2/images.py    2018-12-12 
04:53:59.000000000 +0100
+++ new/python-glanceclient-2.16.0/glanceclient/v2/images.py    2019-03-08 
01:26:21.000000000 +0100
@@ -432,7 +432,7 @@
                                             data=json.dumps(patch_body))
         return (resp, body), resp
 
-    def add_location(self, image_id, url, metadata):
+    def add_location(self, image_id, url, metadata, validation_data=None):
         """Add a new location entry to an image's list of locations.
 
         It is an error to add a URL that is already present in the list of
@@ -441,10 +441,13 @@
         :param image_id: ID of image to which the location is to be added.
         :param url: URL of the location to add.
         :param metadata: Metadata associated with the location.
+        :param validation_data: Validation data for the image.
         :returns: The updated image
         """
         add_patch = [{'op': 'add', 'path': '/locations/-',
                       'value': {'url': url, 'metadata': metadata}}]
+        if validation_data:
+            add_patch[0]['value']['validation_data'] = validation_data
         response = self._send_image_update_request(image_id, add_patch)
         # Get request id from the above update request and pass the same to
         # following get request
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-glanceclient-2.13.1/glanceclient/v2/shell.py 
new/python-glanceclient-2.16.0/glanceclient/v2/shell.py
--- old/python-glanceclient-2.13.1/glanceclient/v2/shell.py     2018-12-12 
04:54:05.000000000 +0100
+++ new/python-glanceclient-2.16.0/glanceclient/v2/shell.py     2019-03-08 
01:26:21.000000000 +0100
@@ -327,6 +327,9 @@
            action='append', dest='properties', default=[])
 @utils.arg('--checksum', metavar='<CHECKSUM>',
            help=_('Displays images that match the MD5 checksum.'))
+@utils.arg('--hash', dest='os_hash_value', default=None,
+           metavar='<HASH_VALUE>',
+           help=_('Displays images that match the specified hash value.'))
 @utils.arg('--tag', metavar='<TAG>', action='append',
            help=_("Filter images by a user-defined tag."))
 @utils.arg('--sort-key', default=[], action='append',
@@ -348,10 +351,17 @@
            const=True,
            nargs='?',
            help="Filters results by hidden status. Default=None.")
+@utils.arg('--include-stores',
+           metavar='[True|False]',
+           default=None,
+           type=strutils.bool_from_string,
+           const=True,
+           nargs='?',
+           help="Print backend store id.")
 def do_image_list(gc, args):
     """List images you can access."""
     filter_keys = ['visibility', 'member_status', 'owner', 'checksum', 'tag',
-                   'os_hidden']
+                   'os_hidden', 'os_hash_value']
     filter_items = [(key, getattr(args, key)) for key in filter_keys]
 
     if args.properties:
@@ -384,6 +394,9 @@
         columns += ['Disk_format', 'Container_format', 'Size', 'Status',
                     'Owner']
 
+    if args.include_stores:
+        columns += ['Stores']
+
     images = gc.images.list(**kwargs)
     utils.print_list(images, columns)
 
@@ -737,16 +750,30 @@
 @utils.arg('--metadata', metavar='<STRING>', default='{}',
            help=_('Metadata associated with the location. '
                   'Must be a valid JSON object (default: %(default)s)'))
+@utils.arg('--checksum', metavar='<STRING>',
+           help=_('md5 checksum of image contents'))
+@utils.arg('--hash-algo', metavar='<STRING>',
+           help=_('Multihash algorithm'))
+@utils.arg('--hash-value', metavar='<STRING>',
+           help=_('Multihash value'))
 @utils.arg('id', metavar='<IMAGE_ID>',
            help=_('ID of image to which the location is to be added.'))
 def do_location_add(gc, args):
     """Add a location (and related metadata) to an image."""
+    validation_data = {}
+    if args.checksum:
+        validation_data['checksum'] = args.checksum
+    if args.hash_algo:
+        validation_data['os_hash_algo'] = args.hash_algo
+    if args.hash_value:
+        validation_data['os_hash_value'] = args.hash_value
     try:
         metadata = json.loads(args.metadata)
     except ValueError:
         utils.exit('Metadata is not a valid JSON object.')
     else:
-        image = gc.images.add_location(args.id, args.url, metadata)
+        image = gc.images.add_location(args.id, args.url, metadata,
+                                       validation_data=validation_data)
         utils.print_dict(image)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-glanceclient-2.13.1/python_glanceclient.egg-info/PKG-INFO 
new/python-glanceclient-2.16.0/python_glanceclient.egg-info/PKG-INFO
--- old/python-glanceclient-2.13.1/python_glanceclient.egg-info/PKG-INFO        
2018-12-12 04:56:32.000000000 +0100
+++ new/python-glanceclient-2.16.0/python_glanceclient.egg-info/PKG-INFO        
2019-03-08 01:28:04.000000000 +0100
@@ -1,10 +1,10 @@
 Metadata-Version: 1.1
 Name: python-glanceclient
-Version: 2.13.1
+Version: 2.16.0
 Summary: OpenStack Image API Client Library
 Home-page: https://docs.openstack.org/python-glanceclient/latest/
 Author: OpenStack
-Author-email: openstack-...@lists.openstack.org
+Author-email: openstack-disc...@lists.openstack.org
 License: Apache License, Version 2.0
 Description: ========================
         Team and repository tags
@@ -16,8 +16,7 @@
                   OpenStack Images API:
                   "project:official",
                   "stable:follows-policy",
-                  "vulnerability:managed",
-                  "team:diverse-affiliation".
+                  "vulnerability:managed".
                   Follow the link for an explanation of these tags.
         .. NOTE(rosmaita): the alt text above will have to be updated when
            additional tags are asserted for python-glanceclient.  (The SVG in 
the
@@ -35,9 +34,9 @@
         
         This is a client library for Glance built on the OpenStack Images API. 
It provides a Python API (the ``glanceclient`` module) and a command-line tool 
(``glance``). This library fully supports the v1 Images API, while support for 
the v2 API is in progress.
         
-        Development takes place via the usual OpenStack processes as outlined 
in the `developer guide 
<http://docs.openstack.org/infra/manual/developers.html>`_.  The master 
repository is in `Git 
<https://git.openstack.org/cgit/openstack/python-glanceclient>`_.
+        Development takes place via the usual OpenStack processes as outlined 
in the `developer guide 
<https://docs.openstack.org/infra/manual/developers.html>`_.  The master 
repository is in `Git 
<https://git.openstack.org/cgit/openstack/python-glanceclient>`_.
         
-        See release notes and more at 
`<http://docs.openstack.org/python-glanceclient/>`_.
+        See release notes and more at 
`<https://docs.openstack.org/python-glanceclient/latest/>`_.
         
         * License: Apache License, Version 2.0
         * `PyPi`_ - package installation
@@ -73,3 +72,4 @@
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-glanceclient-2.13.1/python_glanceclient.egg-info/SOURCES.txt 
new/python-glanceclient-2.16.0/python_glanceclient.egg-info/SOURCES.txt
--- old/python-glanceclient-2.13.1/python_glanceclient.egg-info/SOURCES.txt     
2018-12-12 04:56:32.000000000 +0100
+++ new/python-glanceclient-2.16.0/python_glanceclient.egg-info/SOURCES.txt     
2019-03-08 01:28:04.000000000 +0100
@@ -114,19 +114,21 @@
 python_glanceclient.egg-info/requires.txt
 python_glanceclient.egg-info/top_level.txt
 releasenotes/notes/.placeholder
+releasenotes/notes/2.16.0_Release-43ebe06b74a272ba.yaml
 releasenotes/notes/bp-use-keystoneauth-e12f300e58577b13.yaml
 releasenotes/notes/headers-encoding-bug-rocky-889ccd885a9cc4e8.yaml
-releasenotes/notes/headers-encoding-bug-rocky-part-deux-a58a7c0feaa6f27e.yaml
 releasenotes/notes/hidden-images-support-9e2277ad62bf0d31.yaml
 releasenotes/notes/http-headers-per-rfc-8187-aafa3199f863be81.yaml
 releasenotes/notes/log-request-id-e7f67a23a0ed5c7b.yaml
 releasenotes/notes/multi-store-support-acc7ad0e7e8b6f99.yaml
 releasenotes/notes/multihash-download-verification-596e91bf7b68e7db.yaml
+releasenotes/notes/multihash-filter-ef2a48dc48fae9dc.yaml
 releasenotes/notes/multihash-support-f1474590cf3ef5cf.yaml
 releasenotes/notes/pike-relnote-2c77b01aa8799f35.yaml
 releasenotes/notes/return-request-id-to-caller-47f4c0a684b1d88e.yaml
 releasenotes/notes/rm-deprecate-ssl-opts-c88225a4ba2285ad.yaml
 releasenotes/notes/rocky-2.11.0-ba936fd5e969198d.yaml
+releasenotes/notes/validation-data-support-dfb2463914818cd2.yaml
 releasenotes/source/conf.py
 releasenotes/source/earlier.rst
 releasenotes/source/index.rst
@@ -135,6 +137,7 @@
 releasenotes/source/ocata.rst
 releasenotes/source/pike.rst
 releasenotes/source/queens.rst
+releasenotes/source/rocky.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-glanceclient-2.13.1/python_glanceclient.egg-info/pbr.json 
new/python-glanceclient-2.16.0/python_glanceclient.egg-info/pbr.json
--- old/python-glanceclient-2.13.1/python_glanceclient.egg-info/pbr.json        
2018-12-12 04:56:32.000000000 +0100
+++ new/python-glanceclient-2.16.0/python_glanceclient.egg-info/pbr.json        
2019-03-08 01:28:04.000000000 +0100
@@ -1 +1 @@
-{"git_version": "e0673a1", "is_release": true}
\ No newline at end of file
+{"git_version": "44a4dbd", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-glanceclient-2.13.1/releasenotes/notes/2.16.0_Release-43ebe06b74a272ba.yaml
 
new/python-glanceclient-2.16.0/releasenotes/notes/2.16.0_Release-43ebe06b74a272ba.yaml
--- 
old/python-glanceclient-2.13.1/releasenotes/notes/2.16.0_Release-43ebe06b74a272ba.yaml
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-glanceclient-2.16.0/releasenotes/notes/2.16.0_Release-43ebe06b74a272ba.yaml
      2019-03-08 01:26:21.000000000 +0100
@@ -0,0 +1,12 @@
+---
+prelude: >
+  This version of python-glanceclient adds Python 3.6 classifier and gating
+  on Python 3.7 environment.
+fixes:
+  - |
+    * Bug 1788271_: Add image-list filter for multihash
+    * Bug 1598714_: Remove redundant information from error message
+
+    .. _1788271: https://code.launchpad.net/bugs/1788271
+    .. _1598714: https://code.launchpad.net/bugs/1598714
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-glanceclient-2.13.1/releasenotes/notes/headers-encoding-bug-rocky-part-deux-a58a7c0feaa6f27e.yaml
 
new/python-glanceclient-2.16.0/releasenotes/notes/headers-encoding-bug-rocky-part-deux-a58a7c0feaa6f27e.yaml
--- 
old/python-glanceclient-2.13.1/releasenotes/notes/headers-encoding-bug-rocky-part-deux-a58a7c0feaa6f27e.yaml
        2018-12-12 04:54:05.000000000 +0100
+++ 
new/python-glanceclient-2.16.0/releasenotes/notes/headers-encoding-bug-rocky-part-deux-a58a7c0feaa6f27e.yaml
        1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
----
-fixes:
-  - |
-    The announcement that `Bug 1783290
-    <https://code.launchpad.net/bugs/1783290>`_ was fixed in the previous
-    release was premature.  That bug has been more thoroughly fixed in
-    this release.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-glanceclient-2.13.1/releasenotes/notes/multihash-filter-ef2a48dc48fae9dc.yaml
 
new/python-glanceclient-2.16.0/releasenotes/notes/multihash-filter-ef2a48dc48fae9dc.yaml
--- 
old/python-glanceclient-2.13.1/releasenotes/notes/multihash-filter-ef2a48dc48fae9dc.yaml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-glanceclient-2.16.0/releasenotes/notes/multihash-filter-ef2a48dc48fae9dc.yaml
    2019-03-08 01:26:17.000000000 +0100
@@ -0,0 +1,13 @@
+---
+features:
+  - |
+    For parity with the old ``checksum`` field, this release adds the
+    ability for CLI users to filter the image list based upon a particular
+    multihash value using the ``--hash <HASH_VALUE>`` option.  Issue the
+    command:
+
+    .. code-block:: none
+
+        glance help image-list
+
+    for more information.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-glanceclient-2.13.1/releasenotes/notes/validation-data-support-dfb2463914818cd2.yaml
 
new/python-glanceclient-2.16.0/releasenotes/notes/validation-data-support-dfb2463914818cd2.yaml
--- 
old/python-glanceclient-2.13.1/releasenotes/notes/validation-data-support-dfb2463914818cd2.yaml
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-glanceclient-2.16.0/releasenotes/notes/validation-data-support-dfb2463914818cd2.yaml
     2019-03-08 01:26:21.000000000 +0100
@@ -0,0 +1,12 @@
+---
+features:
+  - |
+    Support for embedding validation data (checksum and multihash) when adding
+    a location to an image. Requires the Stein release server-side.
+
+    The ``glance.images.add_location()`` method now accepts an optional
+    argument ``validation_data``, in the form of a dictionary containing
+    ``checksum``, ``os_hash_algo`` and ``os_hash_value``.
+
+    The ``location-add`` command now accepts optional arguments ``--checksum``,
+    ``--hash-algo`` and ``--hash-value``.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-glanceclient-2.13.1/releasenotes/source/index.rst 
new/python-glanceclient-2.16.0/releasenotes/source/index.rst
--- old/python-glanceclient-2.13.1/releasenotes/source/index.rst        
2018-12-12 04:54:05.000000000 +0100
+++ new/python-glanceclient-2.16.0/releasenotes/source/index.rst        
2019-03-08 01:26:17.000000000 +0100
@@ -6,6 +6,7 @@
    :maxdepth: 1
 
    unreleased
+   rocky
    queens
    pike
    ocata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-glanceclient-2.13.1/releasenotes/source/rocky.rst 
new/python-glanceclient-2.16.0/releasenotes/source/rocky.rst
--- old/python-glanceclient-2.13.1/releasenotes/source/rocky.rst        
1970-01-01 01:00:00.000000000 +0100
+++ new/python-glanceclient-2.16.0/releasenotes/source/rocky.rst        
2019-03-08 01:26:17.000000000 +0100
@@ -0,0 +1,6 @@
+===================================
+ Rocky Series Release Notes
+===================================
+
+.. release-notes::
+   :branch: stable/rocky
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-glanceclient-2.13.1/setup.cfg 
new/python-glanceclient-2.16.0/setup.cfg
--- old/python-glanceclient-2.13.1/setup.cfg    2018-12-12 04:56:32.000000000 
+0100
+++ new/python-glanceclient-2.16.0/setup.cfg    2019-03-08 01:28:04.000000000 
+0100
@@ -5,7 +5,7 @@
        README.rst
 license = Apache License, Version 2.0
 author = OpenStack
-author-email = openstack-...@lists.openstack.org
+author-email = openstack-disc...@lists.openstack.org
 home-page = https://docs.openstack.org/python-glanceclient/latest/
 classifier = 
        Development Status :: 5 - Production/Stable
@@ -20,6 +20,7 @@
        Programming Language :: Python :: 2.7
        Programming Language :: Python :: 3
        Programming Language :: Python :: 3.5
+       Programming Language :: Python :: 3.6
 
 [files]
 packages = 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-glanceclient-2.13.1/tox.ini 
new/python-glanceclient-2.16.0/tox.ini
--- old/python-glanceclient-2.13.1/tox.ini      2018-12-12 04:54:05.000000000 
+0100
+++ new/python-glanceclient-2.16.0/tox.ini      2019-03-08 01:26:17.000000000 
+0100
@@ -1,6 +1,6 @@
 [tox]
 envlist = py35,py27,pep8
-minversion = 1.6
+minversion = 2.0
 skipsdist = True
 
 [testenv]
@@ -11,7 +11,7 @@
          OS_STDERR_NOCAPTURE=False
 
 deps =
-       
-c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/rocky}
+       
-c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt}
        -r{toxinidir}/requirements.txt
        -r{toxinidir}/test-requirements.txt
 commands = stestr run --slowest {posargs}


Reply via email to