)]}'
{"nova/api/openstack/compute/contrib/server_external_events.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a86ab470ab278b7f943245e9c16e3d133c331e0a","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                except exception.InstanceNotFound:"},{"line_number":84,"context_line":"                    LOG.debug(\u0027Dropping event %(name)s:%(tag)s for unknown \u0027"},{"line_number":85,"context_line":"                              \u0027instance %(instance_uuid)s\u0027,"},{"line_number":86,"context_line":"                              dict(six.iteritems(event)))"},{"line_number":87,"context_line":"                    _event[\u0027status\u0027] \u003d \u0027failed\u0027"},{"line_number":88,"context_line":"                    _event[\u0027code\u0027] \u003d 404"},{"line_number":89,"context_line":"                    result \u003d 207"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_5c7e6faf","line":86,"updated":"2015-05-12 11:50:59.000000000","message":"so, stuff like this is just error prone in the extreme, we should call out the dict params directly instead of assuming the even will never change it\u0027s field list.","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a1bc8c99d9cf7c909182634341fc576dfa263f88","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                except exception.InstanceNotFound:"},{"line_number":84,"context_line":"                    LOG.debug(\u0027Dropping event %(name)s:%(tag)s for unknown \u0027"},{"line_number":85,"context_line":"                              \u0027instance %(instance_uuid)s\u0027,"},{"line_number":86,"context_line":"                              dict(six.iteritems(event)))"},{"line_number":87,"context_line":"                    _event[\u0027status\u0027] \u003d \u0027failed\u0027"},{"line_number":88,"context_line":"                    _event[\u0027code\u0027] \u003d 404"},{"line_number":89,"context_line":"                    result \u003d 207"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_09a0979e","line":86,"in_reply_to":"9a0c5dc1_1878e3f1","updated":"2015-05-13 00:23:36.000000000","message":"Event is also a versioned object, so we have protection against it changing on a whim. This patch doesn\u0027t alter the potential danger, it just makes it py3-compatible so I think it\u0027s fine.","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"a9257cc3cfd2be1a16e1d522d5e147fbc6051c65","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                except exception.InstanceNotFound:"},{"line_number":84,"context_line":"                    LOG.debug(\u0027Dropping event %(name)s:%(tag)s for unknown \u0027"},{"line_number":85,"context_line":"                              \u0027instance %(instance_uuid)s\u0027,"},{"line_number":86,"context_line":"                              dict(six.iteritems(event)))"},{"line_number":87,"context_line":"                    _event[\u0027status\u0027] \u003d \u0027failed\u0027"},{"line_number":88,"context_line":"                    _event[\u0027code\u0027] \u003d 404"},{"line_number":89,"context_line":"                    result \u003d 207"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_1878e3f1","line":86,"in_reply_to":"9a0c5dc1_5c7e6faf","updated":"2015-05-12 22:41:59.000000000","message":"Sorry, I don\u0027t understand what do you mean by calling out the dict params.\n\nDo you mean replacing LOG.debug(\u0027...%(name)s...\u0027, dict(event.iteritems())) with LOG.debug(\u0027...%(name)s...\u0027, name\u003devent[\u0027name\u0027], ...)? Or replacing it with LOG.debug(\u0027...%s...\u0027, event[\u0027name\u0027], ....)?\n\nLOG.debug(\u0027...%(name)s\u0027, event) should just work. I prefer this syntax because the logging module is able to handle errors while formatting the message. It avoids raise a new error when trying to log an error. What do you think?","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"}],"nova/compute/api.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a86ab470ab278b7f943245e9c16e3d133c331e0a","unresolved":false,"context_lines":[{"line_number":3112,"context_line":"    def get_instance_metadata(self, context, instance):"},{"line_number":3113,"context_line":"        \"\"\"Get all metadata associated with an instance.\"\"\""},{"line_number":3114,"context_line":"        rv \u003d self.db.instance_metadata_get(context, instance.uuid)"},{"line_number":3115,"context_line":"        return dict(six.iteritems(rv))"},{"line_number":3116,"context_line":""},{"line_number":3117,"context_line":"    def get_all_instance_metadata(self, context, search_filts):"},{"line_number":3118,"context_line":"        return self._get_all_instance_metadata("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_df45b117","line":3115,"updated":"2015-05-12 11:50:59.000000000","message":"why are we doing this wrap here at all?","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"f117d0c14970e9b0666de395192217e851338321","unresolved":false,"context_lines":[{"line_number":3112,"context_line":"    def get_instance_metadata(self, context, instance):"},{"line_number":3113,"context_line":"        \"\"\"Get all metadata associated with an instance.\"\"\""},{"line_number":3114,"context_line":"        rv \u003d self.db.instance_metadata_get(context, instance.uuid)"},{"line_number":3115,"context_line":"        return dict(six.iteritems(rv))"},{"line_number":3116,"context_line":""},{"line_number":3117,"context_line":"    def get_all_instance_metadata(self, context, search_filts):"},{"line_number":3118,"context_line":"        return self._get_all_instance_metadata("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_f2f3de08","line":3115,"in_reply_to":"9a0c5dc1_89fec769","updated":"2015-05-13 09:54:42.000000000","message":"\u003e No, it doesn\u0027t make sense.\n\nOk, I wrote a dedicated patch for this line: https://review.openstack.org/#/c/182596/","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"a9257cc3cfd2be1a16e1d522d5e147fbc6051c65","unresolved":false,"context_lines":[{"line_number":3112,"context_line":"    def get_instance_metadata(self, context, instance):"},{"line_number":3113,"context_line":"        \"\"\"Get all metadata associated with an instance.\"\"\""},{"line_number":3114,"context_line":"        rv \u003d self.db.instance_metadata_get(context, instance.uuid)"},{"line_number":3115,"context_line":"        return dict(six.iteritems(rv))"},{"line_number":3116,"context_line":""},{"line_number":3117,"context_line":"    def get_all_instance_metadata(self, context, search_filts):"},{"line_number":3118,"context_line":"        return self._get_all_instance_metadata("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_f8e2af9e","line":3115,"in_reply_to":"9a0c5dc1_df45b117","updated":"2015-05-12 22:41:59.000000000","message":"No idea. It returns a copy of the object, maybe to avoid the caller to be able to modify the original object? Does it make sense?","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a1bc8c99d9cf7c909182634341fc576dfa263f88","unresolved":false,"context_lines":[{"line_number":3112,"context_line":"    def get_instance_metadata(self, context, instance):"},{"line_number":3113,"context_line":"        \"\"\"Get all metadata associated with an instance.\"\"\""},{"line_number":3114,"context_line":"        rv \u003d self.db.instance_metadata_get(context, instance.uuid)"},{"line_number":3115,"context_line":"        return dict(six.iteritems(rv))"},{"line_number":3116,"context_line":""},{"line_number":3117,"context_line":"    def get_all_instance_metadata(self, context, search_filts):"},{"line_number":3118,"context_line":"        return self._get_all_instance_metadata("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_89fec769","line":3115,"in_reply_to":"9a0c5dc1_f8e2af9e","updated":"2015-05-13 00:23:36.000000000","message":"No, it doesn\u0027t make sense. It\u0027s creating a dict in the return, so I don\u0027t think there\u0027s any reason to copy it again.","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"}],"nova/tests/unit/api/openstack/compute/contrib/test_volumes.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a86ab470ab278b7f943245e9c16e3d133c331e0a","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        }"},{"line_number":806,"context_line":"        req \u003d fakes.HTTPRequest.blank("},{"line_number":807,"context_line":"                \u0027/v2/fake/os-assisted-volume-snapshots?%s\u0027 %"},{"line_number":808,"context_line":"                \u0027\u0026\u0027.join([\u0027%s\u003d%s\u0027 % (k, v) for k, v in six.iteritems(params)]))"},{"line_number":809,"context_line":"        req.method \u003d \u0027DELETE\u0027"},{"line_number":810,"context_line":"        result \u003d self.controller.delete(req, \u00275\u0027)"},{"line_number":811,"context_line":"        self._check_status(204, result, self.controller.delete)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_3fd3ad3a","line":808,"updated":"2015-05-12 11:50:59.000000000","message":"this is just silly, we have urlencode for this","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"0b197d0f715446a56db4318e4cf1dac212df524d","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        }"},{"line_number":806,"context_line":"        req \u003d fakes.HTTPRequest.blank("},{"line_number":807,"context_line":"                \u0027/v2/fake/os-assisted-volume-snapshots?%s\u0027 %"},{"line_number":808,"context_line":"                \u0027\u0026\u0027.join([\u0027%s\u003d%s\u0027 % (k, v) for k, v in six.iteritems(params)]))"},{"line_number":809,"context_line":"        req.method \u003d \u0027DELETE\u0027"},{"line_number":810,"context_line":"        result \u003d self.controller.delete(req, \u00275\u0027)"},{"line_number":811,"context_line":"        self._check_status(204, result, self.controller.delete)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_bbee7120","line":808,"in_reply_to":"9a0c5dc1_3fd3ad3a","updated":"2015-05-12 22:46:21.000000000","message":"Ok, here is a patch to use urlencode instead:\nhttps://review.openstack.org/#/c/182485/","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"a9257cc3cfd2be1a16e1d522d5e147fbc6051c65","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        }"},{"line_number":806,"context_line":"        req \u003d fakes.HTTPRequest.blank("},{"line_number":807,"context_line":"                \u0027/v2/fake/os-assisted-volume-snapshots?%s\u0027 %"},{"line_number":808,"context_line":"                \u0027\u0026\u0027.join([\u0027%s\u003d%s\u0027 % (k, v) for k, v in six.iteritems(params)]))"},{"line_number":809,"context_line":"        req.method \u003d \u0027DELETE\u0027"},{"line_number":810,"context_line":"        result \u003d self.controller.delete(req, \u00275\u0027)"},{"line_number":811,"context_line":"        self._check_status(204, result, self.controller.delete)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_98e8537e","line":808,"in_reply_to":"9a0c5dc1_3fd3ad3a","updated":"2015-05-12 22:41:59.000000000","message":"Right. I will write a different patch to enhance this code.","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a86ab470ab278b7f943245e9c16e3d133c331e0a","unresolved":false,"context_lines":[{"line_number":1549,"context_line":"            if columns is None:"},{"line_number":1550,"context_line":"                self.assertIn(\u0027grantee_group\u0027, dict(six.iteritems(rule)))"},{"line_number":1551,"context_line":"                self.assertIn(\u0027instances\u0027,"},{"line_number":1552,"context_line":"                              dict(six.iteritems(rule.grantee_group)))"},{"line_number":1553,"context_line":"                self.assertIn("},{"line_number":1554,"context_line":"                    \u0027system_metadata\u0027,"},{"line_number":1555,"context_line":"                    dict(six.iteritems(rule.grantee_group.instances[0])))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_1f946935","line":1552,"updated":"2015-05-12 11:50:59.000000000","message":"so... I 100% don\u0027t understand why needs the dict + iteritems at all.","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"a9257cc3cfd2be1a16e1d522d5e147fbc6051c65","unresolved":false,"context_lines":[{"line_number":1549,"context_line":"            if columns is None:"},{"line_number":1550,"context_line":"                self.assertIn(\u0027grantee_group\u0027, dict(six.iteritems(rule)))"},{"line_number":1551,"context_line":"                self.assertIn(\u0027instances\u0027,"},{"line_number":1552,"context_line":"                              dict(six.iteritems(rule.grantee_group)))"},{"line_number":1553,"context_line":"                self.assertIn("},{"line_number":1554,"context_line":"                    \u0027system_metadata\u0027,"},{"line_number":1555,"context_line":"                    dict(six.iteritems(rule.grantee_group.instances[0])))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_588adbc0","line":1552,"in_reply_to":"9a0c5dc1_1f946935","updated":"2015-05-12 22:41:59.000000000","message":"dict(obj) doesn\u0027t work on NovaObjectDictCompat (which now inherits from oslo_versionedobjects.base.VersionedObjectDictCompat). I proposed a patch to make it possible (and to make VersionedObjectDictCompat compatible with Python 3):\nhttps://review.openstack.org/#/c/182477/","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"}],"nova/tests/unit/objects/test_instance.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a86ab470ab278b7f943245e9c16e3d133c331e0a","unresolved":false,"context_lines":[{"line_number":1550,"context_line":"                                                      use_slave\u003dFalse)"},{"line_number":1551,"context_line":"        self.assertEqual(2, len(instances))"},{"line_number":1552,"context_line":"        self.assertEqual(fake_faults[\u0027fake-uuid\u0027][0],"},{"line_number":1553,"context_line":"                         dict(six.iteritems(instances[0].fault)))"},{"line_number":1554,"context_line":"        self.assertIsNone(instances[1].fault)"},{"line_number":1555,"context_line":""},{"line_number":1556,"context_line":"    def test_fill_faults(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_dfeb71af","line":1553,"updated":"2015-05-12 11:50:59.000000000","message":"again, this pattern confuses me, maybe it\u0027s something special about objects, but it seems like we should fix this in objects instead of here?","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a1bc8c99d9cf7c909182634341fc576dfa263f88","unresolved":false,"context_lines":[{"line_number":1550,"context_line":"                                                      use_slave\u003dFalse)"},{"line_number":1551,"context_line":"        self.assertEqual(2, len(instances))"},{"line_number":1552,"context_line":"        self.assertEqual(fake_faults[\u0027fake-uuid\u0027][0],"},{"line_number":1553,"context_line":"                         dict(six.iteritems(instances[0].fault)))"},{"line_number":1554,"context_line":"        self.assertIsNone(instances[1].fault)"},{"line_number":1555,"context_line":""},{"line_number":1556,"context_line":"    def test_fill_faults(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_c9795ffe","line":1553,"in_reply_to":"9a0c5dc1_dfeb71af","updated":"2015-05-13 00:23:36.000000000","message":"Objects behaves like sqla here, which is why we have iteritems all over the place in most cases. He\u0027s got a patch up to make it better.","commit_id":"64b7d545b5a2d5f70697552bd0a818005e9e3ce9"}]}
