)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"a546c739ba2f6edae805d12167440809993aef4a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Remove version hardcoding for \u0027create\u0027 method"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch continues the big initiative to make Nova"},{"line_number":10,"context_line":"adopt Glance v2 API. In this patch \u0027detail\u0027 method is"},{"line_number":11,"context_line":"improved to work with both versions."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related to blueprint use-glance-v2-api"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a7e1126_abf613f7","line":10,"range":{"start_line":10,"start_character":29,"end_line":10,"end_character":34},"updated":"2015-12-17 18:34:09.000000000","message":"s/detail/create/","commit_id":"5c4e6b7885ebadf30bd13e1493994a9549a72e73"}],"nova/image/glance.py":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"a50a672e5bb293a1fbf6c267ea955ebad4b6fcc8","unresolved":false,"context_lines":[{"line_number":572,"context_line":"    return str(user_id) \u003d\u003d str(context.user_id)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"def _translate_to_glance(image_meta, version\u003d1):"},{"line_number":576,"context_line":"    if version \u003d\u003d 2:"},{"line_number":577,"context_line":"        image_meta \u003d _convert_to_v2(image_meta)"},{"line_number":578,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_0b4c076f","line":575,"range":{"start_line":575,"start_character":46,"end_line":575,"end_character":48},"updated":"2015-12-17 18:32:54.000000000","message":"Shouldn\u0027t v2 be the default version? Aren\u0027t we using v2 as the default version in other patches?","commit_id":"5c4e6b7885ebadf30bd13e1493994a9549a72e73"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"735def29976f6349f34c9053cfb4bd1aeeb67d62","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        if self._client.client is None:"},{"line_number":463,"context_line":"            reset_client \u003d True"},{"line_number":464,"context_line":"            self._client.client \u003d self._client._create_onetime_client("},{"line_number":465,"context_line":"                    context, None)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        version \u003d int(self._client.client.version)"},{"line_number":468,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_121facb8","line":465,"updated":"2015-12-22 14:04:29.000000000","message":"Indentation","commit_id":"0447bcd6d32338910a0e40c7003d868f6c23dff5"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"735def29976f6349f34c9053cfb4bd1aeeb67d62","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                    recv_service_image_meta \u003d self._client.call("},{"line_number":494,"context_line":"                        context, None, \u0027get\u0027, recv_service_image_meta[\u0027id\u0027])"},{"line_number":495,"context_line":"        except glanceclient.exc.HTTPException:"},{"line_number":496,"context_line":"            _reraise_translated_exception()"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        if reset_client:"},{"line_number":499,"context_line":"            # reset onetime client"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_d21044ae","line":496,"range":{"start_line":496,"start_character":12,"end_line":496,"end_character":41},"updated":"2015-12-22 14:04:29.000000000","message":"Do we need to reset client here?","commit_id":"0447bcd6d32338910a0e40c7003d868f6c23dff5"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"735def29976f6349f34c9053cfb4bd1aeeb67d62","unresolved":false,"context_lines":[{"line_number":502,"context_line":"        return _translate_from_glance(recv_service_image_meta)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    def update(self, context, image_id, image_meta, data\u003dNone,"},{"line_number":505,"context_line":"            purge_props\u003dTrue):"},{"line_number":506,"context_line":"        \"\"\"Modify the given image with the new data.\"\"\""},{"line_number":507,"context_line":"        # without creating a client here we cannot determine its version and"},{"line_number":508,"context_line":"        # that\u0027s why we won\u0027t be able to prepare correct query parameters for"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_329bc874","line":505,"range":{"start_line":505,"start_character":0,"end_line":505,"end_character":12},"updated":"2015-12-22 14:04:29.000000000","message":"Indentation","commit_id":"0447bcd6d32338910a0e40c7003d868f6c23dff5"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"735def29976f6349f34c9053cfb4bd1aeeb67d62","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        if self._client.client is None:"},{"line_number":514,"context_line":"            reset_client \u003d True"},{"line_number":515,"context_line":"            self._client.client \u003d self._client._create_onetime_client("},{"line_number":516,"context_line":"                    context, None)"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"        version \u003d int(self._client.client.version)"},{"line_number":519,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_b29c985e","line":516,"range":{"start_line":516,"start_character":0,"end_line":516,"end_character":20},"updated":"2015-12-22 14:04:29.000000000","message":"Indentation","commit_id":"0447bcd6d32338910a0e40c7003d868f6c23dff5"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"735def29976f6349f34c9053cfb4bd1aeeb67d62","unresolved":false,"context_lines":[{"line_number":549,"context_line":"                    recv_service_image_meta \u003d self._client.call("},{"line_number":550,"context_line":"                        context, None, \u0027get\u0027, recv_service_image_meta[\u0027id\u0027]"},{"line_number":551,"context_line":"                )"},{"line_number":552,"context_line":"        except Exception:"},{"line_number":553,"context_line":"            _reraise_translated_image_exception(image_id)"},{"line_number":554,"context_line":"        else:"},{"line_number":555,"context_line":"            if reset_client:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_92fcfc73","line":552,"range":{"start_line":552,"start_character":15,"end_line":552,"end_character":24},"updated":"2015-12-22 14:04:29.000000000","message":"Do we need to reset client when raising exception?","commit_id":"0447bcd6d32338910a0e40c7003d868f6c23dff5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"679627cfc0cd8b874455b433d7c6188f319a68f8","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            self._client.client \u003d self._client._create_onetime_client("},{"line_number":467,"context_line":"                    context, None)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        version \u003d int(self._client.client.version)"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        if \u0027size\u0027 in image_meta and image_meta[\u0027size\u0027] \u003d\u003d 0 and version \u003d\u003d 2:"},{"line_number":472,"context_line":"            data \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_e13e73d9","line":469,"updated":"2016-01-13 10:55:39.000000000","message":"Again, can\u0027t we save the current version for the client somewhere easy to get to?","commit_id":"3783f99717bcd16634c392ad0f36f16b95dfcb69"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"679627cfc0cd8b874455b433d7c6188f319a68f8","unresolved":false,"context_lines":[{"line_number":480,"context_line":"                recv_service_image_meta \u003d self._client.call("},{"line_number":481,"context_line":"                    context, None, \u0027create\u0027, **sent_service_image_meta)"},{"line_number":482,"context_line":"            elif version \u003d\u003d 2:"},{"line_number":483,"context_line":"                if data \u003d\u003d \u0027\u0027:"},{"line_number":484,"context_line":"                    if \u0027disk_format\u0027 not in sent_service_image_meta:"},{"line_number":485,"context_line":"                        sent_service_image_meta[\u0027disk_format\u0027] \u003d \u0027qcow2\u0027"},{"line_number":486,"context_line":"                    if \u0027container_format\u0027 not in sent_service_image_meta:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_bc0c2295","line":483,"updated":"2016-01-13 10:55:39.000000000","message":"should this not match \"if data is not None:\" somehow?","commit_id":"3783f99717bcd16634c392ad0f36f16b95dfcb69"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"679627cfc0cd8b874455b433d7c6188f319a68f8","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            elif version \u003d\u003d 2:"},{"line_number":483,"context_line":"                if data \u003d\u003d \u0027\u0027:"},{"line_number":484,"context_line":"                    if \u0027disk_format\u0027 not in sent_service_image_meta:"},{"line_number":485,"context_line":"                        sent_service_image_meta[\u0027disk_format\u0027] \u003d \u0027qcow2\u0027"},{"line_number":486,"context_line":"                    if \u0027container_format\u0027 not in sent_service_image_meta:"},{"line_number":487,"context_line":"                        sent_service_image_meta[\u0027container_format\u0027] \u003d \u0027bare\u0027"},{"line_number":488,"context_line":"                recv_service_image_meta \u003d self._client.call("}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_1cbe8ed4","line":485,"updated":"2016-01-13 10:55:39.000000000","message":"is this not going to create problems, having this default here?\n\nSurely when this info is required, it *must* be passed down into here, otherwise this will likely be incorrect?\n\nWhy not just raise an exception if that info is missing?","commit_id":"3783f99717bcd16634c392ad0f36f16b95dfcb69"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"679627cfc0cd8b874455b433d7c6188f319a68f8","unresolved":false,"context_lines":[{"line_number":517,"context_line":"            self._client.client \u003d self._client._create_onetime_client("},{"line_number":518,"context_line":"                    context, None)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        version \u003d int(self._client.client.version)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        sent_service_image_meta \u003d _translate_to_glance(image_meta,"},{"line_number":523,"context_line":"                                                       version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_9cfefe36","line":520,"updated":"2016-01-13 10:55:39.000000000","message":"as above, this seems really odd.","commit_id":"3783f99717bcd16634c392ad0f36f16b95dfcb69"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"679627cfc0cd8b874455b433d7c6188f319a68f8","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        sent_service_image_meta \u003d _translate_to_glance(image_meta,"},{"line_number":523,"context_line":"                                                       version\u003dversion)"},{"line_number":524,"context_line":"        if purge_props:"},{"line_number":525,"context_line":"            if version \u003d\u003d 1:"},{"line_number":526,"context_line":"                sent_service_image_meta[\u0027purge_props\u0027] \u003d purge_props"},{"line_number":527,"context_line":"            elif version \u003d\u003d 2:"},{"line_number":528,"context_line":"                all_props \u003d set(self.show("}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_1cf20e70","line":525,"updated":"2016-01-13 10:55:39.000000000","message":"This is getting horrible.\n\nIt feels like we should really have a v1 class and a v2 class and switch between them, or something thats cleaner.\n\nhow about a v1 and v2 method, and just call the correct one based on the version.","commit_id":"3783f99717bcd16634c392ad0f36f16b95dfcb69"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"f89efca494ee2e46d216d3808b4fa6584dda3456","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                if close_file:"},{"line_number":482,"context_line":"                    data.close()"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    def _add_location(self, context, image_id, location):"},{"line_number":485,"context_line":"        # \u0027show_multiple_locations\u0027 must be enabled in glance api conf file."},{"line_number":486,"context_line":"        return self._client.call(context, None, \u0027add_location\u0027, image_id,"},{"line_number":487,"context_line":"                                 location, {})"}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_c1aa20d4","line":484,"range":{"start_line":484,"start_character":8,"end_line":484,"end_character":21},"updated":"2016-05-06 22:14:56.000000000","message":"Can you please add a docstring on why we need this module. There\u0027s a discussion on the spec that involves exposing multiple locations.\n\nSee the discussion on line 210 https://review.openstack.org/#/c/301741/4/specs/newton/approved/use-glance-v2-api.rst","commit_id":"c1e52ccfded2b72270bba46b265ced54d6ed4b60"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6134ddb169029f3ebdb78c0023706f50b3cef648","unresolved":false,"context_lines":[{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        return _translate_from_glance(recv_service_image_meta)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    def _update_v1(self, context, sent_service_image_meta, data\u003dNone):"},{"line_number":573,"context_line":"        if data:"},{"line_number":574,"context_line":"            sent_service_image_meta[\u0027data\u0027] \u003d data"},{"line_number":575,"context_line":"        recv_service_image_meta \u003d self._client.call("}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_648c4cda","line":572,"updated":"2016-04-01 14:28:22.000000000","message":"Yikes, I don\u0027t really like the v1/v2 private methods in here.\n\nIf this code is going to live in nova, I think we should have a common base class which is subclassed for v1/v2 specific callback (abstract) methods, and then we could have a factory that, given the version, provides the client impl we\u0027re going to deal with.","commit_id":"c1e52ccfded2b72270bba46b265ced54d6ed4b60"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba04cdd0e914af10e22c13ca030c14e17350b3b4","unresolved":false,"context_lines":[{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        return _translate_from_glance(recv_service_image_meta)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    def _update_v1(self, context, sent_service_image_meta, data\u003dNone):"},{"line_number":573,"context_line":"        if data:"},{"line_number":574,"context_line":"            sent_service_image_meta[\u0027data\u0027] \u003d data"},{"line_number":575,"context_line":"        recv_service_image_meta \u003d self._client.call("}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_442308bd","line":572,"in_reply_to":"ba0121b8_648c4cda","updated":"2016-04-01 14:30:35.000000000","message":"Also, I\u0027d split this into separate patches to deal with create and update, that would make this easier to digest from the review side, and making sure we have adequate unit test coverage for each function.","commit_id":"c1e52ccfded2b72270bba46b265ced54d6ed4b60"}],"nova/tests/unit/image/test_glance.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"679627cfc0cd8b874455b433d7c6188f319a68f8","unresolved":false,"context_lines":[{"line_number":1267,"context_line":"        image_meta \u003d service.create(ctx, image_mock)"},{"line_number":1268,"context_line":""},{"line_number":1269,"context_line":"        trans_to_mock.assert_called_once_with(image_mock, 1)"},{"line_number":1270,"context_line":"        client.call.assert_called_once_with(ctx, None, \u0027create\u0027,"},{"line_number":1271,"context_line":"                                            image_id\u003dmock.sentinel.image_id)"},{"line_number":1272,"context_line":"        trans_from_mock.assert_called_once_with(mock.sentinel.image_meta)"},{"line_number":1273,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_bcb66288","line":1270,"updated":"2016-01-13 10:55:39.000000000","message":"This level of testing seems very bad, as with other patches.\n\nI want to see the v1 and v2 data being switched around, and proving we get the same answer out each time.","commit_id":"3783f99717bcd16634c392ad0f36f16b95dfcb69"}]}
