Pass path into full_url and base_url

This change mirrors what was done prior to flask and leans on the
base_url and full_url functions to append '/v3' and the path or
collection_name. This will allow for changes to wrap_member and
wrap_collection to properly handle local-only wrapping (no need
to cross-api call wrap because a "role" is returned from the "trust"
api).

Change-Id: I5376d8abc581994f28da64f3b578a04b00e68c4d
Partial-Bug: #1776504
This commit is contained in:
Morgan Fainberg 2018-08-07 09:41:13 -07:00
parent 637990bf71
commit 13897ef69b
3 changed files with 11 additions and 9 deletions

View File

@ -58,7 +58,7 @@ class OSRevokeResource(flask_restful.Resource):
response = {'events': [event.to_dict() for event in events],
'links': {
'next': None,
'self': '%s/v3/OS-REVOKE/events' % ks_flask.base_url(),
'self': ks_flask.base_url(path='/OS-REVOKE/events'),
'previous': None}
}
return response

View File

@ -81,7 +81,7 @@ def _normalize_trust_roles(trust):
trust['roles'] = trust_full_roles
trust['roles_links'] = {
'self': ks_flask.base_url() + '/%s/roles' % trust['id'],
'self': ks_flask.base_url(path='/%s/roles' % trust['id']),
'next': None,
'previous': None}

View File

@ -594,8 +594,8 @@ class ResourceBase(flask_restful.Resource):
container = {cls.collection_key: refs}
pfx = getattr(cls, 'api_prefix', '').lstrip('/')
parts = [p for p in (full_url(), 'v3', pfx, cls.collection_key) if p]
self_url = '/'.join(parts)
path = '/'.join([p for p in (pfx, cls.collection_key) if p])
self_url = full_url(path)
container['links'] = {
'next': None,
'self': self_url,
@ -617,7 +617,7 @@ class ResourceBase(flask_restful.Resource):
if cls.api_prefix:
api_prefix = cls.api_prefix.lstrip('/').rstrip('/')
collection_element = '/'.join([api_prefix, cls.collection_key])
self_link = '/'.join([base_url(), 'v3', collection_element, ref['id']])
self_link = base_url(path='/'.join([collection_element, ref['id']]))
ref.setdefault('links', {})['self'] = self_link
@classmethod
@ -797,7 +797,7 @@ class ResourceBase(flask_restful.Resource):
return arg.replace(':', '_').replace('-', '_')
def base_url():
def base_url(path=''):
url = CONF['public_endpoint']
if url:
@ -819,11 +819,13 @@ def base_url():
# production environment.
url = 'http://localhost:%d' % CONF.eventlet_server.public_port
return url.rstrip('/')
url = url.rstrip('/')
url = '/'.join([p for p in (url, 'v3', path.lstrip('/').rstrip('/')) if p])
return url
def full_url():
subs = {'url': base_url(), 'query_string': ''}
def full_url(path=''):
subs = {'url': base_url(path), 'query_string': ''}
qs = flask.request.environ.get('QUERY_STRING')
if qs:
subs['query_string'] = '?%s' % qs