summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTING.rst4
-rw-r--r--HACKING.rst2
-rw-r--r--README.rst10
-rw-r--r--doc/source/cli/details.rst19
-rw-r--r--doc/source/cli/property-keys.rst2
-rw-r--r--doc/source/conf.py2
-rw-r--r--glanceclient/common/http.py8
-rw-r--r--glanceclient/common/https.py86
-rw-r--r--glanceclient/shell.py9
-rw-r--r--glanceclient/tests/functional/test_readonly_glance.py9
-rw-r--r--glanceclient/v2/metadefs.py95
-rw-r--r--requirements.txt2
-rw-r--r--setup.cfg2
-rw-r--r--test-requirements.txt4
14 files changed, 78 insertions, 176 deletions
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index 35564c5..b5c7c42 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -1,13 +1,13 @@
If you would like to contribute to the development of OpenStack,
you must follow the steps documented at:
- http://docs.openstack.org/infra/manual/developers.html#development-workflow
+ https://docs.openstack.org/infra/manual/developers.html#development-workflow
Once those steps have been completed, changes to OpenStack
should be submitted for review via the Gerrit tool, following
the workflow documented at:
- http://docs.openstack.org/infra/manual/developers.html#development-workflow
+ https://docs.openstack.org/infra/manual/developers.html#development-workflow
Pull requests submitted through GitHub will be ignored.
diff --git a/HACKING.rst b/HACKING.rst
index fa8a64a..16b4a18 100644
--- a/HACKING.rst
+++ b/HACKING.rst
@@ -2,7 +2,7 @@ Glance Style Commandments
=========================
- Step 1: Read the OpenStack Style Commandments
- http://docs.openstack.org/developer/hacking/
+ https://docs.openstack.org/hacking/latest/
- Step 2: Read on
diff --git a/README.rst b/README.rst
index e43a00a..a438d6d 100644
--- a/README.rst
+++ b/README.rst
@@ -2,8 +2,8 @@
Team and repository tags
========================
-.. image:: http://governance.openstack.org/badges/python-glanceclient.svg
- :target: http://governance.openstack.org/reference/tags/index.html
+.. image:: https://governance.openstack.org/tc/badges/python-glanceclient.svg
+ :target: https://governance.openstack.org/tc/reference/tags/index.html
:alt: The following tags have been asserted for Python bindings to the
OpenStack Images API:
"project:official",
@@ -46,11 +46,11 @@ See release notes and more at `<http://docs.openstack.org/python-glanceclient/>`
* `How to Contribute`_
.. _PyPi: https://pypi.python.org/pypi/python-glanceclient
-.. _Online Documentation: http://docs.openstack.org/python-glanceclient
+.. _Online Documentation: https://docs.openstack.org/python-glanceclient/latest/
.. _Launchpad project: https://launchpad.net/python-glanceclient
.. _Blueprints: https://blueprints.launchpad.net/python-glanceclient
.. _Bugs: https://bugs.launchpad.net/python-glanceclient
.. _Source: https://git.openstack.org/cgit/openstack/python-glanceclient
-.. _How to Contribute: http://docs.openstack.org/infra/manual/developers.html
-.. _Specs: http://specs.openstack.org/openstack/glance-specs/
+.. _How to Contribute: https://docs.openstack.org/infra/manual/developers.html
+.. _Specs: https://specs.openstack.org/openstack/glance-specs/
diff --git a/doc/source/cli/details.rst b/doc/source/cli/details.rst
index f303c09..400c1ed 100644
--- a/doc/source/cli/details.rst
+++ b/doc/source/cli/details.rst
@@ -20,7 +20,7 @@ glance usage
.. code-block:: console
- usage: glance [--version] [-d] [-v] [--get-schema] [--no-ssl-compression] [-f]
+ usage: glance [--version] [-d] [-v] [--get-schema] [-f]
[--os-image-url OS_IMAGE_URL]
[--os-image-api-version OS_IMAGE_API_VERSION]
[--profile HMAC_KEY] [--key-file OS_KEY] [--ca-file OS_CACERT]
@@ -64,11 +64,6 @@ glance optional arguments
that generates portions of the help text. Ignored with
API version 1.
-``--no-ssl-compression``
- **DEPRECATED!** This option is deprecated and not used
- anymore. SSL compression should be disabled by default
- by the system SSL library.
-
``-f, --force``
Prevent select actions from requesting user
confirmation.
@@ -174,7 +169,7 @@ Create a new image.
``--architecture <ARCHITECTURE>``
Operating system architecture as specified in
- http://docs.openstack.org/user-guide/common/cli-manage-images.html
+ https://docs.openstack.org/glance/latest/user/common-image-properties.html#architecture
``--protected [True|False]``
If true, image will not be deletable.
@@ -213,7 +208,7 @@ Create a new image.
Common name of operating system distribution as
specified
in
- http://docs.openstack.org/user-guide/common/cli-manage-images.html
+ https://docs.openstack.org/glance/latest/user/common-image-properties.html#os-distro
``--id <ID>``
An identifier for the image
@@ -468,7 +463,7 @@ Update an existing image.
``--architecture <ARCHITECTURE>``
Operating system architecture as specified in
- http://docs.openstack.org/user-guide/common/cli-manage-images.html
+ https://docs.openstack.org/glance/latest/user/common-image-properties.html#architecture
``--protected [True|False]``
If true, image will not be deletable.
@@ -504,7 +499,7 @@ Update an existing image.
Common name of operating system distribution as
specified
in
- http://docs.openstack.org/user-guide/common/cli-manage-images.html
+ https://docs.openstack.org/glance/latest/user/common-image-properties.html#os-distro
``--owner <OWNER>``
Owner of the image
@@ -1182,8 +1177,8 @@ Associate resource type with a metadata definitions namespace.
``--name <NAME>``
Resource type names should be aligned with Heat
- resource types whenever possible: http://docs.openstac
- k.org/developer/heat/template_guide/openstack.html
+ resource types whenever possible:
+ https://docs.openstack.org/heat/latest/template_guide/openstack.html
``--properties-target <PROPERTIES_TARGET>``
Some resource types allow more than one key / value
diff --git a/doc/source/cli/property-keys.rst b/doc/source/cli/property-keys.rst
index 7996bc7..2763357 100644
--- a/doc/source/cli/property-keys.rst
+++ b/doc/source/cli/property-keys.rst
@@ -15,7 +15,7 @@ For example:
Behavior set using image properties overrides behavior set using flavors.
For more information, refer to the `Manage images
- <https://docs.openstack.org/admin-guide/common/cli-manage-images.html>`_
+ <https://docs.openstack.org/glance/latest/admin/manage-images.html>`_
in the OpenStack Administrator Guide.
.. list-table:: Image service property keys
diff --git a/doc/source/conf.py b/doc/source/conf.py
index 574b931..98ab8c9 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -83,6 +83,6 @@ html_last_updated_fmt = '%Y-%m-%d %H:%M'
# Grouping the document tree for man pages.
# List of tuples 'sourcefile', 'target', u'title', u'Authors name', 'manual'
man_pages = [
- ('man/glance', 'glance', u'Client for OpenStack Images API',
+ ('cli/glance', 'glance', u'Client for OpenStack Images API',
[u'OpenStack Foundation'], 1),
]
diff --git a/glanceclient/common/http.py b/glanceclient/common/http.py
index 35ef282..fc635ff 100644
--- a/glanceclient/common/http.py
+++ b/glanceclient/common/http.py
@@ -24,7 +24,6 @@ from oslo_utils import importutils
from oslo_utils import netutils
import requests
import six
-import warnings
try:
import json
@@ -146,13 +145,6 @@ class HTTPClient(_BaseHTTPClient):
self.timeout = float(kwargs.get('timeout', 600))
if self.endpoint.startswith("https"):
- compression = kwargs.get('ssl_compression', True)
-
- if compression is False:
- # Note: This is not seen by default. (python must be
- # run with -Wd)
- warnings.warn('The "ssl_compression" argument has been '
- 'deprecated.', DeprecationWarning)
if kwargs.get('insecure', False) is True:
self.session.verify = False
diff --git a/glanceclient/common/https.py b/glanceclient/common/https.py
index 36015e5..deb7eb0 100644
--- a/glanceclient/common/https.py
+++ b/glanceclient/common/https.py
@@ -18,17 +18,8 @@ import ssl
import struct
import OpenSSL
-from requests import adapters
-from requests import compat
-try:
- from requests.packages.urllib3 import connectionpool
- from requests.packages.urllib3 import poolmanager
-except ImportError:
- from urllib3 import connectionpool
- from urllib3 import poolmanager
-from oslo_utils import encodeutils
import six
# NOTE(jokke): simplified transition to py3, behaves like py2 xrange
from six.moves import range
@@ -135,83 +126,6 @@ def to_bytes(s):
return s
-class HTTPSAdapter(adapters.HTTPAdapter):
- """This adapter will be used just when ssl compression should be disabled.
-
- The init method overwrites the default https pool by setting
- glanceclient's one.
- """
- def __init__(self, *args, **kwargs):
- classes_by_scheme = poolmanager.pool_classes_by_scheme
- classes_by_scheme["glance+https"] = HTTPSConnectionPool
- super(HTTPSAdapter, self).__init__(*args, **kwargs)
-
- def request_url(self, request, proxies):
- # NOTE(flaper87): Make sure the url is encoded, otherwise
- # python's standard httplib will fail with a TypeError.
- url = super(HTTPSAdapter, self).request_url(request, proxies)
- if six.PY2:
- url = encodeutils.safe_encode(url)
- return url
-
- def _create_glance_httpsconnectionpool(self, url):
- kw = self.poolmanager.connection_pool_kw
- # Parse the url to get the scheme, host, and port
- parsed = compat.urlparse(url)
- # If there is no port specified, we should use the standard HTTPS port
- port = parsed.port or 443
- host = parsed.netloc.rsplit(':', 1)[0]
- pool = HTTPSConnectionPool(host, port, **kw)
-
- with self.poolmanager.pools.lock:
- self.poolmanager.pools[(parsed.scheme, host, port)] = pool
-
- return pool
-
- def get_connection(self, url, proxies=None):
- try:
- return super(HTTPSAdapter, self).get_connection(url, proxies)
- except KeyError:
- # NOTE(sigamvirus24): This works around modifying a module global
- # which fixes bug #1396550
- # The scheme is most likely glance+https but check anyway
- if not url.startswith('glance+https://'):
- raise
-
- return self._create_glance_httpsconnectionpool(url)
-
- def cert_verify(self, conn, url, verify, cert):
- super(HTTPSAdapter, self).cert_verify(conn, url, verify, cert)
- conn.ca_certs = verify[0]
- conn.insecure = verify[1]
-
-
-class HTTPSConnectionPool(connectionpool.HTTPSConnectionPool):
- """A replacement for the default HTTPSConnectionPool.
-
- HTTPSConnectionPool will be instantiated when a new
- connection is requested to the HTTPSAdapter. This
- implementation overwrites the _new_conn method and
- returns an instances of glanceclient's VerifiedHTTPSConnection
- which handles no compression.
-
- ssl_compression is hard-coded to False because this will
- be used just when the user sets --no-ssl-compression.
- """
-
- scheme = 'glance+https'
-
- def _new_conn(self):
- self.num_connections += 1
- return VerifiedHTTPSConnection(host=self.host,
- port=self.port,
- key_file=self.key_file,
- cert_file=self.cert_file,
- cacert=self.ca_certs,
- insecure=self.insecure,
- ssl_compression=False)
-
-
class OpenSSLConnectionDelegator(object):
"""An OpenSSL.SSL.Connection delegator.
diff --git a/glanceclient/shell.py b/glanceclient/shell.py
index 5aaaf39..55862cf 100644
--- a/glanceclient/shell.py
+++ b/glanceclient/shell.py
@@ -155,14 +155,6 @@ class OpenStackImagesShell(object):
'of schema that generates portions of the '
'help text. Ignored with API version 1.')
- parser.add_argument('--no-ssl-compression',
- dest='ssl_compression',
- default=True, action='store_false',
- help='DEPRECATED! This option is deprecated '
- 'and not used anymore. SSL compression '
- 'should be disabled by default by the '
- 'system SSL library.')
-
parser.add_argument('-f', '--force',
dest='force',
default=False, action='store_true',
@@ -434,7 +426,6 @@ class OpenStackImagesShell(object):
'cacert': args.os_cacert,
'cert': args.os_cert,
'key': args.os_key,
- 'ssl_compression': args.ssl_compression
}
else:
ks_session = loading.load_session_from_argparse_arguments(args)
diff --git a/glanceclient/tests/functional/test_readonly_glance.py b/glanceclient/tests/functional/test_readonly_glance.py
index 822bbcc..ccd49d6 100644
--- a/glanceclient/tests/functional/test_readonly_glance.py
+++ b/glanceclient/tests/functional/test_readonly_glance.py
@@ -109,12 +109,3 @@ class SimpleReadOnlyGlanceClientTest(base.ClientTestBase):
def test_debug_list(self):
self.glance('--os-image-api-version 2 image-list', flags='--debug')
-
- def test_no_ssl_compression(self):
- # Test deprecating this hasn't broken anything
- out = self.glance('--os-image-api-version 1 '
- '--no-ssl-compression image-list')
- endpoints = self.parser.listing(out)
- self.assertTableStruct(endpoints, [
- 'ID', 'Name', 'Disk Format', 'Container Format',
- 'Size', 'Status'])
diff --git a/glanceclient/v2/metadefs.py b/glanceclient/v2/metadefs.py
index 8cfe222..a6df87a 100644
--- a/glanceclient/v2/metadefs.py
+++ b/glanceclient/v2/metadefs.py
@@ -72,7 +72,8 @@ class NamespaceController(object):
if elem in namespace:
del namespace[elem]
- url = '/v2/metadefs/namespaces/{0}'.format(namespace_name)
+ url = '/v2/metadefs/namespaces/%(namespace)s' % {
+ 'namespace': namespace_name}
# Pass the original wrapped value to http client.
resp, _ = self.http_client.put(url, data=namespace.wrapped)
# Get request id from `put` request so it can be passed to the
@@ -92,7 +93,8 @@ class NamespaceController(object):
if kwargs:
query_params = '?%s' % query_params
- url = '/v2/metadefs/namespaces/{0}{1}'.format(namespace, query_params)
+ url = '/v2/metadefs/namespaces/%(namespace)s%(query_params)s' % {
+ 'namespace': namespace, 'query_params': query_params}
header = header or {}
resp, body = self.http_client.get(url, headers=header)
# NOTE(bcwaldon): remove 'self' for now until we have an elegant
@@ -188,7 +190,8 @@ class NamespaceController(object):
@utils.add_req_id_to_object()
def delete(self, namespace):
"""Delete a namespace."""
- url = '/v2/metadefs/namespaces/{0}'.format(namespace)
+ url = '/v2/metadefs/namespaces/%(namespace)s' % {
+ 'namespace': namespace}
resp, body = self.http_client.delete(url)
return (resp, body), resp
@@ -212,8 +215,8 @@ class ResourceTypeController(object):
except (warlock.InvalidOperation, ValueError) as e:
raise TypeError(encodeutils.exception_to_unicode(e))
- url = '/v2/metadefs/namespaces/{0}/resource_types'.format(namespace,
- res_type)
+ url = '/v2/metadefs/namespaces/%(namespace)s/resource_types' % {
+ 'namespace': namespace}
resp, body = self.http_client.post(url, data=res_type)
body.pop('self', None)
return self.model(**body), resp
@@ -221,8 +224,9 @@ class ResourceTypeController(object):
@utils.add_req_id_to_object()
def deassociate(self, namespace, resource):
"""Deassociate a resource type with a namespace."""
- url = '/v2/metadefs/namespaces/{0}/resource_types/{1}'. \
- format(namespace, resource)
+ url = ('/v2/metadefs/namespaces/%(namespace)s/'
+ 'resource_types/%(resource)s') % {
+ 'namespace': namespace, 'resource': resource}
resp, body = self.http_client.delete(url)
return (resp, body), resp
@@ -240,7 +244,8 @@ class ResourceTypeController(object):
@utils.add_req_id_to_generator()
def get(self, namespace):
- url = '/v2/metadefs/namespaces/{0}/resource_types'.format(namespace)
+ url = '/v2/metadefs/namespaces/%(namespace)s/resource_types' % {
+ 'namespace': namespace}
resp, body = self.http_client.get(url)
body.pop('self', None)
for resource_type in body['resource_type_associations']:
@@ -270,8 +275,8 @@ class PropertyController(object):
except (warlock.InvalidOperation, ValueError) as e:
raise TypeError(encodeutils.exception_to_unicode(e))
- url = '/v2/metadefs/namespaces/{0}/properties'.format(namespace)
-
+ url = '/v2/metadefs/namespaces/%(namespace)s/properties' % {
+ 'namespace': namespace}
resp, body = self.http_client.post(url, data=prop)
body.pop('self', None)
return self.model(**body), resp
@@ -290,8 +295,9 @@ class PropertyController(object):
except warlock.InvalidOperation as e:
raise TypeError(encodeutils.exception_to_unicode(e))
- url = '/v2/metadefs/namespaces/{0}/properties/{1}'.format(namespace,
- prop_name)
+ url = ('/v2/metadefs/namespaces/%(namespace)s/'
+ 'properties/%(prop_name)s') % {
+ 'namespace': namespace, 'prop_name': prop_name}
# Pass the original wrapped value to http client.
resp, _ = self.http_client.put(url, data=prop.wrapped)
# Get request id from `put` request so it can be passed to the
@@ -306,8 +312,9 @@ class PropertyController(object):
@utils.add_req_id_to_object()
def _get(self, namespace, prop_name, header=None):
- url = '/v2/metadefs/namespaces/{0}/properties/{1}'.format(namespace,
- prop_name)
+ url = ('/v2/metadefs/namespaces/%(namespace)s/'
+ 'properties/%(prop_name)s') % {
+ 'namespace': namespace, 'prop_name': prop_name}
header = header or {}
resp, body = self.http_client.get(url, headers=header)
body.pop('self', None)
@@ -320,7 +327,8 @@ class PropertyController(object):
:returns: generator over list of objects
"""
- url = '/v2/metadefs/namespaces/{0}/properties'.format(namespace)
+ url = '/v2/metadefs/namespaces/%(namespace)s/properties' % {
+ 'namespace': namespace}
resp, body = self.http_client.get(url)
@@ -331,15 +339,17 @@ class PropertyController(object):
@utils.add_req_id_to_object()
def delete(self, namespace, prop_name):
"""Delete a property."""
- url = '/v2/metadefs/namespaces/{0}/properties/{1}'.format(namespace,
- prop_name)
+ url = ('/v2/metadefs/namespaces/%(namespace)s/'
+ 'properties/%(prop_name)s') % {
+ 'namespace': namespace, 'prop_name': prop_name}
resp, body = self.http_client.delete(url)
return (resp, body), resp
@utils.add_req_id_to_object()
def delete_all(self, namespace):
"""Delete all properties in a namespace."""
- url = '/v2/metadefs/namespaces/{0}/properties'.format(namespace)
+ url = '/v2/metadefs/namespaces/%(namespace)s/properties' % {
+ 'namespace': namespace}
resp, body = self.http_client.delete(url)
return (resp, body), resp
@@ -367,7 +377,8 @@ class ObjectController(object):
except (warlock.InvalidOperation, ValueError) as e:
raise TypeError(encodeutils.exception_to_unicode(e))
- url = '/v2/metadefs/namespaces/{0}/objects'.format(namespace)
+ url = '/v2/metadefs/namespaces/%(namespace)s/objects' % {
+ 'namespace': namespace}
resp, body = self.http_client.post(url, data=obj)
body.pop('self', None)
@@ -393,8 +404,9 @@ class ObjectController(object):
if elem in obj:
del obj[elem]
- url = '/v2/metadefs/namespaces/{0}/objects/{1}'.format(namespace,
- object_name)
+ url = ('/v2/metadefs/namespaces/%(namespace)s/'
+ 'objects/%(object_name)s') % {
+ 'namespace': namespace, 'object_name': object_name}
# Pass the original wrapped value to http client.
resp, _ = self.http_client.put(url, data=obj.wrapped)
# Get request id from `put` request so it can be passed to the
@@ -409,8 +421,9 @@ class ObjectController(object):
@utils.add_req_id_to_object()
def _get(self, namespace, object_name, header=None):
- url = '/v2/metadefs/namespaces/{0}/objects/{1}'.format(namespace,
- object_name)
+ url = ('/v2/metadefs/namespaces/%(namespace)s/'
+ 'objects/%(object_name)s') % {
+ 'namespace': namespace, 'object_name': object_name}
header = header or {}
resp, body = self.http_client.get(url, headers=header)
body.pop('self', None)
@@ -422,7 +435,8 @@ class ObjectController(object):
:returns: generator over list of objects
"""
- url = '/v2/metadefs/namespaces/{0}/objects'.format(namespace,)
+ url = '/v2/metadefs/namespaces/%(namespace)s/objects' % {
+ 'namespace': namespace}
resp, body = self.http_client.get(url)
for obj in body['objects']:
@@ -431,15 +445,17 @@ class ObjectController(object):
@utils.add_req_id_to_object()
def delete(self, namespace, object_name):
"""Delete an object."""
- url = '/v2/metadefs/namespaces/{0}/objects/{1}'.format(namespace,
- object_name)
+ url = ('/v2/metadefs/namespaces/%(namespace)s/'
+ 'objects/%(object_name)s') % {
+ 'namespace': namespace, 'object_name': object_name}
resp, body = self.http_client.delete(url)
return (resp, body), resp
@utils.add_req_id_to_object()
def delete_all(self, namespace):
"""Delete all objects in a namespace."""
- url = '/v2/metadefs/namespaces/{0}/objects'.format(namespace)
+ url = '/v2/metadefs/namespaces/%(namespace)s/objects' % {
+ 'namespace': namespace}
resp, body = self.http_client.delete(url)
return (resp, body), resp
@@ -463,8 +479,8 @@ class TagController(object):
:param tag_name: The name of the new tag to create.
"""
- url = ('/v2/metadefs/namespaces/{0}/tags/{1}'.format(namespace,
- tag_name))
+ url = '/v2/metadefs/namespaces/%(namespace)s/tags/%(tag_name)s' % {
+ 'namespace': namespace, 'tag_name': tag_name}
resp, body = self.http_client.post(url)
body.pop('self', None)
@@ -488,7 +504,8 @@ class TagController(object):
raise TypeError(encodeutils.exception_to_unicode(e))
tags = {'tags': md_tag_list}
- url = '/v2/metadefs/namespaces/{0}/tags'.format(namespace)
+ url = '/v2/metadefs/namespaces/%(namespace)s/tags' % {
+ 'namespace': namespace}
resp, body = self.http_client.post(url, data=tags)
body.pop('self', None)
@@ -515,8 +532,8 @@ class TagController(object):
if elem in tag:
del tag[elem]
- url = '/v2/metadefs/namespaces/{0}/tags/{1}'.format(namespace,
- tag_name)
+ url = '/v2/metadefs/namespaces/%(namespace)s/tags/%(tag_name)s' % {
+ 'namespace': namespace, 'tag_name': tag_name}
# Pass the original wrapped value to http client.
resp, _ = self.http_client.put(url, data=tag.wrapped)
# Get request id from `put` request so it can be passed to the
@@ -531,8 +548,8 @@ class TagController(object):
@utils.add_req_id_to_object()
def _get(self, namespace, tag_name, header=None):
- url = '/v2/metadefs/namespaces/{0}/tags/{1}'.format(namespace,
- tag_name)
+ url = '/v2/metadefs/namespaces/%(namespace)s/tags/%(tag_name)s' % {
+ 'namespace': namespace, 'tag_name': tag_name}
header = header or {}
resp, body = self.http_client.get(url, headers=header)
body.pop('self', None)
@@ -544,7 +561,8 @@ class TagController(object):
:returns: generator over list of tags.
"""
- url = '/v2/metadefs/namespaces/{0}/tags'.format(namespace)
+ url = '/v2/metadefs/namespaces/%(namespace)s/tags' % {
+ 'namespace': namespace}
resp, body = self.http_client.get(url)
for tag in body['tags']:
@@ -553,14 +571,15 @@ class TagController(object):
@utils.add_req_id_to_object()
def delete(self, namespace, tag_name):
"""Delete a tag."""
- url = '/v2/metadefs/namespaces/{0}/tags/{1}'.format(namespace,
- tag_name)
+ url = '/v2/metadefs/namespaces/%(namespace)s/tags/%(tag_name)s' % {
+ 'namespace': namespace, 'tag_name': tag_name}
resp, body = self.http_client.delete(url)
return (resp, body), resp
@utils.add_req_id_to_object()
def delete_all(self, namespace):
"""Delete all tags in a namespace."""
- url = '/v2/metadefs/namespaces/{0}/tags'.format(namespace)
+ url = '/v2/metadefs/namespaces/%(namespace)s/tags' % {
+ 'namespace': namespace}
resp, body = self.http_client.delete(url)
return (resp, body), resp
diff --git a/requirements.txt b/requirements.txt
index 0bd7356..ca2a418 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,7 +4,7 @@
pbr!=2.1.0,>=2.0.0 # Apache-2.0
Babel!=2.4.0,>=2.3.4 # BSD
PrettyTable<0.8,>=0.7.1 # BSD
-keystoneauth1>=2.21.0 # Apache-2.0
+keystoneauth1>=3.0.1 # Apache-2.0
requests>=2.14.2 # Apache-2.0
warlock!=1.3.0,<2,>=1.0.1 # Apache-2.0
six>=1.9.0 # MIT
diff --git a/setup.cfg b/setup.cfg
index 7699cab..8cf087e 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -6,7 +6,7 @@ description-file =
license = Apache License, Version 2.0
author = OpenStack
author-email = openstack-dev@lists.openstack.org
-home-page = http://docs.openstack.org/developer/python-glanceclient
+home-page = https://docs.openstack.org/python-glanceclient/latest/
classifier =
Development Status :: 5 - Production/Stable
Environment :: Console
diff --git a/test-requirements.txt b/test-requirements.txt
index 2400b32..2c9bfb4 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -6,7 +6,7 @@ hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
coverage!=4.4,>=4.0 # Apache-2.0
mock>=2.0 # BSD
ordereddict # MIT
-os-client-config>=1.27.0 # Apache-2.0
+os-client-config>=1.28.0 # Apache-2.0
openstackdocstheme>=1.11.0 # Apache-2.0
reno!=2.3.1,>=1.8.0 # Apache-2.0
sphinx>=1.6.2 # BSD
@@ -15,4 +15,4 @@ testtools>=1.4.0 # MIT
testscenarios>=0.4 # Apache-2.0/BSD
fixtures>=3.0.0 # Apache-2.0/BSD
requests-mock>=1.1 # Apache-2.0
-tempest>=14.0.0 # Apache-2.0
+tempest>=16.1.0 # Apache-2.0