Merge "Fix location update"
This commit is contained in:
@@ -1100,8 +1100,6 @@ class TestController(testtools.TestCase):
|
|||||||
loc_map = dict([(l['url'], l) for l in orig_locations])
|
loc_map = dict([(l['url'], l) for l in orig_locations])
|
||||||
loc_map[new_loc['url']] = new_loc
|
loc_map[new_loc['url']] = new_loc
|
||||||
mod_patch = [{'path': '/locations', 'op': 'replace',
|
mod_patch = [{'path': '/locations', 'op': 'replace',
|
||||||
'value': []},
|
|
||||||
{'path': '/locations', 'op': 'replace',
|
|
||||||
'value': list(loc_map.values())}]
|
'value': list(loc_map.values())}]
|
||||||
self.controller.update_location(image_id, **new_loc)
|
self.controller.update_location(image_id, **new_loc)
|
||||||
self.assertEqual(self.api.calls, [
|
self.assertEqual(self.api.calls, [
|
||||||
|
@@ -348,20 +348,17 @@ class Controller(object):
|
|||||||
image = self._get_image_with_locations_or_fail(image_id)
|
image = self._get_image_with_locations_or_fail(image_id)
|
||||||
url_map = dict([(l['url'], l) for l in image.locations])
|
url_map = dict([(l['url'], l) for l in image.locations])
|
||||||
if url not in url_map:
|
if url not in url_map:
|
||||||
raise exc.HTTPNotFound('Unknown URL: %s' % url)
|
raise exc.HTTPNotFound('Unknown URL: %s, the URL must be one of'
|
||||||
|
' existing locations of current image' %
|
||||||
|
url)
|
||||||
|
|
||||||
if url_map[url]['metadata'] == metadata:
|
if url_map[url]['metadata'] == metadata:
|
||||||
return image
|
return image
|
||||||
|
|
||||||
# NOTE: The server (as of now) doesn't support modifying individual
|
|
||||||
# location entries. So we must:
|
|
||||||
# 1. Empty existing list of locations.
|
|
||||||
# 2. Send another request to set 'locations' to the new list
|
|
||||||
# of locations.
|
|
||||||
url_map[url]['metadata'] = metadata
|
url_map[url]['metadata'] = metadata
|
||||||
patches = [{'op': 'replace',
|
patches = [{'op': 'replace',
|
||||||
'path': '/locations',
|
'path': '/locations',
|
||||||
'value': p} for p in ([], list(url_map.values()))]
|
'value': list(url_map.values())}]
|
||||||
self._send_image_update_request(image_id, patches)
|
self._send_image_update_request(image_id, patches)
|
||||||
|
|
||||||
return self.get(image_id)
|
return self.get(image_id)
|
||||||
|
@@ -430,6 +430,10 @@ def do_location_update(gc, args):
|
|||||||
"""Update metadata of an image's location."""
|
"""Update metadata of an image's location."""
|
||||||
try:
|
try:
|
||||||
metadata = json.loads(args.metadata)
|
metadata = json.loads(args.metadata)
|
||||||
|
|
||||||
|
if metadata == {}:
|
||||||
|
print("WARNING -- The location's metadata will be updated to "
|
||||||
|
"an empty JSON object.")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
utils.exit('Metadata is not a valid JSON object.')
|
utils.exit('Metadata is not a valid JSON object.')
|
||||||
else:
|
else:
|
||||||
|
Reference in New Issue
Block a user