)]}'
{"keystone/tests/fakeldap.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cbb95385daab8c2e9f90e327ca52ef9561acbbaa","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        check_value \u003d _internal_attr(key, value)[0]"},{"line_number":146,"context_line":"        norm_values \u003d list(_internal_attr(key, x)[0] for x in attrs[key])"},{"line_number":147,"context_line":"        for x in norm_values:"},{"line_number":148,"context_line":"            if check_value.lower() \u003d\u003d x.lower():"},{"line_number":149,"context_line":"                return True"},{"line_number":150,"context_line":"    # it is an objectclass check, so check subclasses"},{"line_number":151,"context_line":"    values \u003d _subs(value)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_05494e8b","line":148,"updated":"2015-02-09 01:00:00.000000000","message":"Call .lower() at line 145, and lower() on the attrs on line 146.","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"75fd583fed490c97152838d9b153ab4ba1678677","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        check_value \u003d _internal_attr(key, value)[0]"},{"line_number":146,"context_line":"        norm_values \u003d list(_internal_attr(key, x)[0] for x in attrs[key])"},{"line_number":147,"context_line":"        for x in norm_values:"},{"line_number":148,"context_line":"            if check_value.lower() \u003d\u003d x.lower():"},{"line_number":149,"context_line":"                return True"},{"line_number":150,"context_line":"    # it is an objectclass check, so check subclasses"},{"line_number":151,"context_line":"    values \u003d _subs(value)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_3d3175ed","line":148,"in_reply_to":"da86d52c_05494e8b","updated":"2015-02-12 11:17:15.000000000","message":"Done","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"}],"keystone/tests/filtering.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cbb95385daab8c2e9f90e327ca52ef9561acbbaa","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            domain_id \u003d CONF.identity.default_domain_id"},{"line_number":85,"context_line":"        for x in range(number):"},{"line_number":86,"context_line":"            name \u003d uuid.uuid4().hex"},{"line_number":87,"context_line":"            if name_dict is not None:"},{"line_number":88,"context_line":"                name \u003d name_dict.get(x, uuid.uuid4().hex)"},{"line_number":89,"context_line":"            new_entity \u003d self._create_one_entity(entity_type, domain_id, name)"},{"line_number":90,"context_line":"            entity_list.append(new_entity)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_255d7249","line":87,"updated":"2015-02-09 01:00:00.000000000","message":"suggest remove \"is not None\"\n\nActually, should normalize the inputs early on, then this code doesn\u0027t have to worry about it:\n\n name_dict \u003d name_dict or {}","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"75fd583fed490c97152838d9b153ab4ba1678677","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            domain_id \u003d CONF.identity.default_domain_id"},{"line_number":85,"context_line":"        for x in range(number):"},{"line_number":86,"context_line":"            name \u003d uuid.uuid4().hex"},{"line_number":87,"context_line":"            if name_dict is not None:"},{"line_number":88,"context_line":"                name \u003d name_dict.get(x, uuid.uuid4().hex)"},{"line_number":89,"context_line":"            new_entity \u003d self._create_one_entity(entity_type, domain_id, name)"},{"line_number":90,"context_line":"            entity_list.append(new_entity)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_b4c1e981","line":87,"in_reply_to":"da86d52c_255d7249","updated":"2015-02-12 11:17:15.000000000","message":"Done","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cbb95385daab8c2e9f90e327ca52ef9561acbbaa","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        for x in range(number):"},{"line_number":86,"context_line":"            name \u003d uuid.uuid4().hex"},{"line_number":87,"context_line":"            if name_dict is not None:"},{"line_number":88,"context_line":"                name \u003d name_dict.get(x, uuid.uuid4().hex)"},{"line_number":89,"context_line":"            new_entity \u003d self._create_one_entity(entity_type, domain_id, name)"},{"line_number":90,"context_line":"            entity_list.append(new_entity)"},{"line_number":91,"context_line":"        return entity_list"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_e53a7ae6","line":88,"updated":"2015-02-09 01:00:00.000000000","message":"this loop is going to do uuid.uuid4().hex twice if name_dict is not None and doesn\u0027t contain x. This could be changed to be more efficient.","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"75fd583fed490c97152838d9b153ab4ba1678677","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        for x in range(number):"},{"line_number":86,"context_line":"            name \u003d uuid.uuid4().hex"},{"line_number":87,"context_line":"            if name_dict is not None:"},{"line_number":88,"context_line":"                name \u003d name_dict.get(x, uuid.uuid4().hex)"},{"line_number":89,"context_line":"            new_entity \u003d self._create_one_entity(entity_type, domain_id, name)"},{"line_number":90,"context_line":"            entity_list.append(new_entity)"},{"line_number":91,"context_line":"        return entity_list"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_d4bc9d08","line":88,"in_reply_to":"da86d52c_e53a7ae6","updated":"2015-02-12 11:17:15.000000000","message":"Done","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"}],"keystone/tests/test_backend.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cbb95385daab8c2e9f90e327ca52ef9561acbbaa","unresolved":false,"context_lines":[{"line_number":5350,"context_line":"            7: \u0027The Ministry of\u0027,"},{"line_number":5351,"context_line":"            8: \u0027The Ministry of Silly\u0027,"},{"line_number":5352,"context_line":"            9: \u0027The Ministry of Silly Walks\u0027,"},{"line_number":5353,"context_line":"            10: \u0027The ministry of silly walks OF\u0027"},{"line_number":5354,"context_line":"        }"},{"line_number":5355,"context_line":"        user_list \u003d self._create_test_data("},{"line_number":5356,"context_line":"            \u0027user\u0027, 20, domain_id\u003dDEFAULT_DOMAIN_ID, name_dict\u003duser_name_data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_e81faf59","line":5353,"updated":"2015-02-09 01:00:00.000000000","message":"The comment \"# ...and one for useful case insensitivity testing\" should be left here so that future developers have some idea why this is here.","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"75fd583fed490c97152838d9b153ab4ba1678677","unresolved":false,"context_lines":[{"line_number":5350,"context_line":"            7: \u0027The Ministry of\u0027,"},{"line_number":5351,"context_line":"            8: \u0027The Ministry of Silly\u0027,"},{"line_number":5352,"context_line":"            9: \u0027The Ministry of Silly Walks\u0027,"},{"line_number":5353,"context_line":"            10: \u0027The ministry of silly walks OF\u0027"},{"line_number":5354,"context_line":"        }"},{"line_number":5355,"context_line":"        user_list \u003d self._create_test_data("},{"line_number":5356,"context_line":"            \u0027user\u0027, 20, domain_id\u003dDEFAULT_DOMAIN_ID, name_dict\u003duser_name_data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_9d0b41d5","line":5353,"in_reply_to":"da86d52c_e81faf59","updated":"2015-02-12 11:17:15.000000000","message":"Done","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"}],"keystone/tests/test_backend_sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cbb95385daab8c2e9f90e327ca52ef9561acbbaa","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def test_create_user_case_sensitivity(self):"},{"line_number":159,"context_line":"        # user name case sensitivity is down to the fact that it is marked as"},{"line_number":160,"context_line":"        # an SQL UNIQUE column, which may not valid for other backends, like"},{"line_number":161,"context_line":"        # LDAP."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        # create a ref with a lowercase name"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_8847134b","line":160,"updated":"2015-02-09 01:00:00.000000000","message":"change \"not valid\" to \"not be valid\"","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"75fd583fed490c97152838d9b153ab4ba1678677","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def test_create_user_case_sensitivity(self):"},{"line_number":159,"context_line":"        # user name case sensitivity is down to the fact that it is marked as"},{"line_number":160,"context_line":"        # an SQL UNIQUE column, which may not valid for other backends, like"},{"line_number":161,"context_line":"        # LDAP."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        # create a ref with a lowercase name"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_1d93d15b","line":160,"in_reply_to":"da86d52c_8847134b","updated":"2015-02-12 11:17:15.000000000","message":"Done","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cbb95385daab8c2e9f90e327ca52ef9561acbbaa","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_create_project_case_sensitivity(self):"},{"line_number":174,"context_line":"        # project name case sensitivity is down to the fact that it is marked"},{"line_number":175,"context_line":"        # as an SQL UNIQUE column, which may not valid for other backends, like"},{"line_number":176,"context_line":"        # LDAP."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # create a ref with a lowercase name"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_a873f7b2","line":175,"updated":"2015-02-09 01:00:00.000000000","message":"change \"not valid\" to \"not be valid\"","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"75fd583fed490c97152838d9b153ab4ba1678677","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_create_project_case_sensitivity(self):"},{"line_number":174,"context_line":"        # project name case sensitivity is down to the fact that it is marked"},{"line_number":175,"context_line":"        # as an SQL UNIQUE column, which may not valid for other backends, like"},{"line_number":176,"context_line":"        # LDAP."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # create a ref with a lowercase name"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_1d7af123","line":175,"in_reply_to":"da86d52c_a873f7b2","updated":"2015-02-12 11:17:15.000000000","message":"Done","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cbb95385daab8c2e9f90e327ca52ef9561acbbaa","unresolved":false,"context_lines":[{"line_number":706,"context_line":"    def test_list_entities_filtered_by_domain(self):"},{"line_number":707,"context_line":"        # NOTE(henry-nash): This method is here rather than in test_backend"},{"line_number":708,"context_line":"        # since any domain filtering with LDAP is handled by the manager"},{"line_number":709,"context_line":"        # layer (and is already tested elsewhere) not at the LDAP level."},{"line_number":710,"context_line":"        domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":711,"context_line":"        self.resource_api.create_domain(domain1[\u0027id\u0027], domain1)"},{"line_number":712,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_2839c7d8","line":709,"updated":"2015-02-09 01:00:00.000000000","message":"change \"LDAP\" to \"driver\" or \"LDAP driver\"","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"75fd583fed490c97152838d9b153ab4ba1678677","unresolved":false,"context_lines":[{"line_number":706,"context_line":"    def test_list_entities_filtered_by_domain(self):"},{"line_number":707,"context_line":"        # NOTE(henry-nash): This method is here rather than in test_backend"},{"line_number":708,"context_line":"        # since any domain filtering with LDAP is handled by the manager"},{"line_number":709,"context_line":"        # layer (and is already tested elsewhere) not at the LDAP level."},{"line_number":710,"context_line":"        domain1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":711,"context_line":"        self.resource_api.create_domain(domain1[\u0027id\u0027], domain1)"},{"line_number":712,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_9dbc21bd","line":709,"in_reply_to":"da86d52c_2839c7d8","updated":"2015-02-12 11:17:15.000000000","message":"Done","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cbb95385daab8c2e9f90e327ca52ef9561acbbaa","unresolved":false,"context_lines":[{"line_number":711,"context_line":"        self.resource_api.create_domain(domain1[\u0027id\u0027], domain1)"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        for entity in [\u0027user\u0027, \u0027group\u0027, \u0027project\u0027]:"},{"line_number":714,"context_line":"            # Create 20 entities, 14 of which are in domain1"},{"line_number":715,"context_line":"            entity_list \u003d self._create_test_data(entity, 6)"},{"line_number":716,"context_line":"            domain1_entity_list \u003d self._create_test_data(entity, 14,"},{"line_number":717,"context_line":"                                                         domain1[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_6833bff6","line":714,"updated":"2015-02-09 01:00:00.000000000","message":"what\u0027s important about 20 entities and 14 entities? add a comment.","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"75fd583fed490c97152838d9b153ab4ba1678677","unresolved":false,"context_lines":[{"line_number":711,"context_line":"        self.resource_api.create_domain(domain1[\u0027id\u0027], domain1)"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        for entity in [\u0027user\u0027, \u0027group\u0027, \u0027project\u0027]:"},{"line_number":714,"context_line":"            # Create 20 entities, 14 of which are in domain1"},{"line_number":715,"context_line":"            entity_list \u003d self._create_test_data(entity, 6)"},{"line_number":716,"context_line":"            domain1_entity_list \u003d self._create_test_data(entity, 14,"},{"line_number":717,"context_line":"                                                         domain1[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_59dc6646","line":714,"in_reply_to":"da86d52c_6833bff6","updated":"2015-02-12 11:17:15.000000000","message":"Done","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cbb95385daab8c2e9f90e327ca52ef9561acbbaa","unresolved":false,"context_lines":[{"line_number":720,"context_line":"            hints \u003d driver_hints.Hints()"},{"line_number":721,"context_line":"            hints.add_filter(\u0027domain_id\u0027, domain1[\u0027id\u0027])"},{"line_number":722,"context_line":"            entities \u003d self._list_entities(entity)(hints\u003dhints)"},{"line_number":723,"context_line":"            self.assertEqual(14, len(entities))"},{"line_number":724,"context_line":"            self._match_with_list(entities, domain1_entity_list)"},{"line_number":725,"context_line":"            # Check the driver has removed the filter from the list hints"},{"line_number":726,"context_line":"            self.assertFalse(hints.get_exact_filter_by_name(\u0027domain_id\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_085c0325","line":723,"updated":"2015-02-09 01:00:00.000000000","message":"since this is going to be the same as 14 at line 716, create a constant and use that in both places.","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"75fd583fed490c97152838d9b153ab4ba1678677","unresolved":false,"context_lines":[{"line_number":720,"context_line":"            hints \u003d driver_hints.Hints()"},{"line_number":721,"context_line":"            hints.add_filter(\u0027domain_id\u0027, domain1[\u0027id\u0027])"},{"line_number":722,"context_line":"            entities \u003d self._list_entities(entity)(hints\u003dhints)"},{"line_number":723,"context_line":"            self.assertEqual(14, len(entities))"},{"line_number":724,"context_line":"            self._match_with_list(entities, domain1_entity_list)"},{"line_number":725,"context_line":"            # Check the driver has removed the filter from the list hints"},{"line_number":726,"context_line":"            self.assertFalse(hints.get_exact_filter_by_name(\u0027domain_id\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_79df6a3a","line":723,"in_reply_to":"da86d52c_085c0325","updated":"2015-02-12 11:17:15.000000000","message":"Done","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cbb95385daab8c2e9f90e327ca52ef9561acbbaa","unresolved":false,"context_lines":[{"line_number":726,"context_line":"            self.assertFalse(hints.get_exact_filter_by_name(\u0027domain_id\u0027))"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"            self._delete_test_data(entity, entity_list)"},{"line_number":729,"context_line":"            self._delete_test_data(entity, domain1_entity_list)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    def test_filter_sql_injection_attack(self):"},{"line_number":732,"context_line":"        \"\"\"Test against sql injection attack on filters"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_684adf56","line":729,"updated":"2015-02-09 01:00:00.000000000","message":"cleanup work should be done with addCleanup because it won\u0027t run if an assert fails or other exception is raised.","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"75fd583fed490c97152838d9b153ab4ba1678677","unresolved":false,"context_lines":[{"line_number":726,"context_line":"            self.assertFalse(hints.get_exact_filter_by_name(\u0027domain_id\u0027))"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"            self._delete_test_data(entity, entity_list)"},{"line_number":729,"context_line":"            self._delete_test_data(entity, domain1_entity_list)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    def test_filter_sql_injection_attack(self):"},{"line_number":732,"context_line":"        \"\"\"Test against sql injection attack on filters"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_f9ea7ad6","line":729,"in_reply_to":"da86d52c_684adf56","updated":"2015-02-12 11:17:15.000000000","message":"Done","commit_id":"7622aab68a4d53e1f6c59e8a19da55c657813af5"}],"keystone/tests/unit/fakeldap.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5bc0e2cd40ef9d562f69ab7e239f994cdce1c011","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        str_sids \u003d [six.text_type(x) for x in attrs[key]]"},{"line_number":143,"context_line":"        return six.text_type(value) in str_sids"},{"line_number":144,"context_line":"    if key !\u003d \u0027objectclass\u0027:"},{"line_number":145,"context_line":"        check_value \u003d _internal_attr(key, value)[0].lower()"},{"line_number":146,"context_line":"        norm_values \u003d list("},{"line_number":147,"context_line":"            _internal_attr(key, x)[0].lower() for x in attrs[key])"},{"line_number":148,"context_line":"        return check_value in norm_values"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_63bf79d1","line":145,"updated":"2015-02-20 06:33:12.000000000","message":"so we are also assuming attributes are case insensitive? May want to drop a note here explaining why we are doing this.","commit_id":"7da8e67b36c75a72a9e0124799080114903a3eac"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"528d3f337304c400170eddec3467d883794f4ba6","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        str_sids \u003d [six.text_type(x) for x in attrs[key]]"},{"line_number":143,"context_line":"        return six.text_type(value) in str_sids"},{"line_number":144,"context_line":"    if key !\u003d \u0027objectclass\u0027:"},{"line_number":145,"context_line":"        check_value \u003d _internal_attr(key, value)[0].lower()"},{"line_number":146,"context_line":"        norm_values \u003d list("},{"line_number":147,"context_line":"            _internal_attr(key, x)[0].lower() for x in attrs[key])"},{"line_number":148,"context_line":"        return check_value in norm_values"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_a026c066","line":145,"in_reply_to":"ba7be1f8_63bf79d1","updated":"2015-02-20 10:20:33.000000000","message":"I hadn\u0027t intended that....I don\u0027t think this line does that...unless I am misunderstanding the way this works...","commit_id":"7da8e67b36c75a72a9e0124799080114903a3eac"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"151d2e907af75a65d45b553008587a414dbeda33","unresolved":false,"context_lines":[{"line_number":5490,"context_line":"    def test_list_entities_filtered(self):"},{"line_number":5491,"context_line":"        for entity in [\u0027user\u0027, \u0027group\u0027, \u0027project\u0027]:"},{"line_number":5492,"context_line":"            # Create 20 entities"},{"line_number":5493,"context_line":"            entity_list \u003d self._create_test_data(entity, 20)"},{"line_number":5494,"context_line":""},{"line_number":5495,"context_line":"            # Try filtering to get one an exact item out of the list"},{"line_number":5496,"context_line":"            hints \u003d driver_hints.Hints()"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_02928956","line":5493,"updated":"2015-02-18 21:30:17.000000000","message":"Very nice cleanup!","commit_id":"20c4ef7175d8d87c137d006665c196ee70ac4ab8"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"151d2e907af75a65d45b553008587a414dbeda33","unresolved":false,"context_lines":[{"line_number":5505,"context_line":"    def test_list_users_inexact_filtered(self):"},{"line_number":5506,"context_line":"        # Create 20 users, some with specific names. We set the names at create"},{"line_number":5507,"context_line":"        # time (rather than updating them), since LDAP does not support name"},{"line_number":5508,"context_line":"        # updates."},{"line_number":5509,"context_line":"        user_name_data \u003d {"},{"line_number":5510,"context_line":"            # user index: name for user"},{"line_number":5511,"context_line":"            5: \u0027The\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_8294b937","line":5508,"updated":"2015-02-18 21:30:17.000000000","message":"(nit) It would be more appropriate to say that the LDAP driver doesn\u0027t support name updates (LDAP itself as a protocol does).","commit_id":"20c4ef7175d8d87c137d006665c196ee70ac4ab8"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1071ec686e689a9cde695e553d79e262ef139731","unresolved":false,"context_lines":[{"line_number":5505,"context_line":"    def test_list_users_inexact_filtered(self):"},{"line_number":5506,"context_line":"        # Create 20 users, some with specific names. We set the names at create"},{"line_number":5507,"context_line":"        # time (rather than updating them), since LDAP does not support name"},{"line_number":5508,"context_line":"        # updates."},{"line_number":5509,"context_line":"        user_name_data \u003d {"},{"line_number":5510,"context_line":"            # user index: name for user"},{"line_number":5511,"context_line":"            5: \u0027The\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_027449cd","line":5508,"in_reply_to":"da86d52c_8294b937","updated":"2015-02-18 21:34:26.000000000","message":"agreed","commit_id":"20c4ef7175d8d87c137d006665c196ee70ac4ab8"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"151d2e907af75a65d45b553008587a414dbeda33","unresolved":false,"context_lines":[{"line_number":5555,"context_line":"        # know whether to run case sensitive tests here."},{"line_number":5556,"context_line":"        #"},{"line_number":5557,"context_line":"        # For LDAP/AD, attributes are typically configured to be case aware,"},{"line_number":5558,"context_line":"        # but not case sensitive."},{"line_number":5559,"context_line":""},{"line_number":5560,"context_line":"        self._delete_test_data(\u0027user\u0027, user_list)"},{"line_number":5561,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_a231bd5a","line":5558,"updated":"2015-02-18 21:30:17.000000000","message":"(nit) Maybe add to this saying it\u0027s dependent on the LDAP schema that is being used.","commit_id":"20c4ef7175d8d87c137d006665c196ee70ac4ab8"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1071ec686e689a9cde695e553d79e262ef139731","unresolved":false,"context_lines":[{"line_number":5555,"context_line":"        # know whether to run case sensitive tests here."},{"line_number":5556,"context_line":"        #"},{"line_number":5557,"context_line":"        # For LDAP/AD, attributes are typically configured to be case aware,"},{"line_number":5558,"context_line":"        # but not case sensitive."},{"line_number":5559,"context_line":""},{"line_number":5560,"context_line":"        self._delete_test_data(\u0027user\u0027, user_list)"},{"line_number":5561,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_427ac1ba","line":5558,"in_reply_to":"da86d52c_a231bd5a","updated":"2015-02-18 21:34:26.000000000","message":"agreed","commit_id":"20c4ef7175d8d87c137d006665c196ee70ac4ab8"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"eae251f884c93d9eb85bcfe51e8f09b268d1c329","unresolved":false,"context_lines":[{"line_number":5410,"context_line":"                                                         domain1[\u0027id\u0027])"},{"line_number":5411,"context_line":""},{"line_number":5412,"context_line":"            # Should get back the 14 entities in domain1"},{"line_number":5413,"context_line":"            hints \u003d driver_hints.Hints()"},{"line_number":5414,"context_line":"            hints.add_filter(\u0027domain_id\u0027, domain1[\u0027id\u0027])"},{"line_number":5415,"context_line":"            entities \u003d self._list_entities(entity)(hints\u003dhints)"},{"line_number":5416,"context_line":"            self.assertEqual(14, len(entities))"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_6da08842","side":"PARENT","line":5413,"updated":"2015-02-19 07:42:06.000000000","message":"why was this removed and not replaced?","commit_id":"ce701f27710c1000d5d7babd3a7bd3fe7e1af083"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d16e69b1ebaba419ccbd22239ed3d1690c1f78e7","unresolved":false,"context_lines":[{"line_number":5410,"context_line":"                                                         domain1[\u0027id\u0027])"},{"line_number":5411,"context_line":""},{"line_number":5412,"context_line":"            # Should get back the 14 entities in domain1"},{"line_number":5413,"context_line":"            hints \u003d driver_hints.Hints()"},{"line_number":5414,"context_line":"            hints.add_filter(\u0027domain_id\u0027, domain1[\u0027id\u0027])"},{"line_number":5415,"context_line":"            entities \u003d self._list_entities(entity)(hints\u003dhints)"},{"line_number":5416,"context_line":"            self.assertEqual(14, len(entities))"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_1428f584","side":"PARENT","line":5413,"in_reply_to":"da86d52c_6da08842","updated":"2015-02-19 10:00:17.000000000","message":"it was moved to test_backend_sql.py (since only the sql driver actually does domain filtering in the driver)","commit_id":"ce701f27710c1000d5d7babd3a7bd3fe7e1af083"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"0036d29656a26315372d163c95fc59a9f04350ba","unresolved":false,"context_lines":[{"line_number":5442,"context_line":"        # need to be able to check the sensitivity of the database so as to"},{"line_number":5443,"context_line":"        # know whether to run case sensitive tests here."},{"line_number":5444,"context_line":"        #"},{"line_number":5445,"context_line":"        # For LDAP/AD, although dependent on the scheme being used, attributes"},{"line_number":5446,"context_line":"        # are typically configured to be case aware, but not case sensitive."},{"line_number":5447,"context_line":""},{"line_number":5448,"context_line":"        self._delete_test_data(\u0027user\u0027, user_list)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_963dd2bd","line":5445,"updated":"2015-02-19 05:18:10.000000000","message":"s/scheme/schema/","commit_id":"aa0e10d8e629696f87a3a4f1dbb9f43517b665d9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c0cc19f69d76140c561b0666f0b526fa2783ce6e","unresolved":false,"context_lines":[{"line_number":5442,"context_line":"        # need to be able to check the sensitivity of the database so as to"},{"line_number":5443,"context_line":"        # know whether to run case sensitive tests here."},{"line_number":5444,"context_line":"        #"},{"line_number":5445,"context_line":"        # For LDAP/AD, although dependent on the scheme being used, attributes"},{"line_number":5446,"context_line":"        # are typically configured to be case aware, but not case sensitive."},{"line_number":5447,"context_line":""},{"line_number":5448,"context_line":"        self._delete_test_data(\u0027user\u0027, user_list)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_149d55bc","line":5445,"in_reply_to":"da86d52c_963dd2bd","updated":"2015-02-19 10:02:54.000000000","message":"Done","commit_id":"aa0e10d8e629696f87a3a4f1dbb9f43517b665d9"}],"keystone/tests/unit/test_backend_ldap.py":[{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"151d2e907af75a65d45b553008587a414dbeda33","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            user_info \u003d self.identity_api.get_user(user_ref[\u0027id\u0027])"},{"line_number":682,"context_line":"            self.assertEqual(name, user_info[\u0027name\u0027])"},{"line_number":683,"context_line":"            # Delete the user so that the case-insensitive nature of LDAP does"},{"line_number":684,"context_line":"            # not cause other names in boolean_strings to clash"},{"line_number":685,"context_line":"            self.identity_api.delete_user(user_ref[\u0027id\u0027])"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"    def test_unignored_user_none_mapping(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_827e79e2","line":684,"updated":"2015-02-18 21:30:17.000000000","message":"The delete here is fine/harmless, but would we even have a clash since we\u0027re searching for the user by \u0027id\u0027 and not \u0027name\u0027?","commit_id":"20c4ef7175d8d87c137d006665c196ee70ac4ab8"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"e299ec24b0c5073d4e0506a960a16f94a8454ad4","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            user_info \u003d self.identity_api.get_user(user_ref[\u0027id\u0027])"},{"line_number":682,"context_line":"            self.assertEqual(name, user_info[\u0027name\u0027])"},{"line_number":683,"context_line":"            # Delete the user so that the case-insensitive nature of LDAP does"},{"line_number":684,"context_line":"            # not cause other names in boolean_strings to clash"},{"line_number":685,"context_line":"            self.identity_api.delete_user(user_ref[\u0027id\u0027])"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"    def test_unignored_user_none_mapping(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_e5949f45","line":684,"in_reply_to":"da86d52c_22a6ad54","updated":"2015-02-18 21:47:38.000000000","message":"Ok, that makes sense.  It\u0027s a Keystone uniqueness limitation, not necessarily an LDAP limitation now that Keystone no longer cares that the name or id attributes are part of the DN.","commit_id":"20c4ef7175d8d87c137d006665c196ee70ac4ab8"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1071ec686e689a9cde695e553d79e262ef139731","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            user_info \u003d self.identity_api.get_user(user_ref[\u0027id\u0027])"},{"line_number":682,"context_line":"            self.assertEqual(name, user_info[\u0027name\u0027])"},{"line_number":683,"context_line":"            # Delete the user so that the case-insensitive nature of LDAP does"},{"line_number":684,"context_line":"            # not cause other names in boolean_strings to clash"},{"line_number":685,"context_line":"            self.identity_api.delete_user(user_ref[\u0027id\u0027])"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"    def test_unignored_user_none_mapping(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_22a6ad54","line":684,"in_reply_to":"da86d52c_827e79e2","updated":"2015-02-18 21:34:26.000000000","message":"I think the create_user on line 680 will fail since name has to be unique (in a case insensitive way)","commit_id":"20c4ef7175d8d87c137d006665c196ee70ac4ab8"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"547ff74d440cee8c9fc91744ec8910aa4b74534e","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            user_info \u003d self.identity_api.get_user(user_ref[\u0027id\u0027])"},{"line_number":682,"context_line":"            self.assertEqual(name, user_info[\u0027name\u0027])"},{"line_number":683,"context_line":"            # Delete the user so that the case-insensitive nature of LDAP does"},{"line_number":684,"context_line":"            # not cause other names in boolean_strings to clash"},{"line_number":685,"context_line":"            self.identity_api.delete_user(user_ref[\u0027id\u0027])"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"    def test_unignored_user_none_mapping(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_d07912c6","line":684,"in_reply_to":"da86d52c_e5949f45","updated":"2015-02-19 04:25:52.000000000","message":"Agreed - I\u0027ll make that clearer in the comment.","commit_id":"20c4ef7175d8d87c137d006665c196ee70ac4ab8"}]}
