Create a method to format urls

There have been some issues with formatting URLs, so before
tackling those issues, I wanted to generalize the formatting.

Change-Id: I78f9aca63e508b38b95514b65cb9bf76374651fb
This commit is contained in:
TerryHowe
2015-04-15 11:10:30 -06:00
parent 57206ee5f2
commit 6094636e00
10 changed files with 31 additions and 52 deletions

View File

@@ -38,7 +38,7 @@ class ServerIP(resource.Resource):
@classmethod
def list(cls, session, path_args=None, **params):
url = cls.base_path % path_args
url = cls._get_url(path_args)
resp = session.get(url, service=cls.service, params=params)
ray = []
for network_label, addresses in six.iteritems(resp.body['addresses']):

View File

@@ -14,7 +14,6 @@ import six
from openstack.compute import compute_service
from openstack import resource
from openstack import utils
class ServerMeta(resource.Resource):
@@ -40,8 +39,7 @@ class ServerMeta(resource.Resource):
@classmethod
def create_by_id(cls, session, attrs, resource_id=None, path_args=None):
url = cls.base_path % path_args
url = utils.urljoin(url, resource_id)
url = cls._get_url(path_args, resource_id)
body = {cls.resource_key: {attrs['key']: attrs['value']}}
resp = session.put(url, service=cls.service, json=body).body
return {'key': resource_id,
@@ -50,8 +48,7 @@ class ServerMeta(resource.Resource):
@classmethod
def get_data_by_id(cls, session, resource_id, path_args=None,
include_headers=False):
url = cls.base_path % path_args
url = utils.urljoin(url, resource_id)
url = cls._get_url(path_args, resource_id)
resp = session.get(url, service=cls.service).body
return {'key': resource_id,
'value': resp[cls.resource_key][resource_id]}
@@ -62,8 +59,7 @@ class ServerMeta(resource.Resource):
@classmethod
def delete_by_id(cls, session, resource_id, path_args=None):
url = cls.base_path % path_args
url = utils.urljoin(url, resource_id)
url = cls._get_url(path_args, resource_id)
session.delete(url, service=cls.service, accept=None)
@classmethod

View File

@@ -34,7 +34,7 @@ class ServerMetadata(resource.Resource):
no_id = attrs.copy()
no_id.pop('server_id')
body = {"metadata": no_id}
url = cls.base_path % path_args
url = cls._get_url(path_args)
resp = session.put(url, service=cls.service, json=body).body
attrs = resp["metadata"].copy()
attrs['server_id'] = resource_id
@@ -43,7 +43,7 @@ class ServerMetadata(resource.Resource):
@classmethod
def get_data_by_id(cls, session, resource_id, path_args=None,
include_headers=False):
url = cls.base_path % path_args
url = cls._get_url(path_args)
resp = session.get(url, service=cls.service).body
return resp[cls.resource_key]

View File

@@ -48,7 +48,7 @@ class User(resource.Resource):
@classmethod
def create_by_id(cls, session, attrs, r_id=None, path_args=None):
url = cls.base_path % path_args
url = cls._get_url(path_args)
# Create expects an array of users
body = {'users': [attrs]}
resp = session.post(url, service=cls.service, json=body).body

View File

@@ -13,7 +13,6 @@
from openstack.image import image_service
from openstack.image.v2 import image
from openstack import resource
from openstack import utils
class Tag(resource.Resource):
@@ -37,8 +36,7 @@ class Tag(resource.Resource):
:return: ``None``
"""
url = utils.urljoin(self.base_path %
{"image": self.image.id}, tag)
url = self._get_url({"image": self.image.id}, tag)
session.put(url, service=self.service, accept=None)
def delete(self, session, tag):
@@ -50,6 +48,5 @@ class Tag(resource.Resource):
:return: ``None``
"""
url = utils.urljoin(self.base_path %
{"image": self.image.id}, tag)
url = self._get_url({"image": self.image.id}, tag)
session.delete(url, service=self.service, accept=None)

View File

@@ -13,7 +13,6 @@
from openstack.object_store import object_store_service
from openstack import resource
from openstack import utils
class Container(resource.Resource):
@@ -113,7 +112,7 @@ class Container(resource.Resource):
:return: A ``dict`` representing the response headers.
"""
url = utils.urljoin(cls.base_path, resource_id)
url = cls._get_url(None, resource_id)
headers = attrs.get(resource.HEADERS, dict())
return session.post(url, service=cls.service, accept=None,
headers=headers).headers
@@ -131,7 +130,7 @@ class Container(resource.Resource):
:return: A ``dict`` representing the response headers.
"""
url = utils.urljoin(cls.base_path, resource_id)
url = cls._get_url(None, resource_id)
headers = attrs.get(resource.HEADERS, dict())
return session.put(url, service=cls.service, accept=None,
headers=headers).headers

View File

@@ -481,6 +481,16 @@ class Resource(collections.MutableMapping):
return converted
@classmethod
def _get_url(cls, path_args=None, resource_id=None):
if path_args:
url = cls.base_path % path_args
else:
url = cls.base_path
if resource_id is not None:
url = utils.urljoin(url, resource_id)
return url
@classmethod
def create_by_id(cls, session, attrs, resource_id=None, path_args=None):
"""Create a remote resource from its attributes.
@@ -511,15 +521,11 @@ class Resource(collections.MutableMapping):
else:
body = attrs
if path_args:
url = cls.base_path % path_args
else:
url = cls.base_path
url = cls._get_url(path_args, resource_id)
args = {'json': body}
if headers:
args[HEADERS] = headers
if resource_id:
url = utils.urljoin(url, resource_id)
resp = session.put(url, service=cls.service, **args).body
else:
resp = session.post(url, service=cls.service, **args).body
@@ -567,11 +573,7 @@ class Resource(collections.MutableMapping):
if not cls.allow_retrieve:
raise exceptions.MethodNotSupported(cls, 'retrieve')
if path_args:
url = cls.base_path % path_args
else:
url = cls.base_path
url = utils.urljoin(url, resource_id)
url = cls._get_url(path_args, resource_id)
response = session.get(url, service=cls.service)
body = response.body
@@ -643,11 +645,7 @@ class Resource(collections.MutableMapping):
if not cls.allow_head:
raise exceptions.MethodNotSupported(cls, 'head')
if path_args:
url = cls.base_path % path_args
else:
url = cls.base_path
url = utils.urljoin(url, resource_id)
url = cls._get_url(path_args, resource_id)
data = session.head(url, service=cls.service, accept=None).headers
@@ -719,11 +717,7 @@ class Resource(collections.MutableMapping):
else:
body = attrs
if path_args:
url = cls.base_path % path_args
else:
url = cls.base_path
url = utils.urljoin(url, resource_id)
url = cls._get_url(path_args, resource_id)
args = {'json': body}
if headers:
args[HEADERS] = headers
@@ -782,11 +776,7 @@ class Resource(collections.MutableMapping):
if not cls.allow_delete:
raise exceptions.MethodNotSupported(cls, 'delete')
if path_args:
url = cls.base_path % path_args
else:
url = cls.base_path
url = utils.urljoin(url, resource_id)
url = cls._get_url(path_args, resource_id)
session.delete(url, service=cls.service, accept=None)
def delete(self, session):
@@ -897,10 +887,7 @@ class Resource(collections.MutableMapping):
if marker:
filters['marker'] = marker
if path_args:
url = cls.base_path % path_args
else:
url = cls.base_path
url = cls._get_url(path_args)
if filters:
url = '%s?%s' % (url, url_parse.urlencode(filters))

View File

@@ -35,7 +35,7 @@ class AlarmChange(resource.Resource):
@classmethod
def list(cls, session, path_args=None, **params):
url = cls.base_path % path_args
url = cls._get_url(path_args)
resp = session.get(url, service=cls.service, params=params)
changes = []

View File

@@ -38,7 +38,7 @@ class Sample(resource.Resource):
@classmethod
def list(cls, session, path_args=None, **params):
url = cls.base_path % path_args
url = cls._get_url(path_args)
resp = session.get(url, service=cls.service, params=params)
changes = []
@@ -47,7 +47,7 @@ class Sample(resource.Resource):
return changes
def create(self, session):
url = self.base_path % {'meter': self.meter}
url = self._get_url(self)
# telemetry expects a list of samples
resp = session.post(url, service=self.service, json=[self._attrs])

View File

@@ -44,7 +44,7 @@ class Statistics(resource.Resource):
@classmethod
def list(cls, session, path_args=None, **params):
url = cls.base_path % path_args
url = cls._get_url(path_args)
resp = session.get(url, service=cls.service, params=params)
stats = []
for stat in resp.body: