)]}'
{"neutron/auth.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1921afa2d665dd0b956e3c18a7918d25897159b3","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        roles \u003d [r.strip() for r in req.headers.get(\u0027X_ROLE\u0027, \u0027\u0027).split(\u0027,\u0027)]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Human-friendly names"},{"line_number":46,"context_line":"        tenant_name \u003d req.headers.get(\u0027X_TENANT_NAME\u0027)"},{"line_number":47,"context_line":"        user_name \u003d req.headers.get(\u0027X_USER_NAME\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Create a context with the authentication data"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FVzE%3D","line":46,"updated":"2013-10-17 14:54:32.000000000","message":"this is deprecated, use X_PROJECT_NAME\n\nsee docstr in: https://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/middleware/auth_token.py","commit_id":"3eb77acec1756488816759c0a936ca8f041c0a32"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a004f7acf7cd648eb1f4bbd9a1d7e58f0a29cf59","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        roles \u003d [r.strip() for r in req.headers.get(\u0027X_ROLE\u0027, \u0027\u0027).split(\u0027,\u0027)]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Human-friendly names"},{"line_number":46,"context_line":"        tenant_name \u003d req.headers.get(\u0027X_TENANT_NAME\u0027)"},{"line_number":47,"context_line":"        user_name \u003d req.headers.get(\u0027X_USER_NAME\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Create a context with the authentication data"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FVBE%3D","line":46,"in_reply_to":"AAAATH%2F%2FVzE%3D","updated":"2013-10-20 18:43:30.000000000","message":"Thanks. Done.\n\nX_TENANT_ID and X_ROLE are also deprecated. I will update these existing fields in a separate patch.","commit_id":"3eb77acec1756488816759c0a936ca8f041c0a32"},{"author":{"_account_id":5127,"name":"Justin Hammond","email":"runningempty@gmail.com","username":"justin-hammond"},"change_message_id":"a1977a14b68434af3effeb81c467b93051b0ef34","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Create a context with the authentication data"},{"line_number":50,"context_line":"        ctx \u003d context.Context(user_id, tenant_id, roles\u003droles,"},{"line_number":51,"context_line":"                              user_name\u003duser_name, tenant_name\u003dtenant_name)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Inject the context..."},{"line_number":54,"context_line":"        req.environ[\u0027neutron.context\u0027] \u003d ctx"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FL4w%3D","line":51,"updated":"2013-10-21 19:26:56.000000000","message":"nit: did this pass pep8 somehow? one more space to line up or maybe my browser is rendering it wrong.","commit_id":"75ac96850f870578f0b5055e94c13d63301816fb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d680892809546319ff89dc2957be0f1a57c42441","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Create a context with the authentication data"},{"line_number":50,"context_line":"        ctx \u003d context.Context(user_id, tenant_id, roles\u003droles,"},{"line_number":51,"context_line":"                              user_name\u003duser_name, tenant_name\u003dtenant_name)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Inject the context..."},{"line_number":54,"context_line":"        req.environ[\u0027neutron.context\u0027] \u003d ctx"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATX%2F%2F%2F6Y%3D","line":51,"in_reply_to":"AAAATH%2F%2FL4w%3D","updated":"2013-10-23 04:56:27.000000000","message":"This is browser rendering problem. I confirmed it again using \"git show\" after download the patch.","commit_id":"75ac96850f870578f0b5055e94c13d63301816fb"}],"neutron/context.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ee962da6a4ee86f7ef62337cd7258bb0a4f071f6","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        # Use names as user/tenant by default rather than id"},{"line_number":67,"context_line":"        # because they are displayed log messages."},{"line_number":68,"context_line":"        user \u003d user_name or user_id"},{"line_number":69,"context_line":"        tenant \u003d tenant_name or tenant_id"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        super(ContextBase, self).__init__(user\u003duser, tenant\u003dtenant,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FIoU%3D","line":68,"updated":"2013-10-22 17:23:17.000000000","message":"um...names, albeit symbolic, may be duplicated. I appreciate that the request-id is unique, but wouldn\u0027t be better to track the user id and the tenant id too?","commit_id":"75ac96850f870578f0b5055e94c13d63301816fb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d680892809546319ff89dc2957be0f1a57c42441","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        # Use names as user/tenant by default rather than id"},{"line_number":67,"context_line":"        # because they are displayed log messages."},{"line_number":68,"context_line":"        user \u003d user_name or user_id"},{"line_number":69,"context_line":"        tenant \u003d tenant_name or tenant_id"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        super(ContextBase, self).__init__(user\u003duser, tenant\u003dtenant,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATX%2F%2F%2F4U%3D","line":68,"in_reply_to":"AAAATH%2F%2FIoU%3D","updated":"2013-10-23 04:56:27.000000000","message":"I will revert this to tenant_id/user_id as you suggest.\nAfter glance and cinder context, tenant_id/user_id is used for tenant/user field. It turns out nova is an exception.\n\nIf we track both tenant_id and tenant_name, it is better to do it in oslo.config. The common log formats are defined there.","commit_id":"75ac96850f870578f0b5055e94c13d63301816fb"},{"author":{"_account_id":5127,"name":"Justin Hammond","email":"runningempty@gmail.com","username":"justin-hammond"},"change_message_id":"a1977a14b68434af3effeb81c467b93051b0ef34","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        tenant \u003d tenant_name or tenant_id"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        super(ContextBase, self).__init__(user\u003duser, tenant\u003dtenant,"},{"line_number":72,"context_line":"                                          is_admin\u003dis_admin,"},{"line_number":73,"context_line":"                                          request_id\u003drequest_id)"},{"line_number":74,"context_line":"        self.user_id \u003d user_id"},{"line_number":75,"context_line":"        self.tenant_id \u003d tenant_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FL4g%3D","line":72,"updated":"2013-10-21 19:26:56.000000000","message":"nit: same thing. Are these supposed to be lined up?","commit_id":"75ac96850f870578f0b5055e94c13d63301816fb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d680892809546319ff89dc2957be0f1a57c42441","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        tenant \u003d tenant_name or tenant_id"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        super(ContextBase, self).__init__(user\u003duser, tenant\u003dtenant,"},{"line_number":72,"context_line":"                                          is_admin\u003dis_admin,"},{"line_number":73,"context_line":"                                          request_id\u003drequest_id)"},{"line_number":74,"context_line":"        self.user_id \u003d user_id"},{"line_number":75,"context_line":"        self.tenant_id \u003d tenant_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATX%2F%2F%2F6U%3D","line":72,"in_reply_to":"AAAATH%2F%2FL4g%3D","updated":"2013-10-23 04:56:27.000000000","message":"It is really confusing. Browser rendering problem.","commit_id":"75ac96850f870578f0b5055e94c13d63301816fb"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4e1cdcede044d0914727a59762ab003c9ce83cb1","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    read_deleted \u003d property(_get_read_deleted, _set_read_deleted,"},{"line_number":117,"context_line":"                            _del_read_deleted)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def update_store(self):"},{"line_number":120,"context_line":"        local.store.context \u003d self"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def to_dict(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FC7I%3D","line":119,"updated":"2013-11-15 08:20:45.000000000","message":"Is there a reason not to inline this function call?","commit_id":"18523b31081a9b357c4011b702ec63c6e2818bed"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8876e6339a9f2c580bfdd540f8762b1e1dcaf7d1","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    read_deleted \u003d property(_get_read_deleted, _set_read_deleted,"},{"line_number":117,"context_line":"                            _del_read_deleted)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def update_store(self):"},{"line_number":120,"context_line":"        local.store.context \u003d self"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def to_dict(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2B7uM%3D","line":119,"in_reply_to":"AAAATn%2F%2B8pc%3D","updated":"2013-11-18 12:36:27.000000000","message":"I made it inline. I don\u0027t see any reason to make it a public method even though nova and cinder do so.","commit_id":"18523b31081a9b357c4011b702ec63c6e2818bed"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b8f07c55cc476a4617f21e27775cb6f6de1ba389","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    read_deleted \u003d property(_get_read_deleted, _set_read_deleted,"},{"line_number":117,"context_line":"                            _del_read_deleted)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def update_store(self):"},{"line_number":120,"context_line":"        local.store.context \u003d self"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def to_dict(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2B8pc%3D","line":119,"in_reply_to":"AAAATn%2F%2FC7I%3D","updated":"2013-11-18 10:42:53.000000000","message":"I agree with you all. It can be inline. I just follows the way in nova/cinder context.py. Is it better to be inline?\n\nDuring implementing it, I feel Context class is better to be moved to oslo, but it is out of scope of the patch and IMO it should be considered a bit later.","commit_id":"18523b31081a9b357c4011b702ec63c6e2818bed"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4e1cdcede044d0914727a59762ab003c9ce83cb1","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                \u0027roles\u0027: self.roles,"},{"line_number":129,"context_line":"                \u0027timestamp\u0027: str(self.timestamp),"},{"line_number":130,"context_line":"                \u0027request_id\u0027: self.request_id,"},{"line_number":131,"context_line":"                \u0027tenant\u0027: self.tenant,"},{"line_number":132,"context_line":"                \u0027user\u0027: self.user,"},{"line_number":133,"context_line":"                \u0027tenant_name\u0027: self.tenant_name,"},{"line_number":134,"context_line":"                \u0027user_name\u0027: self.user_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FC5o%3D","line":131,"updated":"2013-11-15 08:20:45.000000000","message":"Why is \u0027tenant\u0027 and \u0027user\u0027 required when \u0027user_id\u0027 and \u0027tenant_id\u0027 would appear to provide the same information?  Does openstack.common.log use the \u0027tenant\u0027 and \u0027user\u0027 fields while neutron uses the \u0027tenant_id\u0027 and \u0027user_id\u0027 fields?","commit_id":"18523b31081a9b357c4011b702ec63c6e2818bed"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b8f07c55cc476a4617f21e27775cb6f6de1ba389","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                \u0027roles\u0027: self.roles,"},{"line_number":129,"context_line":"                \u0027timestamp\u0027: str(self.timestamp),"},{"line_number":130,"context_line":"                \u0027request_id\u0027: self.request_id,"},{"line_number":131,"context_line":"                \u0027tenant\u0027: self.tenant,"},{"line_number":132,"context_line":"                \u0027user\u0027: self.user,"},{"line_number":133,"context_line":"                \u0027tenant_name\u0027: self.tenant_name,"},{"line_number":134,"context_line":"                \u0027user_name\u0027: self.user_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2B8qk%3D","line":131,"in_reply_to":"AAAATn%2F%2FC5o%3D","updated":"2013-11-18 10:42:53.000000000","message":"The default value of logging_context_format_string config in openstack.common.log requires \u0027tenant\u0027 and \u0027user\u0027, so I added them. nova does the same. I think it is better to use xxx_id/name and remove tenant/user, but it should be done in oslo and can be done later.\n\nI think it is better to define logging_context_format_string which uses (tenant|user)_(id|name) in neutron.conf in devstack env.","commit_id":"18523b31081a9b357c4011b702ec63c6e2818bed"}],"neutron/tests/unit/test_neutron_context.py":[{"author":{"_account_id":5127,"name":"Justin Hammond","email":"runningempty@gmail.com","username":"justin-hammond"},"change_message_id":"a1977a14b68434af3effeb81c467b93051b0ef34","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            pass"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            self.assertFalse(True, \u0027without_session admin context\u0027"},{"line_number":97,"context_line":"                                   \u0027should has no session property!\u0027)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def test_neutron_context_with_load_roles_true(self):"},{"line_number":100,"context_line":"        ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FL30%3D","line":97,"updated":"2013-10-21 19:26:56.000000000","message":"could you self.assertTrue(hasattr(ctx, \u0027session\u0027)) instead of using the exception?","commit_id":"75ac96850f870578f0b5055e94c13d63301816fb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d680892809546319ff89dc2957be0f1a57c42441","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            pass"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            self.assertFalse(True, \u0027without_session admin context\u0027"},{"line_number":97,"context_line":"                                   \u0027should has no session property!\u0027)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def test_neutron_context_with_load_roles_true(self):"},{"line_number":100,"context_line":"        ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATX%2F%2F%2F5w%3D","line":97,"in_reply_to":"AAAATH%2F%2FL30%3D","updated":"2013-10-23 04:56:27.000000000","message":"It seems better to use asserRaises. will fix.","commit_id":"75ac96850f870578f0b5055e94c13d63301816fb"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4e1cdcede044d0914727a59762ab003c9ce83cb1","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.assertIsNone(ctx.user_name)"},{"line_number":44,"context_line":"        self.assertIsNone(ctx.tenant_name)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_neutron_context_create_with_name(self):"},{"line_number":47,"context_line":"        ctx \u003d context.Context(\u0027user_id\u0027, \u0027tenant_id\u0027,"},{"line_number":48,"context_line":"                              tenant_name\u003d\u0027tenant_name\u0027, user_name\u003d\u0027user_name\u0027)"},{"line_number":49,"context_line":"        self.assertEqual(\u0027user_id\u0027, ctx.user_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FC4A%3D","line":46,"updated":"2013-11-15 08:20:45.000000000","message":"(Suggestion only) Given that this is a whitebox test and test_neutron_context_create test already validates whether user_id/user, tenant_id/tenant, and request_id were set correctly, consider only checking that user_name and tenant_name are set correctly.\n\nThis comment similarly applies to the following tests changed in this patch, as limiting the scope of each test makes maintenance easier with no loss of coverage:\n\ntest_neutron_context_create_with_request_id\ntest_neutron_context_to_dict\ntest_neutron_context_to_dict_with_name","commit_id":"18523b31081a9b357c4011b702ec63c6e2818bed"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8876e6339a9f2c580bfdd540f8762b1e1dcaf7d1","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.assertIsNone(ctx.user_name)"},{"line_number":44,"context_line":"        self.assertIsNone(ctx.tenant_name)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_neutron_context_create_with_name(self):"},{"line_number":47,"context_line":"        ctx \u003d context.Context(\u0027user_id\u0027, \u0027tenant_id\u0027,"},{"line_number":48,"context_line":"                              tenant_name\u003d\u0027tenant_name\u0027, user_name\u003d\u0027user_name\u0027)"},{"line_number":49,"context_line":"        self.assertEqual(\u0027user_id\u0027, ctx.user_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2B7uw%3D","line":46,"in_reply_to":"AAAATn%2F%2FC4A%3D","updated":"2013-11-18 12:36:27.000000000","message":"Done.\n\ntest_neutron_context_create_with_name still tests ctx.user/tenant to check if ctx.user/tenant contains ID rather than name.","commit_id":"18523b31081a9b357c4011b702ec63c6e2818bed"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4e1cdcede044d0914727a59762ab003c9ce83cb1","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        ctx \u003d context.get_admin_context(load_admin_roles\u003dFalse)"},{"line_number":108,"context_line":"        self.assertFalse(ctx.roles)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def test_neutron_context_elevated(self):"},{"line_number":111,"context_line":"        ctx \u003d context.Context(\u0027user_id\u0027, \u0027tenant_id\u0027)"},{"line_number":112,"context_line":"        self.assertFalse(ctx.is_admin)"},{"line_number":113,"context_line":"        req_id_before \u003d ctx.request_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FC3c%3D","line":110,"updated":"2013-11-15 08:20:45.000000000","message":"(Suggestion only) Consider using more descriptive test names (e.g. test_neutron_context_elevation_retains_request_id).","commit_id":"18523b31081a9b357c4011b702ec63c6e2818bed"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8876e6339a9f2c580bfdd540f8762b1e1dcaf7d1","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        ctx \u003d context.get_admin_context(load_admin_roles\u003dFalse)"},{"line_number":108,"context_line":"        self.assertFalse(ctx.roles)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def test_neutron_context_elevated(self):"},{"line_number":111,"context_line":"        ctx \u003d context.Context(\u0027user_id\u0027, \u0027tenant_id\u0027)"},{"line_number":112,"context_line":"        self.assertFalse(ctx.is_admin)"},{"line_number":113,"context_line":"        req_id_before \u003d ctx.request_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2B7u4%3D","line":110,"in_reply_to":"AAAATn%2F%2FC3c%3D","updated":"2013-11-18 12:36:27.000000000","message":"Done","commit_id":"18523b31081a9b357c4011b702ec63c6e2818bed"}]}
