)]}'
{"keystone/common/controller.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5be0a4c828532057c8ebca7a3057b0b2838f5640","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    val \u003d False"},{"line_number":224,"context_line":"                else:"},{"line_number":225,"context_line":"                    val \u003d True"},{"line_number":226,"context_line":"                return (ref_attr \u003d\u003d val)"},{"line_number":227,"context_line":"            else:"},{"line_number":228,"context_line":"                return (ref_attr \u003d\u003d val_attr)"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BnsA%3D","line":226,"updated":"2013-02-25 16:54:14.000000000","message":"Is \"ref_attr\" also a boolean? Do we need to worry about converting it to boolean as well?","commit_id":"b6e72e537bb2785a01e87411becbcbbadd3daf58"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4885505ced0e90a8850a41d4bdfeb7920a5b1230","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    val \u003d False"},{"line_number":224,"context_line":"                else:"},{"line_number":225,"context_line":"                    val \u003d True"},{"line_number":226,"context_line":"                return (ref_attr \u003d\u003d val)"},{"line_number":227,"context_line":"            else:"},{"line_number":228,"context_line":"                return (ref_attr \u003d\u003d val_attr)"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Bnpc%3D","line":226,"in_reply_to":"AAAAM3%2F%2BnsA%3D","updated":"2013-02-25 17:07:18.000000000","message":"Yes, ref_attr here will be a true boolean, see check further up...so I don\u0027t think any conversion is needed","commit_id":"b6e72e537bb2785a01e87411becbcbbadd3daf58"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"de96d11a65b11fc55dca73e9aaeeba5eb4bbe0ce","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            \"\"\""},{"line_number":226,"context_line":"            if type(ref_attr) \u003d\u003d bool:"},{"line_number":227,"context_line":"                if (isinstance(val_attr, basestring) and"},{"line_number":228,"context_line":"                        val_attr.lower() in DISABLED_VALUES):"},{"line_number":229,"context_line":"                    val \u003d False"},{"line_number":230,"context_line":"                else:"},{"line_number":231,"context_line":"                    val \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkR8%3D","line":228,"updated":"2013-02-27 05:43:18.000000000","message":"DISABLED_VALUES has only \u00270\u0027? Then why do \"in\" or val_attr.lower()?","commit_id":"b485891547e976ff9e34fd2c6930ca2229a91cb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bcc489fae4099a4f0046c22daa2cac665545bffa","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            \"\"\""},{"line_number":226,"context_line":"            if type(ref_attr) \u003d\u003d bool:"},{"line_number":227,"context_line":"                if (isinstance(val_attr, basestring) and"},{"line_number":228,"context_line":"                        val_attr.lower() in DISABLED_VALUES):"},{"line_number":229,"context_line":"                    val \u003d False"},{"line_number":230,"context_line":"                else:"},{"line_number":231,"context_line":"                    val \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkL0%3D","line":228,"in_reply_to":"AAAAM3%2F%2BkR8%3D","updated":"2013-02-27 06:54:48.000000000","message":"OK, will change it - there was a debate about whether we should also check for \u0027false\u0027, \u0027False\u0027 etc., which is why it was a list.  I left it like that in case we changed our minds!  Provided we don\u0027t, I\u0027ll just make it a simple equality check!","commit_id":"b485891547e976ff9e34fd2c6930ca2229a91cb7"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"f90efd8a2f6503921265267b0728b838237391b4","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            \"\"\""},{"line_number":254,"context_line":"            if type(ref_attr) \u003d\u003d bool:"},{"line_number":255,"context_line":"                if (isinstance(val_attr, basestring) and"},{"line_number":256,"context_line":"                        val_attr.lower() \u003d\u003d \u00270\u0027):"},{"line_number":257,"context_line":"                    val \u003d False"},{"line_number":258,"context_line":"                else:"},{"line_number":259,"context_line":"                    val \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bja4%3D","line":256,"updated":"2013-02-27 16:59:04.000000000","message":"no need for lower() if we are only comparing it against \u00270\u0027.","commit_id":"5fe62ded29318e2617059d4aebe182350aa7ec8d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"8c0927e28ad89cdbd1b8b388c7b2be45a907010b","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            \"\"\""},{"line_number":254,"context_line":"            if type(ref_attr) \u003d\u003d bool:"},{"line_number":255,"context_line":"                if (isinstance(val_attr, basestring) and"},{"line_number":256,"context_line":"                        val_attr.lower() \u003d\u003d \u00270\u0027):"},{"line_number":257,"context_line":"                    val \u003d False"},{"line_number":258,"context_line":"                else:"},{"line_number":259,"context_line":"                    val \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BjWc%3D","line":256,"in_reply_to":"AAAAM3%2F%2Bja4%3D","updated":"2013-02-27 17:58:53.000000000","message":"Done","commit_id":"5fe62ded29318e2617059d4aebe182350aa7ec8d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"60be311b72393eb477b7865e74dfcada01a3ccdb","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            no value implies \u0027True\u0027"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"            \"\"\""},{"line_number":254,"context_line":"            if type(ref_attr) \u003d\u003d bool:"},{"line_number":255,"context_line":"                if (isinstance(val_attr, basestring) and"},{"line_number":256,"context_line":"                        val_attr \u003d\u003d \u00270\u0027):"},{"line_number":257,"context_line":"                    val \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F2c0%3D","line":254,"updated":"2013-03-08 21:01:38.000000000","message":"use \u0027is\u0027 when comparing identities","commit_id":"f3100d76767fcd9a17a895caf71f6762e7291685"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"567207085d322f64a6c6cc2d2b79dc1177de4011","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            no value implies \u0027True\u0027"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"            \"\"\""},{"line_number":254,"context_line":"            if type(ref_attr) \u003d\u003d bool:"},{"line_number":255,"context_line":"                if (isinstance(val_attr, basestring) and"},{"line_number":256,"context_line":"                        val_attr \u003d\u003d \u00270\u0027):"},{"line_number":257,"context_line":"                    val \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F1wo%3D","line":254,"in_reply_to":"AAAAN3%2F%2F2c0%3D","updated":"2013-03-09 20:40:58.000000000","message":"Done","commit_id":"f3100d76767fcd9a17a895caf71f6762e7291685"}],"tests/test_v3.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"f90efd8a2f6503921265267b0728b838237391b4","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        sql_util.setup_test_database()"},{"line_number":32,"context_line":"        self.load_backends()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        if load_sample_data:"},{"line_number":35,"context_line":"            self.domain_id \u003d uuid.uuid4().hex"},{"line_number":36,"context_line":"            self.domain \u003d self.new_domain_ref()"},{"line_number":37,"context_line":"            self.domain[\u0027id\u0027] \u003d self.domain_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BjY4%3D","line":34,"updated":"2013-02-27 16:59:04.000000000","message":"you are still incurring the overhead of setup_test_database() and load_backend(). May want to consider moving the build_authentication_request() methods outside of RestfulTestCase class and make them accessible to other tests.","commit_id":"5fe62ded29318e2617059d4aebe182350aa7ec8d"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"4797a31c370627e792bfdd3152697b26f7ffa97c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        sql_util.setup_test_database()"},{"line_number":32,"context_line":"        self.load_backends()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        if load_sample_data:"},{"line_number":35,"context_line":"            self.domain_id \u003d uuid.uuid4().hex"},{"line_number":36,"context_line":"            self.domain \u003d self.new_domain_ref()"},{"line_number":37,"context_line":"            self.domain[\u0027id\u0027] \u003d self.domain_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BjEQ%3D","line":34,"in_reply_to":"AAAAM3%2F%2BjRM%3D","updated":"2013-02-27 19:49:59.000000000","message":"That\u0027s fine.","commit_id":"5fe62ded29318e2617059d4aebe182350aa7ec8d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9da273508fffc14b5586ec1c1cbfa316e9d8cf3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        sql_util.setup_test_database()"},{"line_number":32,"context_line":"        self.load_backends()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        if load_sample_data:"},{"line_number":35,"context_line":"            self.domain_id \u003d uuid.uuid4().hex"},{"line_number":36,"context_line":"            self.domain \u003d self.new_domain_ref()"},{"line_number":37,"context_line":"            self.domain[\u0027id\u0027] \u003d self.domain_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BjRM%3D","line":34,"in_reply_to":"AAAAM3%2F%2BjY4%3D","updated":"2013-02-27 18:06:29.000000000","message":"So all the new test cases I wrote actually need the test dababase and backends.  The only one that doesn\u0027t was the existing one (class TestAuthInfo(AuthTest), the functionality of which I have not changed.  While it is excellent to try and become more efficient, I think making that class better is really outside of the scope of this change.  Given the impending  rc1, maybe we raise a bug on it and come back and fix later?","commit_id":"5fe62ded29318e2617059d4aebe182350aa7ec8d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2f5b35cbd6e1febb46cec9b1dcfa6cd41f0b0f1","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                user_id, username, user_domain_id, user_domain_name, password)"},{"line_number":349,"context_line":"        if project_id or project_name or domain_id or domain_name:"},{"line_number":350,"context_line":"            auth_data[\u0027scope\u0027] \u003d self.build_auth_scope(project_id,"},{"line_number":351,"context_line":"                                                       project_name,"},{"line_number":352,"context_line":"                                                       project_domain_id,"},{"line_number":353,"context_line":"                                                       project_domain_name,"},{"line_number":354,"context_line":"                                                       domain_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2BOE%3D","line":351,"updated":"2013-03-04 22:54:37.000000000","message":"suggest use keyword arguments for keyword parameters, e.g., change to project_name\u003dproject_name, etc.","commit_id":"f3100d76767fcd9a17a895caf71f6762e7291685"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"60be311b72393eb477b7865e74dfcada01a3ccdb","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                user_id, username, user_domain_id, user_domain_name, password)"},{"line_number":349,"context_line":"        if project_id or project_name or domain_id or domain_name:"},{"line_number":350,"context_line":"            auth_data[\u0027scope\u0027] \u003d self.build_auth_scope(project_id,"},{"line_number":351,"context_line":"                                                       project_name,"},{"line_number":352,"context_line":"                                                       project_domain_id,"},{"line_number":353,"context_line":"                                                       project_domain_name,"},{"line_number":354,"context_line":"                                                       domain_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F2ck%3D","line":351,"in_reply_to":"AAAAN3%2F%2F%2BOE%3D","updated":"2013-03-08 21:01:38.000000000","message":"better yet, pass through all the parameters that you don\u0027t need as done in master using **kwargs -- i\u0027m guessing this patch needs a rebase?","commit_id":"f3100d76767fcd9a17a895caf71f6762e7291685"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"567207085d322f64a6c6cc2d2b79dc1177de4011","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                user_id, username, user_domain_id, user_domain_name, password)"},{"line_number":349,"context_line":"        if project_id or project_name or domain_id or domain_name:"},{"line_number":350,"context_line":"            auth_data[\u0027scope\u0027] \u003d self.build_auth_scope(project_id,"},{"line_number":351,"context_line":"                                                       project_name,"},{"line_number":352,"context_line":"                                                       project_domain_id,"},{"line_number":353,"context_line":"                                                       project_domain_name,"},{"line_number":354,"context_line":"                                                       domain_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F1xo%3D","line":351,"in_reply_to":"AAAAN3%2F%2F2ck%3D","updated":"2013-03-09 20:40:58.000000000","message":"yes, already done by someone else...have rebased onto that","commit_id":"f3100d76767fcd9a17a895caf71f6762e7291685"}],"tests/test_v3_auth.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"de96d11a65b11fc55dca73e9aaeeba5eb4bbe0ce","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        return self.assertDictEqual(normalize(a), normalize(b))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class TestAuthInfo(AuthTest):"},{"line_number":108,"context_line":"    def test_missing_auth_methods(self):"},{"line_number":109,"context_line":"        auth_data \u003d {\u0027authentication\u0027: {}}"},{"line_number":110,"context_line":"        auth_data[\u0027authentication\u0027][\u0027token\u0027] \u003d {\u0027id\u0027: uuid.uuid4().hex}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkRw%3D","line":107,"updated":"2013-02-27 05:43:18.000000000","message":"No need to extend AuthTest because these tests are all negative tests. No need to add the load_fixtures overhead.","commit_id":"b485891547e976ff9e34fd2c6930ca2229a91cb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bcc489fae4099a4f0046c22daa2cac665545bffa","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        return self.assertDictEqual(normalize(a), normalize(b))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class TestAuthInfo(AuthTest):"},{"line_number":108,"context_line":"    def test_missing_auth_methods(self):"},{"line_number":109,"context_line":"        auth_data \u003d {\u0027authentication\u0027: {}}"},{"line_number":110,"context_line":"        auth_data[\u0027authentication\u0027][\u0027token\u0027] \u003d {\u0027id\u0027: uuid.uuid4().hex}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkKs%3D","line":107,"in_reply_to":"AAAAM3%2F%2BkRw%3D","updated":"2013-02-27 06:54:48.000000000","message":"true...although do need the authentication build helpers from test_v3.RestfulTestCase...so will use that, and call setup with load_sample_data\u003dFalse.","commit_id":"b485891547e976ff9e34fd2c6930ca2229a91cb7"}],"tests/test_v3_protection.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"de96d11a65b11fc55dca73e9aaeeba5eb4bbe0ce","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        # Now try for domainB, which should fail"},{"line_number":193,"context_line":"        url_by_name \u003d \u0027/users?domain_id\u003d%s\u0027 % self.domainB[\u0027id\u0027]"},{"line_number":194,"context_line":"        r \u003d self.get(url_by_name, auth\u003dself.auth,"},{"line_number":195,"context_line":"                     expected_status\u003dexception.ForbiddenAction.code)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_list_groups_protected_by_domain(self):"},{"line_number":198,"context_line":"        \"\"\"GET /groups?domain_id\u003dmydomain (protected)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkRQ%3D","line":195,"updated":"2013-02-27 05:43:18.000000000","message":"Forbidden instead of an empty list? That by design?","commit_id":"b485891547e976ff9e34fd2c6930ca2229a91cb7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bcc489fae4099a4f0046c22daa2cac665545bffa","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        # Now try for domainB, which should fail"},{"line_number":193,"context_line":"        url_by_name \u003d \u0027/users?domain_id\u003d%s\u0027 % self.domainB[\u0027id\u0027]"},{"line_number":194,"context_line":"        r \u003d self.get(url_by_name, auth\u003dself.auth,"},{"line_number":195,"context_line":"                     expected_status\u003dexception.ForbiddenAction.code)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_list_groups_protected_by_domain(self):"},{"line_number":198,"context_line":"        \"\"\"GET /groups?domain_id\u003dmydomain (protected)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkLk%3D","line":195,"in_reply_to":"AAAAM3%2F%2BkRQ%3D","updated":"2013-02-27 06:54:48.000000000","message":"It should depend whether the \"failure\" is simply due to filtering returning nothing (in which case you should get an empty list), or whether you have asked for something you don\u0027t have authorization for.  This case is the latter.","commit_id":"b485891547e976ff9e34fd2c6930ca2229a91cb7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2f5b35cbd6e1febb46cec9b1dcfa6cd41f0b0f1","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        As well as the usual housekeeping, create a set of domains,"},{"line_number":42,"context_line":"        users, roles and projects for the subsequent tests:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        - Three domains: A,B \u0026 c.  C is disabled."},{"line_number":45,"context_line":"        - DomainA has user1, DomainB has user2 and user3"},{"line_number":46,"context_line":"        - DomainA has group1 and group2, DomainB has group3"},{"line_number":47,"context_line":"        - User1 has a role on DomainA"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2BN4%3D","line":44,"updated":"2013-03-04 22:54:37.000000000","message":"(nit) \"c\" -\u003e \"C\"","commit_id":"f3100d76767fcd9a17a895caf71f6762e7291685"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"567207085d322f64a6c6cc2d2b79dc1177de4011","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        As well as the usual housekeeping, create a set of domains,"},{"line_number":42,"context_line":"        users, roles and projects for the subsequent tests:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        - Three domains: A,B \u0026 c.  C is disabled."},{"line_number":45,"context_line":"        - DomainA has user1, DomainB has user2 and user3"},{"line_number":46,"context_line":"        - DomainA has group1 and group2, DomainB has group3"},{"line_number":47,"context_line":"        - User1 has a role on DomainA"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F1xs%3D","line":44,"in_reply_to":"AAAAN3%2F%2F%2BN4%3D","updated":"2013-03-09 20:40:58.000000000","message":"Done","commit_id":"f3100d76767fcd9a17a895caf71f6762e7291685"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2f5b35cbd6e1febb46cec9b1dcfa6cd41f0b0f1","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        self.assertEqual(len(id_list), 3)"},{"line_number":309,"context_line":"        self.assertIn(self.domainA[\u0027id\u0027], id_list)"},{"line_number":310,"context_line":"        self.assertIn(self.domainB[\u0027id\u0027], id_list)"},{"line_number":311,"context_line":"        self.assertIn(DEFAULT_DOMAIN_ID, id_list)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2BNE%3D","line":311,"updated":"2013-03-04 22:54:37.000000000","message":"suggest add a test case where use all of the possible filters together.","commit_id":"f3100d76767fcd9a17a895caf71f6762e7291685"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"567207085d322f64a6c6cc2d2b79dc1177de4011","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        self.assertEqual(len(id_list), 3)"},{"line_number":309,"context_line":"        self.assertIn(self.domainA[\u0027id\u0027], id_list)"},{"line_number":310,"context_line":"        self.assertIn(self.domainB[\u0027id\u0027], id_list)"},{"line_number":311,"context_line":"        self.assertIn(DEFAULT_DOMAIN_ID, id_list)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F1xw%3D","line":311,"in_reply_to":"AAAAN3%2F%2F%2BNE%3D","updated":"2013-03-09 20:40:58.000000000","message":"Done","commit_id":"f3100d76767fcd9a17a895caf71f6762e7291685"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"dd69097c69de2379751d2e78129d5a53dec6d718","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        - DomainA has group1 and group2, DomainB has group3"},{"line_number":47,"context_line":"        - User1 has a role on DomainA"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        Remember that there will also be a third domain in existence,"},{"line_number":50,"context_line":"        the default domain."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2FzbI%3D","line":49,"updated":"2013-03-12 00:17:28.000000000","message":"(nit) \"third\" -\u003e \"fourth\" (or should it be \"fifth\", could also change to \"Amongst the domains ...\")","commit_id":"6b733ef2938f4da9a6462c7255a85fdcfb11c0fa"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"dd69097c69de2379751d2e78129d5a53dec6d718","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        Test Plan:"},{"line_number":171,"context_line":"        - Update policy to protect api by user_id"},{"line_number":172,"context_line":"        - List users with user_id of user1 as filter, to check that"},{"line_number":173,"context_line":"          this will be correctly match user_id in the flattened"},{"line_number":174,"context_line":"          payload"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2Fzac%3D","line":173,"updated":"2013-03-12 00:17:28.000000000","message":"(nit) remove \"be\"","commit_id":"6b733ef2938f4da9a6462c7255a85fdcfb11c0fa"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"dd69097c69de2379751d2e78129d5a53dec6d718","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        Test Plan:"},{"line_number":192,"context_line":"        - Update policy to protect api by domain_id"},{"line_number":193,"context_line":"        - List groups using a token scoped to domainA with a filter"},{"line_number":194,"context_line":"          specifying domainA - we should get only get back the one"},{"line_number":195,"context_line":"          user that is in domainA."},{"line_number":196,"context_line":"        - Try and read the users from domainB - this should fail since"},{"line_number":197,"context_line":"          we don\u0027t have a token scoped for domainB"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2FzaE%3D","line":194,"updated":"2013-03-12 00:17:28.000000000","message":"(nit) \"get only get\" -\u003e \"get\"","commit_id":"6b733ef2938f4da9a6462c7255a85fdcfb11c0fa"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"dd69097c69de2379751d2e78129d5a53dec6d718","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        \"\"\""},{"line_number":200,"context_line":"        new_policy \u003d \u0027{\"identity:list_users\": [\"domain_id:%(domain_id)s\"]}\u0027"},{"line_number":201,"context_line":"        with open(self.tmpfilename, \"w\") as policyfile:"},{"line_number":202,"context_line":"            policyfile.write(new_policy)"},{"line_number":203,"context_line":"        self.auth \u003d self.build_authentication_request("},{"line_number":204,"context_line":"            user_id\u003dself.user1[\u0027id\u0027],"},{"line_number":205,"context_line":"            password\u003dself.user1[\u0027password\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2FzaM%3D","line":202,"updated":"2013-03-12 00:17:28.000000000","message":"suggest move these 2 lines of code to a function, then have it take an object and do json serialization.","commit_id":"6b733ef2938f4da9a6462c7255a85fdcfb11c0fa"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"dd69097c69de2379751d2e78129d5a53dec6d718","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        # Now try for domainB, which should fail"},{"line_number":215,"context_line":"        url_by_name \u003d \u0027/users?domain_id\u003d%s\u0027 % self.domainB[\u0027id\u0027]"},{"line_number":216,"context_line":"        r \u003d self.get(url_by_name, auth\u003dself.auth,"},{"line_number":217,"context_line":"                     expected_status\u003dexception.ForbiddenAction.code)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_list_groups_protected_by_domain(self):"},{"line_number":220,"context_line":"        \"\"\"GET /groups?domain_id\u003dmydomain (protected)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2FzZ0%3D","line":217,"updated":"2013-03-12 00:17:28.000000000","message":"By returning ForbiddenAction here are we exposing information that should not be exposed? (that the domain exists)","commit_id":"6b733ef2938f4da9a6462c7255a85fdcfb11c0fa"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"0f357a16cc8e4b9a847d93a04bb0b6c6fce214e1","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        # Now try for domainB, which should fail"},{"line_number":215,"context_line":"        url_by_name \u003d \u0027/users?domain_id\u003d%s\u0027 % self.domainB[\u0027id\u0027]"},{"line_number":216,"context_line":"        r \u003d self.get(url_by_name, auth\u003dself.auth,"},{"line_number":217,"context_line":"                     expected_status\u003dexception.ForbiddenAction.code)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_list_groups_protected_by_domain(self):"},{"line_number":220,"context_line":"        \"\"\"GET /groups?domain_id\u003dmydomain (protected)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAN3%2F%2FzMg%3D","line":217,"in_reply_to":"AAAAN3%2F%2FzZ0%3D","updated":"2013-03-12 04:27:49.000000000","message":"File that as a bug, but leave it in this test for now.","commit_id":"6b733ef2938f4da9a6462c7255a85fdcfb11c0fa"}]}
