)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c0ddbed59150039017317f4f2b4b1a0810f2e4c1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Adam Young \u003cayoung@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-03-08 22:17:02 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: Move auth_token middleware from admin user to an RBAC policy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Before this patch auth_token middleware required admin user credentials"},{"line_number":10,"context_line":"stored in assorted config files. With this patch only non-admin user"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAN3%2F%2F1l8%3D","line":7,"updated":"2013-03-10 04:06:39.000000000","message":"remove WIP","commit_id":"917152b12b1c74777109a8f7b897aac3633ee4c9"}],"etc/policy.json":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c0ddbed59150039017317f4f2b4b1a0810f2e4c1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"admin_required\": [[\"role:admin\"], [\"is_admin:1\"]],"},{"line_number":3,"context_line":"    \"service_tenant\": [[\"project_id:service\"]],"},{"line_number":4,"context_line":"    \"service_or_admin\": [[\"role:admin\"],[\"is_admin:1\"],[\"project_id:service\"]],"},{"line_number":5,"context_line":"    \"owner\" : [[\"user_id:%(user_id)s\"]],"},{"line_number":6,"context_line":"    \"admin_or_owner\": [[\"rule:admin_required\"], [\"rule:owner\"]],"}],"source_content_type":"application/json","patch_set":3,"id":"AAAAN3%2F%2F1l0%3D","line":3,"updated":"2013-03-10 04:06:39.000000000","message":"i\u0027m wondering if we should use the term \u0027project\u0027 here instead of \u0027tenant\u0027?","commit_id":"917152b12b1c74777109a8f7b897aac3633ee4c9"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"cbc0d7a862d1269e3735523c65c4c4adcc3a8fdf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"admin_required\": [[\"role:admin\"], [\"is_admin:1\"]],"},{"line_number":3,"context_line":"    \"service_tenant\": [[\"project_id:service\"]],"},{"line_number":4,"context_line":"    \"service_or_admin\": [[\"role:admin\"],[\"is_admin:1\"],[\"project_id:service\"]],"},{"line_number":5,"context_line":"    \"owner\" : [[\"user_id:%(user_id)s\"]],"},{"line_number":6,"context_line":"    \"admin_or_owner\": [[\"rule:admin_required\"], [\"rule:owner\"]],"}],"source_content_type":"application/json","patch_set":3,"id":"AAAAN3%2F%2FzqI%3D","line":3,"in_reply_to":"AAAAN3%2F%2F1l0%3D","updated":"2013-03-11 21:42:13.000000000","message":"Done","commit_id":"917152b12b1c74777109a8f7b897aac3633ee4c9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c0ddbed59150039017317f4f2b4b1a0810f2e4c1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"admin_required\": [[\"role:admin\"], [\"is_admin:1\"]],"},{"line_number":3,"context_line":"    \"service_tenant\": [[\"project_id:service\"]],"},{"line_number":4,"context_line":"    \"service_or_admin\": [[\"role:admin\"],[\"is_admin:1\"],[\"project_id:service\"]],"},{"line_number":5,"context_line":"    \"owner\" : [[\"user_id:%(user_id)s\"]],"},{"line_number":6,"context_line":"    \"admin_or_owner\": [[\"rule:admin_required\"], [\"rule:owner\"]],"},{"line_number":7,"context_line":""}],"source_content_type":"application/json","patch_set":3,"id":"AAAAN3%2F%2F1l4%3D","line":4,"updated":"2013-03-10 04:06:39.000000000","message":"rather than redefining admin_required,\n\n  project_id:service or rule:admin_required","commit_id":"917152b12b1c74777109a8f7b897aac3633ee4c9"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"cbc0d7a862d1269e3735523c65c4c4adcc3a8fdf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"admin_required\": [[\"role:admin\"], [\"is_admin:1\"]],"},{"line_number":3,"context_line":"    \"service_tenant\": [[\"project_id:service\"]],"},{"line_number":4,"context_line":"    \"service_or_admin\": [[\"role:admin\"],[\"is_admin:1\"],[\"project_id:service\"]],"},{"line_number":5,"context_line":"    \"owner\" : [[\"user_id:%(user_id)s\"]],"},{"line_number":6,"context_line":"    \"admin_or_owner\": [[\"rule:admin_required\"], [\"rule:owner\"]],"},{"line_number":7,"context_line":""}],"source_content_type":"application/json","patch_set":3,"id":"AAAAN3%2F%2FzvI%3D","line":4,"in_reply_to":"AAAAN3%2F%2F1l4%3D","updated":"2013-03-11 21:42:13.000000000","message":"Done","commit_id":"917152b12b1c74777109a8f7b897aac3633ee4c9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c0ddbed59150039017317f4f2b4b1a0810f2e4c1","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    \"identity:update_policy\": [[\"rule:admin_required\"]],"},{"line_number":73,"context_line":"    \"identity:delete_policy\": [[\"rule:admin_required\"]],"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    \"identity:check_token\": [[\"rule:admin_required\"]],"},{"line_number":76,"context_line":"    \"identity:validate_token\": [[\"rule:service_or_admin\"]],"},{"line_number":77,"context_line":"    \"identity:validate_token_head\": [[\"rule:service_or_admin\"]],"},{"line_number":78,"context_line":"    \"identity:revocation_list\": [[\"rule:service_or_admin\"]],"}],"source_content_type":"application/json","patch_set":3,"id":"AAAAN3%2F%2F1ls%3D","line":75,"updated":"2013-03-10 04:06:39.000000000","message":"check_token is the v3 equivalent of validate_token_head -- I don\u0027t have a preference between the two but only one should be defined here, not both. the method name of the other should be changes in the controller and in the router that maps it.","commit_id":"917152b12b1c74777109a8f7b897aac3633ee4c9"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"6d1dbb59e9e81a33b7d270d8eefd44a17fc0878a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"admin_required\": [[\"role:admin\"], [\"is_admin:1\"]],"},{"line_number":3,"context_line":"    \"service_project\": [[\"project_id:service\"]],"},{"line_number":4,"context_line":"    \"service_or_admin\": [[\"rule:admin_required\"], [\"rule:service_project\"]],"},{"line_number":5,"context_line":"    \"owner\" : [[\"user_id:%(user_id)s\"]],"},{"line_number":6,"context_line":"    \"admin_or_owner\": [[\"rule:admin_required\"], [\"rule:owner\"]],"}],"source_content_type":"application/json","patch_set":6,"id":"AAAAN3%2F%2FzRM%3D","line":3,"updated":"2013-03-12 02:39:39.000000000","message":"This has been bothering me.  In v2 it is still tenant, not project.  If this is getting triggered by a V2 call, we have a problem with the values passed in the authenticate calls being changed.  If not ,then this needs to be and or rule for either project id or tenant matching.","commit_id":"43e887296c037ac39ecbf89262a67562da655b19"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"52153000884c3dd4f2a78f21c5eb34a99710fece","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"admin_required\": [[\"role:admin\"], [\"is_admin:1\"]],"},{"line_number":3,"context_line":"    \"service_project\": [[\"project_id:service\"], [\"tenant_id:service\"]],"},{"line_number":4,"context_line":"    \"service_or_admin\": [[\"rule:admin_required\"], [\"rule:service_project\"]],"},{"line_number":5,"context_line":"    \"owner\" : [[\"user_id:%(user_id)s\"]],"},{"line_number":6,"context_line":"    \"admin_or_owner\": [[\"rule:admin_required\"], [\"rule:owner\"]],"}],"source_content_type":"application/json","patch_set":7,"id":"AAAAN3%2F%2Fxu0%3D","line":3,"updated":"2013-03-12 21:08:52.000000000","message":"What about switching this over to a role check?","commit_id":"f8eab5125ffd82ea27cd3713c168710f03dea9c1"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"037f3d5b4e1ced85e4a46524a14d8433e72649b6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"admin_required\": [[\"role:admin\"], [\"is_admin:1\"]],"},{"line_number":3,"context_line":"    \"service_project\": [[\"project_id:service\"], [\"tenant_id:service\"]],"},{"line_number":4,"context_line":"    \"service_or_admin\": [[\"rule:admin_required\"], [\"rule:service_project\"]],"},{"line_number":5,"context_line":"    \"owner\" : [[\"user_id:%(user_id)s\"]],"},{"line_number":6,"context_line":"    \"admin_or_owner\": [[\"rule:admin_required\"], [\"rule:owner\"]],"}],"source_content_type":"application/json","patch_set":7,"id":"AAAAOH%2F%2F8Rs%3D","line":3,"in_reply_to":"AAAAN3%2F%2Fxu0%3D","updated":"2013-03-20 00:23:45.000000000","message":"Should be a role check.","commit_id":"f8eab5125ffd82ea27cd3713c168710f03dea9c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c9e0aa5ef1d7281095358a4c71ec76e5ed80dda5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"admin_required\": [[\"role:admin\"], [\"is_admin:1\"]],"},{"line_number":3,"context_line":"    \"service_project\": [[\"project_id:service\"], [\"tenant_id:service\"]],"},{"line_number":4,"context_line":"    \"service_or_admin\": [[\"rule:admin_required\"], [\"rule:service_project\"]],"},{"line_number":5,"context_line":"    \"owner\" : [[\"user_id:%(user_id)s\"]],"},{"line_number":6,"context_line":"    \"admin_or_owner\": [[\"rule:admin_required\"], [\"rule:owner\"]],"}],"source_content_type":"application/json","patch_set":7,"id":"AAAAOH%2F%2F8KM%3D","line":3,"in_reply_to":"AAAAOH%2F%2F8Rs%3D","updated":"2013-03-20 03:23:25.000000000","message":"checking for a specific tenant id is incredibly deployment specific, not to mention we don\u0027t provide for users to set a tenant id themselves","commit_id":"f8eab5125ffd82ea27cd3713c168710f03dea9c1"}],"keystone/common/controller.py":[{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"6b94cc9a253fc6f256d1448ce5ce40aca3eb6475","unresolved":false,"context_lines":[{"line_number":88,"context_line":"def protected(f):"},{"line_number":89,"context_line":"    \"\"\"Wraps API calls with role based access controls (RBAC).\"\"\""},{"line_number":90,"context_line":"    @functools.wraps(f)"},{"line_number":91,"context_line":"    def wrapper(self, context, *args, **kwargs):"},{"line_number":92,"context_line":"        if \u0027is_admin\u0027 in context and context[\u0027is_admin\u0027]:"},{"line_number":93,"context_line":"            LOG.warning(_(\u0027RBAC: Bypassing authorization\u0027))"},{"line_number":94,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAOn%2F%2Fbxc%3D","line":91,"updated":"2013-05-09 19:25:35.000000000","message":"what is this affecting?","commit_id":"ec68a250abf6fa78e059ef01d5353579184d3224"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"50822be8d12ea0aa8d954bbf44a7f12353b9ff78","unresolved":false,"context_lines":[{"line_number":88,"context_line":"def protected(f):"},{"line_number":89,"context_line":"    \"\"\"Wraps API calls with role based access controls (RBAC).\"\"\""},{"line_number":90,"context_line":"    @functools.wraps(f)"},{"line_number":91,"context_line":"    def wrapper(self, context, *args, **kwargs):"},{"line_number":92,"context_line":"        if \u0027is_admin\u0027 in context and context[\u0027is_admin\u0027]:"},{"line_number":93,"context_line":"            LOG.warning(_(\u0027RBAC: Bypassing authorization\u0027))"},{"line_number":94,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAO3%2F%2F%2BcY%3D","line":91,"in_reply_to":"AAAAOn%2F%2Fbxc%3D","updated":"2013-05-15 19:21:03.000000000","message":"This is needed for validate_token_head and validate_token","commit_id":"ec68a250abf6fa78e059ef01d5353579184d3224"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"fd653993658d12d6309561e56bbb146bcf2a9cbe","unresolved":false,"context_lines":[{"line_number":88,"context_line":"def protected(f):"},{"line_number":89,"context_line":"    \"\"\"Wraps API calls with role based access controls (RBAC).\"\"\""},{"line_number":90,"context_line":"    @functools.wraps(f)"},{"line_number":91,"context_line":"    def wrapper(self, context, *args, **kwargs):"},{"line_number":92,"context_line":"        if \u0027is_admin\u0027 in context and context[\u0027is_admin\u0027]:"},{"line_number":93,"context_line":"            LOG.warning(_(\u0027RBAC: Bypassing authorization\u0027))"},{"line_number":94,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAO3%2F%2F738%3D","line":91,"updated":"2013-05-16 18:28:33.000000000","message":"why are you accepting and then discarding *args?","commit_id":"6f09b96cd9069620823d0ba1fea2be38f48dc391"}],"keystone/token/controllers.py":[{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"6b94cc9a253fc6f256d1448ce5ce40aca3eb6475","unresolved":false,"context_lines":[{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        \"\"\""},{"line_number":459,"context_line":"        # TODO(termie): this stuff should probably be moved to middleware"},{"line_number":460,"context_line":"        self.assert_admin(context)"},{"line_number":461,"context_line":"        data \u003d self.token_api.get_token(context\u003dcontext,"},{"line_number":462,"context_line":"                                        token_id\u003dtoken_id)"},{"line_number":463,"context_line":"        if belongs_to:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAOn%2F%2Fbw4%3D","side":"PARENT","line":460,"updated":"2013-05-09 19:25:35.000000000","message":"i\u0027d like some re-assurance that this is still being gated appropriately","commit_id":"96a816f50d2ab9fdf88af4489d51f24188a555a4"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"50822be8d12ea0aa8d954bbf44a7f12353b9ff78","unresolved":false,"context_lines":[{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        \"\"\""},{"line_number":459,"context_line":"        # TODO(termie): this stuff should probably be moved to middleware"},{"line_number":460,"context_line":"        self.assert_admin(context)"},{"line_number":461,"context_line":"        data \u003d self.token_api.get_token(context\u003dcontext,"},{"line_number":462,"context_line":"                                        token_id\u003dtoken_id)"},{"line_number":463,"context_line":"        if belongs_to:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAO3%2F%2F%2BcQ%3D","side":"PARENT","line":460,"in_reply_to":"AAAAOn%2F%2Fbw4%3D","updated":"2013-05-15 19:21:03.000000000","message":"The unit test will cover this.  And the next step, once this patch lands, is to update devstack to use RPAC for service users.","commit_id":"96a816f50d2ab9fdf88af4489d51f24188a555a4"}],"tests/test_content_types.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c9e0aa5ef1d7281095358a4c71ec76e5ed80dda5","unresolved":false,"context_lines":[{"line_number":729,"context_line":"            expected_status\u003d401)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    def test_fetch_revocation_list_admin_200(self):"},{"line_number":732,"context_line":"        token \u003d \"ADMIN\""},{"line_number":733,"context_line":"        r \u003d self.restful_request("},{"line_number":734,"context_line":"            method\u003d\u0027GET\u0027,"},{"line_number":735,"context_line":"            path\u003d\u0027/v2.0/tokens/revoked\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAOH%2F%2F8KY%3D","line":732,"updated":"2013-03-20 03:23:25.000000000","message":"-2 this is asserting a bad behavior; you should be able to pull a revocation list with a real token","commit_id":"f8eab5125ffd82ea27cd3713c168710f03dea9c1"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"e9f6e0ede472bd550dee5aecde4ca1704f31f1e8","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            body\u003d{"},{"line_number":244,"context_line":"                \u0027auth\u0027: {"},{"line_number":245,"context_line":"                    \u0027passwordCredentials\u0027: {"},{"line_number":246,"context_line":"                        \u0027username\u0027: self.user_foo[\u0027name\u0027],"},{"line_number":247,"context_line":"                        \u0027password\u0027: self.user_foo[\u0027password\u0027],"},{"line_number":248,"context_line":"                    },"},{"line_number":249,"context_line":"                    \u0027tenantId\u0027: tenant_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOn%2F%2Fjqg%3D","line":246,"updated":"2013-05-03 22:55:50.000000000","message":"Not sure where user_foo comes from","commit_id":"d1afb2451499cf556c7e29a4440315121335cc64"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"1c0b026d1a5725977d47e740e9b7b83a9f51a30d","unresolved":false,"context_lines":[{"line_number":244,"context_line":"                \u0027auth\u0027: {"},{"line_number":245,"context_line":"                    \u0027passwordCredentials\u0027: {"},{"line_number":246,"context_line":"                        \u0027username\u0027: self.user_foo[\u0027name\u0027],"},{"line_number":247,"context_line":"                        \u0027password\u0027: self.user_foo[\u0027password\u0027],"},{"line_number":248,"context_line":"                    },"},{"line_number":249,"context_line":"                    \u0027tenantId\u0027: tenant_id,"},{"line_number":250,"context_line":"                },"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOn%2F%2FjiM%3D","line":247,"updated":"2013-05-04 03:30:00.000000000","message":"Fixtures, in the keystone/test.py file","commit_id":"d1afb2451499cf556c7e29a4440315121335cc64"},{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"6b94cc9a253fc6f256d1448ce5ce40aca3eb6475","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def get_scoped_token(self, **kwargs):"},{"line_number":236,"context_line":"        \"\"\"Convenience method so that we can test authenticated requests.\"\"\""},{"line_number":237,"context_line":"        tenant_id \u003d kwargs.pop(\u0027tenant_id\u0027, None)"},{"line_number":238,"context_line":"        if not tenant_id:"},{"line_number":239,"context_line":"            tenant_id \u003d self.tenant_bar[\u0027id\u0027]"},{"line_number":240,"context_line":"        r \u003d self.public_request("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAOn%2F%2FbxM%3D","line":237,"updated":"2013-05-09 19:25:35.000000000","message":"should we just have a tenant_id\u003dNone in the args?","commit_id":"ec68a250abf6fa78e059ef01d5353579184d3224"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"50822be8d12ea0aa8d954bbf44a7f12353b9ff78","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def get_scoped_token(self, **kwargs):"},{"line_number":236,"context_line":"        \"\"\"Convenience method so that we can test authenticated requests.\"\"\""},{"line_number":237,"context_line":"        tenant_id \u003d kwargs.pop(\u0027tenant_id\u0027, None)"},{"line_number":238,"context_line":"        if not tenant_id:"},{"line_number":239,"context_line":"            tenant_id \u003d self.tenant_bar[\u0027id\u0027]"},{"line_number":240,"context_line":"        r \u003d self.public_request("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAO3%2F%2F%2BcA%3D","line":237,"in_reply_to":"AAAAOn%2F%2FbxM%3D","updated":"2013-05-15 19:21:03.000000000","message":"Yes","commit_id":"ec68a250abf6fa78e059ef01d5353579184d3224"},{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"6b94cc9a253fc6f256d1448ce5ce40aca3eb6475","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        token \u003d self.get_scoped_token(tenant_id\u003d\u0027service\u0027)"},{"line_number":418,"context_line":"        r \u003d self.admin_request("},{"line_number":419,"context_line":"            path\u003d\u0027/v2.0/tokens/%(token_id)s\u0027 % {"},{"line_number":420,"context_line":"                \u0027token_id\u0027: token,"},{"line_number":421,"context_line":"            },"},{"line_number":422,"context_line":"            token\u003dtoken)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAOn%2F%2Fbw8%3D","line":419,"updated":"2013-05-09 19:25:35.000000000","message":"could we just build this on the previous line and make this request not take multiple lines?","commit_id":"ec68a250abf6fa78e059ef01d5353579184d3224"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"50822be8d12ea0aa8d954bbf44a7f12353b9ff78","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        token \u003d self.get_scoped_token(tenant_id\u003d\u0027service\u0027)"},{"line_number":418,"context_line":"        r \u003d self.admin_request("},{"line_number":419,"context_line":"            path\u003d\u0027/v2.0/tokens/%(token_id)s\u0027 % {"},{"line_number":420,"context_line":"                \u0027token_id\u0027: token,"},{"line_number":421,"context_line":"            },"},{"line_number":422,"context_line":"            token\u003dtoken)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAO3%2F%2F%2Bbo%3D","line":419,"in_reply_to":"AAAAOn%2F%2Fbw8%3D","updated":"2013-05-15 19:21:03.000000000","message":"yes","commit_id":"ec68a250abf6fa78e059ef01d5353579184d3224"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e8cfe29330f47abd780d217eb97310b1b0a57044","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def get_scoped_token(self, tenant_id\u003dNone):"},{"line_number":236,"context_line":"        \"\"\"Convenience method so that we can test authenticated requests.\"\"\""},{"line_number":237,"context_line":"        if not tenant_id:"},{"line_number":238,"context_line":"            tenant_id \u003d self.tenant_bar[\u0027id\u0027]"},{"line_number":239,"context_line":"        r \u003d self.public_request("},{"line_number":240,"context_line":"            method\u003d\u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2Fk%2B8%3D","line":237,"updated":"2013-05-30 04:19:16.000000000","message":"should be if tenant_id is None","commit_id":"3c3f5dc8973a28fcded50bdb65b7cd77cd772cc6"}]}
