Merge "Added processing /compute URL"
This commit is contained in:
commit
e7b7407aa7
|
@ -283,30 +283,27 @@ def get_id_from_href(href):
|
|||
return urlparse.urlsplit("%s" % href).path.split('/')[-1]
|
||||
|
||||
|
||||
def remove_version_from_href(href):
|
||||
"""Removes the first api version from the href.
|
||||
def remove_trailing_version_from_href(href):
|
||||
"""Removes the api version from the href.
|
||||
|
||||
Given: 'http://www.nova.com/v1.1/123'
|
||||
Returns: 'http://www.nova.com/123'
|
||||
Given: 'http://www.nova.com/compute/v1.1'
|
||||
Returns: 'http://www.nova.com/compute'
|
||||
|
||||
Given: 'http://www.nova.com/v1.1'
|
||||
Returns: 'http://www.nova.com'
|
||||
|
||||
"""
|
||||
parsed_url = urlparse.urlsplit(href)
|
||||
url_parts = parsed_url.path.split('/', 2)
|
||||
url_parts = parsed_url.path.rsplit('/', 1)
|
||||
|
||||
# NOTE: this should match vX.X or vX
|
||||
expression = re.compile(r'^v([0-9]+|[0-9]+\.[0-9]+)(/.*|$)')
|
||||
if expression.match(url_parts[1]):
|
||||
del url_parts[1]
|
||||
|
||||
new_path = '/'.join(url_parts)
|
||||
|
||||
if new_path == parsed_url.path:
|
||||
if not expression.match(url_parts.pop()):
|
||||
LOG.debug('href %s does not contain version' % href)
|
||||
raise ValueError(_('href %s does not contain version') % href)
|
||||
|
||||
new_path = '/'.join(url_parts)
|
||||
|
||||
parsed_url = list(parsed_url)
|
||||
parsed_url[2] = new_path
|
||||
return urlparse.urlunsplit(parsed_url)
|
||||
|
@ -448,7 +445,7 @@ class ViewBuilder(object):
|
|||
|
||||
def _get_bookmark_link(self, request, identifier, collection_name):
|
||||
"""Create a URL that refers to a specific resource."""
|
||||
base_url = remove_version_from_href(request.application_url)
|
||||
base_url = remove_trailing_version_from_href(request.application_url)
|
||||
base_url = self._update_compute_link_prefix(base_url)
|
||||
return os.path.join(base_url,
|
||||
self._get_project_id(request),
|
||||
|
|
|
@ -285,52 +285,40 @@ class PaginationParamsTest(test.NoDBTestCase):
|
|||
|
||||
class MiscFunctionsTest(test.TestCase):
|
||||
|
||||
def test_remove_major_version_from_href(self):
|
||||
fixture = 'http://www.testsite.com/v1/images'
|
||||
expected = 'http://www.testsite.com/images'
|
||||
actual = common.remove_version_from_href(fixture)
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_remove_version_from_href(self):
|
||||
fixture = 'http://www.testsite.com/v1.1/images'
|
||||
expected = 'http://www.testsite.com/images'
|
||||
actual = common.remove_version_from_href(fixture)
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_remove_version_from_href_2(self):
|
||||
fixture = 'http://www.testsite.com/v1.1/'
|
||||
expected = 'http://www.testsite.com/'
|
||||
actual = common.remove_version_from_href(fixture)
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_remove_version_from_href_3(self):
|
||||
fixture = 'http://www.testsite.com/v10.10'
|
||||
def remove_trailing_version_from_href(self):
|
||||
fixture = 'http://www.testsite.com/v1.1'
|
||||
expected = 'http://www.testsite.com'
|
||||
actual = common.remove_version_from_href(fixture)
|
||||
actual = common.remove_trailing_version_from_href(fixture)
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_remove_version_from_href_4(self):
|
||||
def remove_trailing_version_from_href_2(self):
|
||||
fixture = 'http://www.testsite.com/compute/v1.1'
|
||||
expected = 'http://www.testsite.com/compute'
|
||||
actual = common.remove_trailing_version_from_href(fixture)
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def remove_trailing_version_from_href_3(self):
|
||||
fixture = 'http://www.testsite.com/v1.1/images/v10.5'
|
||||
expected = 'http://www.testsite.com/images/v10.5'
|
||||
actual = common.remove_version_from_href(fixture)
|
||||
expected = 'http://www.testsite.com/v1.1/images'
|
||||
actual = common.remove_trailing_version_from_href(fixture)
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_remove_version_from_href_bad_request(self):
|
||||
fixture = 'http://www.testsite.com/1.1/images'
|
||||
def remove_trailing_version_from_href_bad_request(self):
|
||||
fixture = 'http://www.testsite.com/v1.1/images'
|
||||
self.assertRaises(ValueError,
|
||||
common.remove_version_from_href,
|
||||
common.remove_trailing_version_from_href,
|
||||
fixture)
|
||||
|
||||
def test_remove_version_from_href_bad_request_2(self):
|
||||
fixture = 'http://www.testsite.com/v/images'
|
||||
def remove_trailing_version_from_href_bad_request_2(self):
|
||||
fixture = 'http://www.testsite.com/images/v'
|
||||
self.assertRaises(ValueError,
|
||||
common.remove_version_from_href,
|
||||
common.remove_trailing_version_from_href,
|
||||
fixture)
|
||||
|
||||
def test_remove_version_from_href_bad_request_3(self):
|
||||
def remove_trailing_version_from_href_bad_request_3(self):
|
||||
fixture = 'http://www.testsite.com/v1.1images'
|
||||
self.assertRaises(ValueError,
|
||||
common.remove_version_from_href,
|
||||
common.remove_trailing_version_from_href,
|
||||
fixture)
|
||||
|
||||
def test_get_id_from_href_with_int_url(self):
|
||||
|
|
Loading…
Reference in New Issue