)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a8eb9cb3a1fbe3ad554b496eff1d4f62582bc751","unresolved":false,"context_lines":[{"line_number":14,"context_line":"By providing a helper here we can improve the consistency across"},{"line_number":15,"context_line":"services to standardize the options and provide a common way to react to"},{"line_number":16,"context_line":"auth_token middleware improvements."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ic590b3ee359e9a9c27eef3d11c0738066f475881"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a2fa921_8455a41e","line":17,"updated":"2015-10-05 20:40:19.000000000","message":"This needs a bug or a blueprint (preferably a spec).","commit_id":"00f08a1fbfc7d48fe37a710cc9860f8fa9d1a184"}],"oslo_context/context.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a8eb9cb3a1fbe3ad554b496eff1d4f62582bc751","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            resource_uuid\u003dctx.get(\"resource_uuid\"))"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @classmethod"},{"line_number":110,"context_line":"    def from_environ(cls, environ, **kwargs):"},{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            user \u003d environ[\u0027keystone.token_auth\u0027].user"},{"line_number":113,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_c474fcd0","line":110,"updated":"2015-10-05 20:40:19.000000000","message":"public symbols need docstrings.","commit_id":"00f08a1fbfc7d48fe37a710cc9860f8fa9d1a184"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"544a3b579d711e6bdd014737ec1c855f9e7de4de","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            resource_uuid\u003dctx.get(\"resource_uuid\"))"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @classmethod"},{"line_number":110,"context_line":"    def from_environ(cls, environ, **kwargs):"},{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            user \u003d environ[\u0027keystone.token_auth\u0027].user"},{"line_number":113,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_611ea3bc","line":110,"in_reply_to":"7a2fa921_c474fcd0","updated":"2016-01-06 00:32:09.000000000","message":"Done","commit_id":"00f08a1fbfc7d48fe37a710cc9860f8fa9d1a184"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a8eb9cb3a1fbe3ad554b496eff1d4f62582bc751","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    @classmethod"},{"line_number":110,"context_line":"    def from_environ(cls, environ, **kwargs):"},{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            user \u003d environ[\u0027keystone.token_auth\u0027].user"},{"line_number":113,"context_line":"        except KeyError:"},{"line_number":114,"context_line":"            kwargs.setdefault(\u0027auth_token\u0027, environ.get(\u0027HTTP_X_AUTH_TOKEN\u0027))"},{"line_number":115,"context_line":"            kwargs.setdefault(\u0027user\u0027, environ.get(\u0027HTTP_X_USER_ID\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_c422bcb9","line":112,"updated":"2015-10-05 20:40:19.000000000","message":"needs a comment where why \u0027keystone.token_auth\u0027 is used.","commit_id":"00f08a1fbfc7d48fe37a710cc9860f8fa9d1a184"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"544a3b579d711e6bdd014737ec1c855f9e7de4de","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    @classmethod"},{"line_number":110,"context_line":"    def from_environ(cls, environ, **kwargs):"},{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            user \u003d environ[\u0027keystone.token_auth\u0027].user"},{"line_number":113,"context_line":"        except KeyError:"},{"line_number":114,"context_line":"            kwargs.setdefault(\u0027auth_token\u0027, environ.get(\u0027HTTP_X_AUTH_TOKEN\u0027))"},{"line_number":115,"context_line":"            kwargs.setdefault(\u0027user\u0027, environ.get(\u0027HTTP_X_USER_ID\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_217bcbf6","line":112,"in_reply_to":"7a2fa921_c422bcb9","updated":"2016-01-06 00:32:09.000000000","message":"Done","commit_id":"00f08a1fbfc7d48fe37a710cc9860f8fa9d1a184"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a8eb9cb3a1fbe3ad554b496eff1d4f62582bc751","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            user \u003d environ[\u0027keystone.token_auth\u0027].user"},{"line_number":113,"context_line":"        except KeyError:"},{"line_number":114,"context_line":"            kwargs.setdefault(\u0027auth_token\u0027, environ.get(\u0027HTTP_X_AUTH_TOKEN\u0027))"},{"line_number":115,"context_line":"            kwargs.setdefault(\u0027user\u0027, environ.get(\u0027HTTP_X_USER_ID\u0027))"},{"line_number":116,"context_line":"            kwargs.setdefault(\u0027tenant\u0027, environ.get(\u0027HTTP_X_PROJECT_ID\u0027))"},{"line_number":117,"context_line":"            kwargs.setdefault(\u0027user_domain\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_441d4c72","line":114,"updated":"2015-10-05 20:40:19.000000000","message":"needs a comment where \u0027HTTP_X_AUTH_TOKEN\u0027, etc., is coming from.","commit_id":"00f08a1fbfc7d48fe37a710cc9860f8fa9d1a184"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"544a3b579d711e6bdd014737ec1c855f9e7de4de","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            user \u003d environ[\u0027keystone.token_auth\u0027].user"},{"line_number":113,"context_line":"        except KeyError:"},{"line_number":114,"context_line":"            kwargs.setdefault(\u0027auth_token\u0027, environ.get(\u0027HTTP_X_AUTH_TOKEN\u0027))"},{"line_number":115,"context_line":"            kwargs.setdefault(\u0027user\u0027, environ.get(\u0027HTTP_X_USER_ID\u0027))"},{"line_number":116,"context_line":"            kwargs.setdefault(\u0027tenant\u0027, environ.get(\u0027HTTP_X_PROJECT_ID\u0027))"},{"line_number":117,"context_line":"            kwargs.setdefault(\u0027user_domain\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_811b97c9","line":114,"in_reply_to":"7a2fa921_441d4c72","updated":"2016-01-06 00:32:09.000000000","message":"Done","commit_id":"00f08a1fbfc7d48fe37a710cc9860f8fa9d1a184"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6fc1432f3b157dc3b7cbbad3ed755ab2797aa7aa","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        :type environ: dict"},{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        try:"},{"line_number":120,"context_line":"            user \u003d environ[\u0027keystone.token_auth\u0027].user"},{"line_number":121,"context_line":"        except KeyError:"},{"line_number":122,"context_line":"            # if there is no user auth plugin from auth_token middleware then"},{"line_number":123,"context_line":"            # we read the headers out of the environment."}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_b03287a5","line":120,"updated":"2016-01-06 16:43:44.000000000","message":"there should be a comment that says why \"keystone.token_auth\" was used. Reference the auth_token middleware docs.","commit_id":"641be4e3cd3f1a43e0d82ce434dcf83489c736a5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6fc1432f3b157dc3b7cbbad3ed755ab2797aa7aa","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        except KeyError:"},{"line_number":122,"context_line":"            # if there is no user auth plugin from auth_token middleware then"},{"line_number":123,"context_line":"            # we read the headers out of the environment."},{"line_number":124,"context_line":"            kwargs.setdefault(\u0027auth_token\u0027, environ.get(\u0027HTTP_X_AUTH_TOKEN\u0027))"},{"line_number":125,"context_line":"            kwargs.setdefault(\u0027user\u0027, environ.get(\u0027HTTP_X_USER_ID\u0027))"},{"line_number":126,"context_line":"            kwargs.setdefault(\u0027tenant\u0027, environ.get(\u0027HTTP_X_PROJECT_ID\u0027))"},{"line_number":127,"context_line":"            kwargs.setdefault(\u0027user_domain\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_f099df79","line":124,"updated":"2016-01-06 16:43:44.000000000","message":"there should also be a reference to auth_token middleware docs.","commit_id":"641be4e3cd3f1a43e0d82ce434dcf83489c736a5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d8ac2099c26e0bf2d16d2fa92f64064a2823ecda","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        except KeyError:"},{"line_number":122,"context_line":"            # if there is no user auth plugin from auth_token middleware then"},{"line_number":123,"context_line":"            # we read the headers out of the environment."},{"line_number":124,"context_line":"            kwargs.setdefault(\u0027auth_token\u0027, environ.get(\u0027HTTP_X_AUTH_TOKEN\u0027))"},{"line_number":125,"context_line":"            kwargs.setdefault(\u0027user\u0027, environ.get(\u0027HTTP_X_USER_ID\u0027))"},{"line_number":126,"context_line":"            kwargs.setdefault(\u0027tenant\u0027, environ.get(\u0027HTTP_X_PROJECT_ID\u0027))"},{"line_number":127,"context_line":"            kwargs.setdefault(\u0027user_domain\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_6e0c79ec","line":124,"in_reply_to":"fa69d971_f099df79","updated":"2016-01-10 23:59:54.000000000","message":"Done","commit_id":"641be4e3cd3f1a43e0d82ce434dcf83489c736a5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6fc1432f3b157dc3b7cbbad3ed755ab2797aa7aa","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                              environ.get(\u0027HTTP_X_PROJECT_DOMAIN_ID\u0027))"},{"line_number":131,"context_line":"        else:"},{"line_number":132,"context_line":"            # if the user auth plugin from auth_token middleware is present"},{"line_number":133,"context_line":"            # then it is easier to just use that"},{"line_number":134,"context_line":"            kwargs.setdefault(\u0027auth_token\u0027, user.auth_token)"},{"line_number":135,"context_line":"            kwargs.setdefault(\u0027user\u0027, user.user_id)"},{"line_number":136,"context_line":"            kwargs.setdefault(\u0027user_domain\u0027, user.user_domain_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_d0acdb8d","line":133,"updated":"2016-01-06 16:43:44.000000000","message":"It doesn\u0027t look any easier to me. We should use this method if this is what auth_token suggests.","commit_id":"641be4e3cd3f1a43e0d82ce434dcf83489c736a5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d8ac2099c26e0bf2d16d2fa92f64064a2823ecda","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                              environ.get(\u0027HTTP_X_PROJECT_DOMAIN_ID\u0027))"},{"line_number":131,"context_line":"        else:"},{"line_number":132,"context_line":"            # if the user auth plugin from auth_token middleware is present"},{"line_number":133,"context_line":"            # then it is easier to just use that"},{"line_number":134,"context_line":"            kwargs.setdefault(\u0027auth_token\u0027, user.auth_token)"},{"line_number":135,"context_line":"            kwargs.setdefault(\u0027user\u0027, user.user_id)"},{"line_number":136,"context_line":"            kwargs.setdefault(\u0027user_domain\u0027, user.user_domain_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_8e11ad06","line":133,"in_reply_to":"fa69d971_d0acdb8d","updated":"2016-01-10 23:59:54.000000000","message":"you know, for now i don\u0027t even need the plugin so i\u0027ll just scrap this and use the ENV that everyone expects.","commit_id":"641be4e3cd3f1a43e0d82ce434dcf83489c736a5"}],"oslo_context/tests/test_context.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a8eb9cb3a1fbe3ad554b496eff1d4f62582bc751","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.assertEqual(\"instance1\", ctx.resource_uuid)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_from_auth_plugin(self):"},{"line_number":94,"context_line":"        u \u003d Object()"},{"line_number":95,"context_line":"        u.user \u003d Object()"},{"line_number":96,"context_line":"        u.user.auth_token \u003d \u0027auth_token\u0027"},{"line_number":97,"context_line":"        u.user.user_id \u003d \u0027user_id\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_c7371ee2","line":94,"updated":"2015-10-05 20:40:19.000000000","message":"auth_token should provide a fixture for this.","commit_id":"00f08a1fbfc7d48fe37a710cc9860f8fa9d1a184"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"544a3b579d711e6bdd014737ec1c855f9e7de4de","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.assertEqual(\"instance1\", ctx.resource_uuid)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_from_auth_plugin(self):"},{"line_number":94,"context_line":"        u \u003d Object()"},{"line_number":95,"context_line":"        u.user \u003d Object()"},{"line_number":96,"context_line":"        u.user.auth_token \u003d \u0027auth_token\u0027"},{"line_number":97,"context_line":"        u.user.user_id \u003d \u0027user_id\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_21142b9e","line":94,"in_reply_to":"7a2fa921_c7371ee2","updated":"2016-01-06 00:32:09.000000000","message":"there is a fixture for stubbing auth_token middleware, it could probably be used here, but it\u0027s a bit more difficult that just creating the object","commit_id":"00f08a1fbfc7d48fe37a710cc9860f8fa9d1a184"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a8eb9cb3a1fbe3ad554b496eff1d4f62582bc751","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.assertEqual(\u0027user_id\u0027, ctx.user)"},{"line_number":106,"context_line":"        self.assertEqual(\u0027project_id\u0027, ctx.tenant)"},{"line_number":107,"context_line":"        self.assertEqual(\u0027user_domain_id\u0027, ctx.user_domain)"},{"line_number":108,"context_line":"        self.assertEqual(\u0027project_domain_id\u0027, ctx.project_domain)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_47522e15","line":108,"updated":"2015-10-05 20:40:19.000000000","message":"there needs to be a test for the case where \u0027keystone.token_auth\u0027 isn\u0027t present.","commit_id":"00f08a1fbfc7d48fe37a710cc9860f8fa9d1a184"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"544a3b579d711e6bdd014737ec1c855f9e7de4de","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.assertEqual(\u0027user_id\u0027, ctx.user)"},{"line_number":106,"context_line":"        self.assertEqual(\u0027project_id\u0027, ctx.tenant)"},{"line_number":107,"context_line":"        self.assertEqual(\u0027user_domain_id\u0027, ctx.user_domain)"},{"line_number":108,"context_line":"        self.assertEqual(\u0027project_domain_id\u0027, ctx.project_domain)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_010fa788","line":108,"in_reply_to":"7a2fa921_47522e15","updated":"2016-01-06 00:32:09.000000000","message":"yes","commit_id":"00f08a1fbfc7d48fe37a710cc9860f8fa9d1a184"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6fc1432f3b157dc3b7cbbad3ed755ab2797aa7aa","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        self.assertTrue(context.is_user_context(ctx))"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_from_auth_plugin(self):"},{"line_number":101,"context_line":"        u \u003d Object()"},{"line_number":102,"context_line":"        u.user \u003d Object()"},{"line_number":103,"context_line":"        u.user.auth_token \u003d \u0027auth_token\u0027"},{"line_number":104,"context_line":"        u.user.user_id \u003d \u0027user_id\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_70372f4d","line":101,"updated":"2016-01-06 16:43:44.000000000","message":"a comment would help why Object() is used.","commit_id":"641be4e3cd3f1a43e0d82ce434dcf83489c736a5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6fc1432f3b157dc3b7cbbad3ed755ab2797aa7aa","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def test_from_auth_plugin(self):"},{"line_number":101,"context_line":"        u \u003d Object()"},{"line_number":102,"context_line":"        u.user \u003d Object()"},{"line_number":103,"context_line":"        u.user.auth_token \u003d \u0027auth_token\u0027"},{"line_number":104,"context_line":"        u.user.user_id \u003d \u0027user_id\u0027"},{"line_number":105,"context_line":"        u.user.project_id \u003d \u0027project_id\u0027"},{"line_number":106,"context_line":"        u.user.user_domain_id \u003d \u0027user_domain_id\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_f01a3fc5","line":103,"updated":"2016-01-06 16:43:44.000000000","message":"suggest use random strings so that it\u0027s obvious that there\u0027s nothing special about \u0027auth_token\u0027","commit_id":"641be4e3cd3f1a43e0d82ce434dcf83489c736a5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6fc1432f3b157dc3b7cbbad3ed755ab2797aa7aa","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        self.assertEqual(\u0027project_domain_id\u0027, ctx.project_domain)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_from_environ_variables(self):"},{"line_number":118,"context_line":"        environ \u003d {\u0027HTTP_X_AUTH_TOKEN\u0027: \u0027auth_token\u0027,"},{"line_number":119,"context_line":"                   \u0027HTTP_X_USER_ID\u0027: \u0027user_id\u0027,"},{"line_number":120,"context_line":"                   \u0027HTTP_X_PROJECT_ID\u0027: \u0027project_id\u0027,"},{"line_number":121,"context_line":"                   \u0027HTTP_X_USER_DOMAIN_ID\u0027: \u0027user_domain_id\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_1071130f","line":118,"updated":"2016-01-06 16:43:44.000000000","message":"suggest use random strings.","commit_id":"641be4e3cd3f1a43e0d82ce434dcf83489c736a5"}]}
