)]}'
{"keystone/identity/backends/ldap/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d3a384ae918fc46d3080bac7b4a1e3259ebee87d","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def get_metadata(self, user_id\u003dNone, tenant_id\u003dNone,"},{"line_number":138,"context_line":"                     domain_id\u003dNone, group_id\u003dNone):"},{"line_number":139,"context_line":"        # TODO(henry-nash): Use domain_id and group_id once domains are"},{"line_number":140,"context_line":"        # and groups are implemented in LDAP backend"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        if not self.get_project(tenant_id) or not self.get_user(user_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnMo%3D","line":139,"updated":"2013-02-25 22:33:43.000000000","message":"should probably be a FIXME","commit_id":"5893fa4de1ee90d83ac15a92dc235cbef38d8c0d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47ad56b94f466de768b8fc01f00cf3757b5969b9","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def get_metadata(self, user_id\u003dNone, tenant_id\u003dNone,"},{"line_number":138,"context_line":"                     domain_id\u003dNone, group_id\u003dNone):"},{"line_number":139,"context_line":"        # FIXME(henry-nash): Use domain_id and group_id once domains are"},{"line_number":140,"context_line":"        # and groups are implemented in LDAP backend"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        if not self.get_project(tenant_id) or not self.get_user(user_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F%2Bxs%3D","line":139,"updated":"2013-03-04 18:57:01.000000000","message":"(nit) remove \"are\"","commit_id":"05dcb905feb0c8c13921db31e2ea70b980b3f445"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"08607040344abac4d5b5b0ff6414ca3843e30939","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def get_metadata(self, user_id\u003dNone, tenant_id\u003dNone,"},{"line_number":138,"context_line":"                     domain_id\u003dNone, group_id\u003dNone):"},{"line_number":139,"context_line":"        # FIXME(henry-nash): Use domain_id and group_id once domains are"},{"line_number":140,"context_line":"        # and groups are implemented in LDAP backend"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        if not self.get_project(tenant_id) or not self.get_user(user_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F%2BqY%3D","line":139,"in_reply_to":"AAAAN3%2F%2F%2Bxs%3D","updated":"2013-03-04 19:51:42.000000000","message":"Done","commit_id":"05dcb905feb0c8c13921db31e2ea70b980b3f445"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47ad56b94f466de768b8fc01f00cf3757b5969b9","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        # FIXME(henry-nash): Use domain_id and group_id once domains are"},{"line_number":140,"context_line":"        # and groups are implemented in LDAP backend"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        if not self.get_project(tenant_id) or not self.get_user(user_id):"},{"line_number":143,"context_line":"            return {}"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        metadata_ref \u003d self.get_roles_for_user_and_project(user_id, tenant_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F%2Bxg%3D","line":142,"updated":"2013-03-04 18:57:01.000000000","message":"what\u0027s supposed to happen if tenant_id or user_id are None?","commit_id":"05dcb905feb0c8c13921db31e2ea70b980b3f445"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"08607040344abac4d5b5b0ff6414ca3843e30939","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        # FIXME(henry-nash): Use domain_id and group_id once domains are"},{"line_number":140,"context_line":"        # and groups are implemented in LDAP backend"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        if not self.get_project(tenant_id) or not self.get_user(user_id):"},{"line_number":143,"context_line":"            return {}"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        metadata_ref \u003d self.get_roles_for_user_and_project(user_id, tenant_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F%2Bpk%3D","line":142,"in_reply_to":"AAAAN3%2F%2F%2Bxg%3D","updated":"2013-03-04 19:51:42.000000000","message":"So in the future, when we support domains and groups properly in LDAP, we will get the appropriate metadata for different pairs (e.g. user-domain, group-tenant etc.).  Have a look at the sql backend equivalent of this function for more info.","commit_id":"05dcb905feb0c8c13921db31e2ea70b980b3f445"}],"keystone/identity/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6eb9465928f2ed73481ceafcf85d19f007e6cf0c","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        \"\"\""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        def _get_user_group_domain_roles(self, metadata_ref,"},{"line_number":166,"context_line":"                                         user_id, domain_id):"},{"line_number":167,"context_line":"            group_refs \u003d self.list_groups_for_user(user_id\u003duser_id)"},{"line_number":168,"context_line":"            for x in group_refs:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F%2ByQ%3D","line":165,"updated":"2013-03-04 18:47:56.000000000","message":"1) these don\u0027t really need to be named privately, 2) i don\u0027t think \"get_\" is proper terminology when it\u0027s not returning anything","commit_id":"05dcb905feb0c8c13921db31e2ea70b980b3f445"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"08607040344abac4d5b5b0ff6414ca3843e30939","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        \"\"\""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        def _get_user_group_domain_roles(self, metadata_ref,"},{"line_number":166,"context_line":"                                         user_id, domain_id):"},{"line_number":167,"context_line":"            group_refs \u003d self.list_groups_for_user(user_id\u003duser_id)"},{"line_number":168,"context_line":"            for x in group_refs:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F%2BoU%3D","line":165,"in_reply_to":"AAAAN3%2F%2F%2ByQ%3D","updated":"2013-03-04 19:51:42.000000000","message":"Done","commit_id":"05dcb905feb0c8c13921db31e2ea70b980b3f445"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47ad56b94f466de768b8fc01f00cf3757b5969b9","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        def _get_user_domain_roles(self, metadata_ref,"},{"line_number":178,"context_line":"                                   user_id, domain_id):"},{"line_number":179,"context_line":"            try:"},{"line_number":180,"context_line":"                metadata_ref.update(self.get_metadata(user_id,"},{"line_number":181,"context_line":"                                                      domain_id\u003ddomain_id))"},{"line_number":182,"context_line":"            except exception.MetadataNotFound:"},{"line_number":183,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F%2Bwk%3D","line":180,"updated":"2013-03-04 18:57:01.000000000","message":"change \"user_id\" to \"user_id\u003duser_id\" to use named parameter.","commit_id":"05dcb905feb0c8c13921db31e2ea70b980b3f445"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"08607040344abac4d5b5b0ff6414ca3843e30939","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        def _get_user_domain_roles(self, metadata_ref,"},{"line_number":178,"context_line":"                                   user_id, domain_id):"},{"line_number":179,"context_line":"            try:"},{"line_number":180,"context_line":"                metadata_ref.update(self.get_metadata(user_id,"},{"line_number":181,"context_line":"                                                      domain_id\u003ddomain_id))"},{"line_number":182,"context_line":"            except exception.MetadataNotFound:"},{"line_number":183,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F%2BoQ%3D","line":180,"in_reply_to":"AAAAN3%2F%2F%2Bwk%3D","updated":"2013-03-04 19:51:42.000000000","message":"Done","commit_id":"05dcb905feb0c8c13921db31e2ea70b980b3f445"}],"tests/test_backend.py":[{"author":{"_account_id":6456,"name":"Sahdev Zala","email":"spzala@us.ibm.com","username":"spzala"},"change_message_id":"29a818a20f715a2320ba90cec496cb269d64baa5","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        \"\"\" Test for getting roles for user on a domain."},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        Test Plan:"},{"line_number":503,"context_line":"        - Create a domain, with 2 users"},{"line_number":504,"context_line":"        - Check no roles yet exit"},{"line_number":505,"context_line":"        - Give user1 two roles on the domain, user2 one role"},{"line_number":506,"context_line":"        - Get roles on user1 and the domain - maybe sure we only"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bo%2FE%3D","line":503,"updated":"2013-02-23 16:30:08.000000000","message":"Hi Henry, looks great. Just for my knowledge, since we aren\u0027t doing anything with user2 (besides creating and assigning role), I guess the sole purpose of  creating user2 is just to have multi users environment right? or is there any other reason we are creating user2? Thanks!","commit_id":"5893fa4de1ee90d83ac15a92dc235cbef38d8c0d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4a564be18e1ee732aa22d8724b60de9c12865926","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        \"\"\" Test for getting roles for user on a domain."},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        Test Plan:"},{"line_number":503,"context_line":"        - Create a domain, with 2 users"},{"line_number":504,"context_line":"        - Check no roles yet exit"},{"line_number":505,"context_line":"        - Give user1 two roles on the domain, user2 one role"},{"line_number":506,"context_line":"        - Get roles on user1 and the domain - maybe sure we only"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BonE%3D","line":503,"in_reply_to":"AAAAM3%2F%2Bo%2FE%3D","updated":"2013-02-24 18:41:27.000000000","message":"Yes, the reason is just to have some other users in the DB, to  at least provide a basic test that the get call is indeed returning the correct subset","commit_id":"5893fa4de1ee90d83ac15a92dc235cbef38d8c0d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d3a384ae918fc46d3080bac7b4a1e3259ebee87d","unresolved":false,"context_lines":[{"line_number":534,"context_line":"                                       domain_id\u003dnew_domain[\u0027id\u0027],"},{"line_number":535,"context_line":"                                       role_id\u003d\u0027admin\u0027)"},{"line_number":536,"context_line":"        # Read back the roles for user1 on domain"},{"line_number":537,"context_line":"        roles_ref \u003d self.identity_api.get_roles_for_user_and_domain("},{"line_number":538,"context_line":"            new_user1[\u0027id\u0027], new_domain[\u0027id\u0027])"},{"line_number":539,"context_line":"        self.assertEqual(len(roles_ref), 2)"},{"line_number":540,"context_line":"        self.assertIn(self.role_member[\u0027id\u0027], roles_ref)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnH0%3D","line":537,"updated":"2013-02-25 22:33:43.000000000","message":"if this is returning a list of id\u0027s as asserted below, then _ref is a misleading choice for the variable name, as it generally implies a reference to an object that can be persisted. role_ids?","commit_id":"5893fa4de1ee90d83ac15a92dc235cbef38d8c0d"},{"author":{"_account_id":4992,"name":"malini-k-bhandaru","email":"malini.k.bhandaru@intel.com","username":"malini-k-bhandaru"},"change_message_id":"0bc940bc54287e373023b2aac2e1eae573a38eb2","unresolved":false,"context_lines":[{"line_number":551,"context_line":"            user_id\u003dnew_user1[\u0027id\u0027],"},{"line_number":552,"context_line":"            domain_id\u003dnew_domain[\u0027id\u0027])"},{"line_number":553,"context_line":"        self.assertEquals(len(roles_ref), 0)"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def test_get_roles_for_user_and_domain_404(self):"},{"line_number":556,"context_line":"        \"\"\" Test errors raised when getting roles for user on a domain."},{"line_number":557,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BpHA%3D","line":554,"updated":"2013-02-23 09:46:52.000000000","message":"no checks on roles for user 2? to ensure change on user 1 does not affect 2. possibly have in addition a common role between the two","commit_id":"5893fa4de1ee90d83ac15a92dc235cbef38d8c0d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"5df55ffa36930c230e29d042dff9c683307e0b0e","unresolved":false,"context_lines":[{"line_number":551,"context_line":"            user_id\u003dnew_user1[\u0027id\u0027],"},{"line_number":552,"context_line":"            domain_id\u003dnew_domain[\u0027id\u0027])"},{"line_number":553,"context_line":"        self.assertEquals(len(roles_ref), 0)"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def test_get_roles_for_user_and_domain_404(self):"},{"line_number":556,"context_line":"        \"\"\" Test errors raised when getting roles for user on a domain."},{"line_number":557,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BpF0%3D","line":554,"in_reply_to":"AAAAM3%2F%2BpHA%3D","updated":"2013-02-23 10:14:59.000000000","message":"So all tests are good :-)....but, I don\u0027t think the purpose of this test should be to verify that deleting roles doesn\u0027t cause collateral damage - other tests should do that (e.g. get_delete roles).  This test is just to determine whether the right roles are returned for a user and domain...we just have to use create/delete role to create the environment.","commit_id":"5893fa4de1ee90d83ac15a92dc235cbef38d8c0d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6eb9465928f2ed73481ceafcf85d19f007e6cf0c","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        - Get roles on user1 and the domain - maybe sure we only"},{"line_number":507,"context_line":"          get back the 2 roles on user1"},{"line_number":508,"context_line":"        - Delete both roles from user1"},{"line_number":509,"context_line":"        - Check we get no roles back for user1 on domain"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        \"\"\""},{"line_number":512,"context_line":"        new_domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F%2ByA%3D","line":509,"updated":"2013-03-04 18:47:56.000000000","message":"nice","commit_id":"05dcb905feb0c8c13921db31e2ea70b980b3f445"}],"tests/test_backend_ldap.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6eb9465928f2ed73481ceafcf85d19f007e6cf0c","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by bug 1101287\u0027)"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    def test_get_roles_for_user_and_domain_404(self):"},{"line_number":413,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by bug 1101287\u0027)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def test_domain_crud(self):"},{"line_number":416,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by bug 1101276\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F%2Bx8%3D","line":413,"updated":"2013-03-04 18:47:56.000000000","message":"i\u0027m not sure this bug is relevant to any of these tests...","commit_id":"05dcb905feb0c8c13921db31e2ea70b980b3f445"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"08607040344abac4d5b5b0ff6414ca3843e30939","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by bug 1101287\u0027)"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    def test_get_roles_for_user_and_domain_404(self):"},{"line_number":413,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by bug 1101287\u0027)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def test_domain_crud(self):"},{"line_number":416,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by bug 1101276\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F%2Bm8%3D","line":413,"in_reply_to":"AAAAN3%2F%2F%2Bx8%3D","updated":"2013-03-04 19:51:42.000000000","message":"Done","commit_id":"05dcb905feb0c8c13921db31e2ea70b980b3f445"}]}
