)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"fd765e056209d964651a25effe063b669a6d2200","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add commands for modifying image metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is Cinder Client specific changes for modifying volume"},{"line_number":10,"context_line":"and snapshot\u0027s image metadata."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"- cinder image-metadata volume_id set key\u003dvalue"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"dac4157f_9623bd05","line":9,"updated":"2015-04-20 04:17:23.000000000","message":"These are","commit_id":"596c2d4c040bb9ca1f6747b1681c776b1cc6adf9"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"b4e67e1ca280d031152b297f11e6123c170e2b93","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add commands for modifying image metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is Cinder Client specific changes for modifying volume"},{"line_number":10,"context_line":"and snapshot\u0027s image metadata."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"- cinder image-metadata volume_id set key\u003dvalue"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bab921fb_0a83fdcd","line":9,"in_reply_to":"dac4157f_9623bd05","updated":"2015-04-23 01:52:01.000000000","message":"Done","commit_id":"596c2d4c040bb9ca1f6747b1681c776b1cc6adf9"}],"cinderclient/tests/unit/v2/test_shell.py":[{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"27b4abacfb25f423bf1e8af8e5877a329f4403e1","unresolved":false,"context_lines":[{"line_number":903,"context_line":"                           body\u003dexpected)"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"    def test_image_metadata_delete_dict(self):"},{"line_number":906,"context_line":"        self.run_command(\u0027image-metadata 1234 unset key1\u003dval1\u0027)"},{"line_number":907,"context_line":"        expected \u003d {\"os-del_image_metadata\": {\"key\": \"key1\"}}"},{"line_number":908,"context_line":"        self.assert_called(\u0027POST\u0027, \u0027/volumes/1234/action\u0027,"},{"line_number":909,"context_line":"                           body\u003dexpected)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa32b979_84c5860b","line":906,"updated":"2015-06-26 12:15:50.000000000","message":"This is interesting. Should unsetting a key when its provided with a value (implying a desire to set the value, not delete it) actually generate an error? That seems like an error case.","commit_id":"ad8f32810a38d9e05e8a29e23a8450d40aaa9a29"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"8a1faf558c5c687c9801aacb357afd797375c182","unresolved":false,"context_lines":[{"line_number":903,"context_line":"                           body\u003dexpected)"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"    def test_image_metadata_delete_dict(self):"},{"line_number":906,"context_line":"        self.run_command(\u0027image-metadata 1234 unset key1\u003dval1\u0027)"},{"line_number":907,"context_line":"        expected \u003d {\"os-del_image_metadata\": {\"key\": \"key1\"}}"},{"line_number":908,"context_line":"        self.assert_called(\u0027POST\u0027, \u0027/volumes/1234/action\u0027,"},{"line_number":909,"context_line":"                           body\u003dexpected)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_cd5e5c45","line":906,"in_reply_to":"ba3cc151_80e4b60d","updated":"2015-06-29 15:31:09.000000000","message":"Done","commit_id":"ad8f32810a38d9e05e8a29e23a8450d40aaa9a29"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2c98af0887642857a3a244e782e45268bcf0cd4e","unresolved":false,"context_lines":[{"line_number":903,"context_line":"                           body\u003dexpected)"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"    def test_image_metadata_delete_dict(self):"},{"line_number":906,"context_line":"        self.run_command(\u0027image-metadata 1234 unset key1\u003dval1\u0027)"},{"line_number":907,"context_line":"        expected \u003d {\"os-del_image_metadata\": {\"key\": \"key1\"}}"},{"line_number":908,"context_line":"        self.assert_called(\u0027POST\u0027, \u0027/volumes/1234/action\u0027,"},{"line_number":909,"context_line":"                           body\u003dexpected)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_80e4b60d","line":906,"in_reply_to":"fa32b979_58ae8182","updated":"2015-06-28 20:41:44.000000000","message":"If you do an update, please remove the value. It is harmless. Most of the commands have the help text \"For unset, specify only the key\", but if one is specified it will be parsed ok and just ignored.\n\nThat said, I would prefer our unit tests show correct usage, so it would be better to not show a value being passed here.","commit_id":"ad8f32810a38d9e05e8a29e23a8450d40aaa9a29"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"65db4d02909b26f2f947c3ab6363f6eb0caf7efe","unresolved":false,"context_lines":[{"line_number":903,"context_line":"                           body\u003dexpected)"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"    def test_image_metadata_delete_dict(self):"},{"line_number":906,"context_line":"        self.run_command(\u0027image-metadata 1234 unset key1\u003dval1\u0027)"},{"line_number":907,"context_line":"        expected \u003d {\"os-del_image_metadata\": {\"key\": \"key1\"}}"},{"line_number":908,"context_line":"        self.assert_called(\u0027POST\u0027, \u0027/volumes/1234/action\u0027,"},{"line_number":909,"context_line":"                           body\u003dexpected)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa32b979_58ae8182","line":906,"in_reply_to":"fa32b979_84c5860b","updated":"2015-06-26 13:44:54.000000000","message":"@Peter, I am following a existing pattern, see L447 for example. I am not object to change this but not want this break something in case this is intentional.","commit_id":"ad8f32810a38d9e05e8a29e23a8450d40aaa9a29"}],"cinderclient/v2/shell.py":[{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"0c1310f3b5b4e61e1a428db68b48989b9f47a19f","unresolved":false,"context_lines":[{"line_number":509,"context_line":"           choices\u003d[\u0027set\u0027, \u0027unset\u0027],"},{"line_number":510,"context_line":"           help\u003d\"The action. Valid values are \u0027set\u0027 or \u0027unset.\u0027\")"},{"line_number":511,"context_line":"@utils.arg(\u0027metadata\u0027,"},{"line_number":512,"context_line":"           metavar\u003d\u0027\u003ckey\u003dvalue\u003e\u0027,"},{"line_number":513,"context_line":"           nargs\u003d\u0027+\u0027,"},{"line_number":514,"context_line":"           default\u003d[],"},{"line_number":515,"context_line":"           help\u003d\u0027Metadata key and value pair to set or unset. \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_0c36aee7","line":512,"updated":"2015-01-22 14:32:27.000000000","message":"Since the value is optional should this instead be something like the following?\n\n    metavar\u003d\u0027\u003ckey[\u003dvalue]\u003e\u0027\n\nI also found this review that is related to how the metadata is specified:\n\nhttps://review.openstack.org/#/c/94301/","commit_id":"ab7be04c9791c2542d125ca2340ea0f41c91f3e6"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"855a00e9da4a3eb0e77a6b128508932576774992","unresolved":false,"context_lines":[{"line_number":509,"context_line":"           choices\u003d[\u0027set\u0027, \u0027unset\u0027],"},{"line_number":510,"context_line":"           help\u003d\"The action. Valid values are \u0027set\u0027 or \u0027unset.\u0027\")"},{"line_number":511,"context_line":"@utils.arg(\u0027metadata\u0027,"},{"line_number":512,"context_line":"           metavar\u003d\u0027\u003ckey\u003dvalue\u003e\u0027,"},{"line_number":513,"context_line":"           nargs\u003d\u0027+\u0027,"},{"line_number":514,"context_line":"           default\u003d[],"},{"line_number":515,"context_line":"           help\u003d\u0027Metadata key and value pair to set or unset. \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_d35fc3e3","line":512,"in_reply_to":"1a930d6b_0c36aee7","updated":"2015-01-23 09:48:25.000000000","message":"Done","commit_id":"ab7be04c9791c2542d125ca2340ea0f41c91f3e6"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"7bdda54164f5e48c0e71bc3edcd2075f2f44be32","unresolved":false,"context_lines":[{"line_number":509,"context_line":"           choices\u003d[\u0027set\u0027, \u0027unset\u0027],"},{"line_number":510,"context_line":"           help\u003d\"The action. Valid values are \u0027set\u0027 or \u0027unset.\u0027\")"},{"line_number":511,"context_line":"@utils.arg(\u0027metadata\u0027,"},{"line_number":512,"context_line":"           metavar\u003d\u0027\u003ckey[\u003dvalue]\u003e\u0027,"},{"line_number":513,"context_line":"           nargs\u003d\u0027+\u0027,"},{"line_number":514,"context_line":"           default\u003d[],"},{"line_number":515,"context_line":"           help\u003d\u0027Metadata key and value pair to set or unset. \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_bb5b8c20","line":512,"updated":"2015-02-12 15:02:58.000000000","message":"Probably this line brakes client help. Try \"cinder image-metadata\" or \"cinder help image-metadata\" to see the issue I\u0027ve encountered.","commit_id":"86398f14e3755e78775e660434e5d079acaa486a"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"cf18519cb4af8874a4409e1843b760e2fb6d5dbb","unresolved":false,"context_lines":[{"line_number":509,"context_line":"           choices\u003d[\u0027set\u0027, \u0027unset\u0027],"},{"line_number":510,"context_line":"           help\u003d\"The action. Valid values are \u0027set\u0027 or \u0027unset.\u0027\")"},{"line_number":511,"context_line":"@utils.arg(\u0027metadata\u0027,"},{"line_number":512,"context_line":"           metavar\u003d\u0027\u003ckey[\u003dvalue]\u003e\u0027,"},{"line_number":513,"context_line":"           nargs\u003d\u0027+\u0027,"},{"line_number":514,"context_line":"           default\u003d[],"},{"line_number":515,"context_line":"           help\u003d\u0027Metadata key and value pair to set or unset. \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_65abba89","line":512,"in_reply_to":"da86d52c_bb5b8c20","updated":"2015-03-01 04:54:50.000000000","message":"Thanks Michal, reverted to previous version","commit_id":"86398f14e3755e78775e660434e5d079acaa486a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f0dab2c61fd775c846f96654a92f86925639200f","unresolved":false,"context_lines":[{"line_number":532,"context_line":"    if args.action \u003d\u003d \u0027set\u0027:"},{"line_number":533,"context_line":"        cs.volumes.set_image_metadata(volume, metadata)"},{"line_number":534,"context_line":"    elif args.action \u003d\u003d \u0027unset\u0027:"},{"line_number":535,"context_line":"        cs.volumes.delete_image_metadata(volume, sorted(metadata.keys(),"},{"line_number":536,"context_line":"                                         reverse\u003dTrue))"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_595678d3","line":535,"updated":"2015-03-25 09:44:29.000000000","message":"Why are we sorting keys here? Is it done only for test purposes? If so we should sort only in tests or use assertItemsEqual.","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"56644e72200c7410b5ef7f06c7d058b6d48ae062","unresolved":false,"context_lines":[{"line_number":532,"context_line":"    if args.action \u003d\u003d \u0027set\u0027:"},{"line_number":533,"context_line":"        cs.volumes.set_image_metadata(volume, metadata)"},{"line_number":534,"context_line":"    elif args.action \u003d\u003d \u0027unset\u0027:"},{"line_number":535,"context_line":"        cs.volumes.delete_image_metadata(volume, sorted(metadata.keys(),"},{"line_number":536,"context_line":"                                         reverse\u003dTrue))"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_435616cf","line":535,"in_reply_to":"1a6ced46_595678d3","updated":"2015-04-09 05:53:17.000000000","message":"I saw this comment in the following code, so I think this maybe intentional, will check it later.\n\nhttps://github.com/openstack/python-cinderclient/blob/master/cinderclient/v2/shell.py#L521","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"05a4e1a3e721b8e8f9480e76149865fc9e78ec8c","unresolved":false,"context_lines":[{"line_number":532,"context_line":"    if args.action \u003d\u003d \u0027set\u0027:"},{"line_number":533,"context_line":"        cs.volumes.set_image_metadata(volume, metadata)"},{"line_number":534,"context_line":"    elif args.action \u003d\u003d \u0027unset\u0027:"},{"line_number":535,"context_line":"        cs.volumes.delete_image_metadata(volume, sorted(metadata.keys(),"},{"line_number":536,"context_line":"                                         reverse\u003dTrue))"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7aaa499b_bd920256","line":535,"in_reply_to":"9aa53dc9_435616cf","updated":"2015-04-13 06:49:20.000000000","message":"Ah! This seems to be reasonable, thanks!","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2c98af0887642857a3a244e782e45268bcf0cd4e","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    if args.action \u003d\u003d \u0027set\u0027:"},{"line_number":563,"context_line":"        cs.volumes.set_image_metadata(volume, metadata)"},{"line_number":564,"context_line":"    elif args.action \u003d\u003d \u0027unset\u0027:"},{"line_number":565,"context_line":"        cs.volumes.delete_image_metadata(volume, sorted(metadata.keys(),"},{"line_number":566,"context_line":"                                         reverse\u003dTrue))"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_20f12ace","line":565,"updated":"2015-06-28 20:41:44.000000000","message":"Related to unit test question, here if a value is provided it will just be dropped, so it really makes no functional difference. But better not to show it being used to avoid any potential confusions.","commit_id":"ad8f32810a38d9e05e8a29e23a8450d40aaa9a29"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"8a1faf558c5c687c9801aacb357afd797375c182","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    if args.action \u003d\u003d \u0027set\u0027:"},{"line_number":563,"context_line":"        cs.volumes.set_image_metadata(volume, metadata)"},{"line_number":564,"context_line":"    elif args.action \u003d\u003d \u0027unset\u0027:"},{"line_number":565,"context_line":"        cs.volumes.delete_image_metadata(volume, sorted(metadata.keys(),"},{"line_number":566,"context_line":"                                         reverse\u003dTrue))"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_ed5b2053","line":565,"in_reply_to":"ba3cc151_20f12ace","updated":"2015-06-29 15:31:09.000000000","message":"Done","commit_id":"ad8f32810a38d9e05e8a29e23a8450d40aaa9a29"}],"cinderclient/v2/volume_snapshots.py":[{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"0c1310f3b5b4e61e1a428db68b48989b9f47a19f","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    def set_image_metadata(self, snapshot, metadata):"},{"line_number":186,"context_line":"        \"\"\"Update/Set a snapshot image metadata."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":189,"context_line":"        :param metadata: A list of keys to be set."},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        return self._action(\"os-set_snapshot_image_metadata\", snapshot,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_d8b0e18d","line":188,"updated":"2015-01-22 14:32:27.000000000","message":"This appears to be a typo, shouldn\u0027t this param be \"snapshot\"?","commit_id":"ab7be04c9791c2542d125ca2340ea0f41c91f3e6"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"855a00e9da4a3eb0e77a6b128508932576774992","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    def set_image_metadata(self, snapshot, metadata):"},{"line_number":186,"context_line":"        \"\"\"Update/Set a snapshot image metadata."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":189,"context_line":"        :param metadata: A list of keys to be set."},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        return self._action(\"os-set_snapshot_image_metadata\", snapshot,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_13ccebbb","line":188,"in_reply_to":"1a930d6b_d8b0e18d","updated":"2015-01-23 09:48:25.000000000","message":"Nice catch, Steven, thanks!","commit_id":"ab7be04c9791c2542d125ca2340ea0f41c91f3e6"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"0c1310f3b5b4e61e1a428db68b48989b9f47a19f","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    def delete_image_metadata(self, snapshot, keys):"},{"line_number":205,"context_line":"        \"\"\"Delete specified keys from snapshot image metadata."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":208,"context_line":"        :param keys: A list of keys to be removed."},{"line_number":209,"context_line":"        \"\"\""},{"line_number":210,"context_line":"        for key in keys:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_f8abdd1b","line":207,"updated":"2015-01-22 14:32:27.000000000","message":"ditto","commit_id":"ab7be04c9791c2542d125ca2340ea0f41c91f3e6"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"855a00e9da4a3eb0e77a6b128508932576774992","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    def delete_image_metadata(self, snapshot, keys):"},{"line_number":205,"context_line":"        \"\"\"Delete specified keys from snapshot image metadata."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":208,"context_line":"        :param keys: A list of keys to be removed."},{"line_number":209,"context_line":"        \"\"\""},{"line_number":210,"context_line":"        for key in keys:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_93561bd1","line":207,"in_reply_to":"1a930d6b_f8abdd1b","updated":"2015-01-23 09:48:25.000000000","message":"Done","commit_id":"ab7be04c9791c2542d125ca2340ea0f41c91f3e6"}],"cinderclient/v2/volumes.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f0dab2c61fd775c846f96654a92f86925639200f","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        \"\"\""},{"line_number":97,"context_line":"        return self.manager.set_metadata(self, metadata)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def set_image_metadata(self, volume, metadata):"},{"line_number":100,"context_line":"        \"\"\"Set a volumes image metadata."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        :param volume : The :class: `Volume` to set metadata on"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_5eabbe1c","line":99,"updated":"2015-03-25 09:44:29.000000000","message":"Why do we have volume as a parameter here if it isn\u0027t used at all? I see that this is done in more places in this file but I think it is a mistake.","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"56644e72200c7410b5ef7f06c7d058b6d48ae062","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        \"\"\""},{"line_number":97,"context_line":"        return self.manager.set_metadata(self, metadata)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def set_image_metadata(self, volume, metadata):"},{"line_number":100,"context_line":"        \"\"\"Set a volumes image metadata."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        :param volume : The :class: `Volume` to set metadata on"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_356b48f3","line":99,"in_reply_to":"1a6ced46_5eabbe1c","updated":"2015-04-09 05:53:17.000000000","message":"To be frank, I am not sure where this function is used, to make it consistently, I think we can pass the \u0027volume\u0027 into the Manager class.","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f0dab2c61fd775c846f96654a92f86925639200f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return self.manager.set_metadata(self, metadata)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def set_image_metadata(self, volume, metadata):"},{"line_number":100,"context_line":"        \"\"\"Set a volumes image metadata."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        :param volume : The :class: `Volume` to set metadata on"},{"line_number":103,"context_line":"        :param metadata: A dict of key/value pairs to set"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_994e306e","line":100,"updated":"2015-03-25 09:44:29.000000000","message":"I think this should be \"Set a volume\u0027s image metadata.\"","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"56644e72200c7410b5ef7f06c7d058b6d48ae062","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return self.manager.set_metadata(self, metadata)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def set_image_metadata(self, volume, metadata):"},{"line_number":100,"context_line":"        \"\"\"Set a volumes image metadata."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        :param volume : The :class: `Volume` to set metadata on"},{"line_number":103,"context_line":"        :param metadata: A dict of key/value pairs to set"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_1538443c","line":100,"in_reply_to":"1a6ced46_994e306e","updated":"2015-04-09 05:53:17.000000000","message":"Done","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f0dab2c61fd775c846f96654a92f86925639200f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        \"\"\""},{"line_number":105,"context_line":"        return self.manager.set_image_metadata(self, metadata)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def delete_image_metadata(self, volume, keys):"},{"line_number":108,"context_line":"        \"\"\"Delete specified keys from volumes image metadata."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        :param volume: The :class:`Volume`."}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_9e645623","line":107,"updated":"2015-03-25 09:44:29.000000000","message":"ditto","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f0dab2c61fd775c846f96654a92f86925639200f","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        return self.manager.set_image_metadata(self, metadata)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def delete_image_metadata(self, volume, keys):"},{"line_number":108,"context_line":"        \"\"\"Delete specified keys from volumes image metadata."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":111,"context_line":"        :param keys: A list of keys to be removed."}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_d958a834","line":108,"updated":"2015-03-25 09:44:29.000000000","message":"s/volumes/volume\u0027s","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"56644e72200c7410b5ef7f06c7d058b6d48ae062","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        return self.manager.set_image_metadata(self, metadata)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def delete_image_metadata(self, volume, keys):"},{"line_number":108,"context_line":"        \"\"\"Delete specified keys from volumes image metadata."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":111,"context_line":"        :param keys: A list of keys to be removed."}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_b54758bb","line":108,"in_reply_to":"1a6ced46_d958a834","updated":"2015-04-09 05:53:17.000000000","message":"Done","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f0dab2c61fd775c846f96654a92f86925639200f","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":111,"context_line":"        :param keys: A list of keys to be removed."},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        return self.manager.delete_image_metadata(self, volume, keys)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def upload_to_image(self, force, image_name, container_format,"},{"line_number":116,"context_line":"                        disk_format):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_79ba540b","line":113,"updated":"2015-03-25 09:44:29.000000000","message":"Can\u0027t we just pass self as volume and get rid of volume parameter.","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f0dab2c61fd775c846f96654a92f86925639200f","unresolved":false,"context_lines":[{"line_number":426,"context_line":"            self._delete(\"/volumes/%s/metadata/%s\" % (base.getid(volume), k))"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def set_image_metadata(self, volume, metadata):"},{"line_number":429,"context_line":"        \"\"\"Set a volumes image metadata."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":432,"context_line":"        :param metadata: A list of keys to be set."}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_393d3cbc","line":429,"updated":"2015-03-25 09:44:29.000000000","message":"s/volumes/volume\u0027s","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"56644e72200c7410b5ef7f06c7d058b6d48ae062","unresolved":false,"context_lines":[{"line_number":426,"context_line":"            self._delete(\"/volumes/%s/metadata/%s\" % (base.getid(volume), k))"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def set_image_metadata(self, volume, metadata):"},{"line_number":429,"context_line":"        \"\"\"Set a volumes image metadata."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":432,"context_line":"        :param metadata: A list of keys to be set."}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_3810dd58","line":429,"in_reply_to":"1a6ced46_393d3cbc","updated":"2015-04-09 05:53:17.000000000","message":"Done","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f0dab2c61fd775c846f96654a92f86925639200f","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        \"\"\"Set a volumes image metadata."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":432,"context_line":"        :param metadata: A list of keys to be set."},{"line_number":433,"context_line":"        \"\"\""},{"line_number":434,"context_line":"        return self._action(\"os-set_image_metadata\", volume,"},{"line_number":435,"context_line":"                            {\u0027metadata\u0027: metadata})"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_9e32960e","line":432,"updated":"2015-03-25 09:44:29.000000000","message":"Actually this is a dict not list.","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"56644e72200c7410b5ef7f06c7d058b6d48ae062","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        \"\"\"Set a volumes image metadata."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":432,"context_line":"        :param metadata: A list of keys to be set."},{"line_number":433,"context_line":"        \"\"\""},{"line_number":434,"context_line":"        return self._action(\"os-set_image_metadata\", volume,"},{"line_number":435,"context_line":"                            {\u0027metadata\u0027: metadata})"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_43f17600","line":432,"in_reply_to":"1a6ced46_9e32960e","updated":"2015-04-09 05:53:17.000000000","message":"Done","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f0dab2c61fd775c846f96654a92f86925639200f","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                            {\u0027metadata\u0027: metadata})"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def delete_image_metadata(self, volume, keys):"},{"line_number":438,"context_line":"        \"\"\"Delete specified keys from volumes image metadata."},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":441,"context_line":"        :param keys: A list of keys to be removed."}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_f95ba42b","line":438,"updated":"2015-03-25 09:44:29.000000000","message":"s/volumes/volume\u0027s","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"56644e72200c7410b5ef7f06c7d058b6d48ae062","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                            {\u0027metadata\u0027: metadata})"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def delete_image_metadata(self, volume, keys):"},{"line_number":438,"context_line":"        \"\"\"Delete specified keys from volumes image metadata."},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        :param volume: The :class:`Volume`."},{"line_number":441,"context_line":"        :param keys: A list of keys to be removed."}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_e3dc0a75","line":438,"in_reply_to":"1a6ced46_f95ba42b","updated":"2015-04-09 05:53:17.000000000","message":"Done","commit_id":"d998403a75938c741a19f9dacbc3ca08b64c82dc"}]}
