)]}'
{"keystone/identity/core.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"03491b0430afed20454f9f9aeb2ad5d100147db1","unresolved":false,"context_lines":[{"line_number":953,"context_line":"        ref \u003d driver.get_user(entity_id)"},{"line_number":954,"context_line":"        # Add user\u0027s federated objects"},{"line_number":955,"context_line":"        fed_objects \u003d self.shadow_users_api.get_federated_objects(user_id)"},{"line_number":956,"context_line":"        if fed_objects:"},{"line_number":957,"context_line":"            ref[\u0027federated\u0027] \u003d fed_objects"},{"line_number":958,"context_line":"        return self._set_domain_id_and_mapping("},{"line_number":959,"context_line":"            ref, domain_id, driver, mapping.EntityType.USER)"},{"line_number":960,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_faf1da01","line":957,"range":{"start_line":956,"start_character":0,"end_line":957,"end_character":42},"updated":"2017-03-23 12:50:39.000000000","message":"so this was my suggestion since the beginning, I like this!\n\nWhat have changed that you decided to implement in this way?","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"d4db2f7199e14d9d372387a09a3da85261a8774a","unresolved":false,"context_lines":[{"line_number":953,"context_line":"        ref \u003d driver.get_user(entity_id)"},{"line_number":954,"context_line":"        # Add user\u0027s federated objects"},{"line_number":955,"context_line":"        fed_objects \u003d self.shadow_users_api.get_federated_objects(user_id)"},{"line_number":956,"context_line":"        if fed_objects:"},{"line_number":957,"context_line":"            ref[\u0027federated\u0027] \u003d fed_objects"},{"line_number":958,"context_line":"        return self._set_domain_id_and_mapping("},{"line_number":959,"context_line":"            ref, domain_id, driver, mapping.EntityType.USER)"},{"line_number":960,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_a3981a1d","line":957,"range":{"start_line":956,"start_character":0,"end_line":957,"end_character":42},"in_reply_to":"1a1ced50_faf1da01","updated":"2017-03-23 16:11:43.000000000","message":"Ah, just following the spec still. Plan to tack on another patch as a dependancy on the last one to fix the two tests it fails in the other repo and add fed object back","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8e27545fd21632b38dd18ed259f472d19aabb8ac","unresolved":false,"context_lines":[{"line_number":961,"context_line":"        # Add user\u0027s federated objects"},{"line_number":962,"context_line":"        fed_objects \u003d self.shadow_users_api.get_federated_objects(user_id)"},{"line_number":963,"context_line":"        if fed_objects:"},{"line_number":964,"context_line":"            ref[\u0027federated\u0027] \u003d fed_objects"},{"line_number":965,"context_line":"        return self._set_domain_id_and_mapping("},{"line_number":966,"context_line":"            ref, domain_id, driver, mapping.EntityType.USER)"},{"line_number":967,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1fa4df85_e0b7add7","line":964,"updated":"2020-03-18 23:45:16.000000000","message":"Should this be added to list_users too?","commit_id":"3236e64f1fe67ce5bce6c6996d6341e3f1370928"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"6022ab899f4ca0266307a5adc25186a10f96efcf","unresolved":false,"context_lines":[{"line_number":961,"context_line":"        # Add user\u0027s federated objects"},{"line_number":962,"context_line":"        fed_objects \u003d self.shadow_users_api.get_federated_objects(user_id)"},{"line_number":963,"context_line":"        if fed_objects:"},{"line_number":964,"context_line":"            ref[\u0027federated\u0027] \u003d fed_objects"},{"line_number":965,"context_line":"        return self._set_domain_id_and_mapping("},{"line_number":966,"context_line":"            ref, domain_id, driver, mapping.EntityType.USER)"},{"line_number":967,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"df33271e_7b06761e","line":964,"in_reply_to":"1fa4df85_e0b7add7","updated":"2020-03-31 14:46:54.000000000","message":"Will do.","commit_id":"3236e64f1fe67ce5bce6c6996d6341e3f1370928"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"05405ec84139e46b2f46a826a5b91cc69a36b3da","unresolved":false,"context_lines":[{"line_number":961,"context_line":"        # Add user\u0027s federated objects"},{"line_number":962,"context_line":"        fed_objects \u003d self.shadow_users_api.get_federated_objects(user_id)"},{"line_number":963,"context_line":"        if fed_objects:"},{"line_number":964,"context_line":"            ref[\u0027federated\u0027] \u003d fed_objects"},{"line_number":965,"context_line":"        return self._set_domain_id_and_mapping("},{"line_number":966,"context_line":"            ref, domain_id, driver, mapping.EntityType.USER)"},{"line_number":967,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"df33271e_db4222ab","line":964,"in_reply_to":"df33271e_7b06761e","updated":"2020-03-31 15:00:06.000000000","message":"On second thought, I am concerned about the performance hit this would cause when listing users since it would turn it from one query to N queries.","commit_id":"3236e64f1fe67ce5bce6c6996d6341e3f1370928"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4f97ce8415991fbae92c09b8ad0993e77ea6c556","unresolved":false,"context_lines":[{"line_number":961,"context_line":"        # Add user\u0027s federated objects"},{"line_number":962,"context_line":"        fed_objects \u003d self.shadow_users_api.get_federated_objects(user_id)"},{"line_number":963,"context_line":"        if fed_objects:"},{"line_number":964,"context_line":"            ref[\u0027federated\u0027] \u003d fed_objects"},{"line_number":965,"context_line":"        return self._set_domain_id_and_mapping("},{"line_number":966,"context_line":"            ref, domain_id, driver, mapping.EntityType.USER)"},{"line_number":967,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"df33271e_442c69ab","line":964,"in_reply_to":"df33271e_db4222ab","updated":"2020-03-31 22:02:34.000000000","message":"thumbsup","commit_id":"3236e64f1fe67ce5bce6c6996d6341e3f1370928"}],"keystone/identity/shadow_backends/base.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"03491b0430afed20454f9f9aeb2ad5d100147db1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \"\"\"Create a new reformatted federated object list using the one passed in."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    When returning federated objects with a user we only need the attributes"},{"line_number":26,"context_line":"    idp_id, protocol_id, and unique_id. Therefore, we pull these elements out"},{"line_number":27,"context_line":"    of the fed_ref and create a newly formatted list with the needed"},{"line_number":28,"context_line":"    information."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_1ae956b7","line":26,"range":{"start_line":26,"start_character":4,"end_line":26,"end_character":38},"updated":"2017-03-23 12:50:39.000000000","message":"put an example of the list returned in this method.","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"d4db2f7199e14d9d372387a09a3da85261a8774a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \"\"\"Create a new reformatted federated object list using the one passed in."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    When returning federated objects with a user we only need the attributes"},{"line_number":26,"context_line":"    idp_id, protocol_id, and unique_id. Therefore, we pull these elements out"},{"line_number":27,"context_line":"    of the fed_ref and create a newly formatted list with the needed"},{"line_number":28,"context_line":"    information."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_e37052df","line":26,"range":{"start_line":26,"start_character":4,"end_line":26,"end_character":38},"in_reply_to":"1a1ced50_1ae956b7","updated":"2017-03-23 16:11:43.000000000","message":"Done","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"03491b0430afed20454f9f9aeb2ad5d100147db1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    if not fed_ref:"},{"line_number":33,"context_line":"        return []"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fed \u003d dict()"},{"line_number":36,"context_line":"    for fed_dict in fed_ref:"},{"line_number":37,"context_line":"        fed.setdefault("},{"line_number":38,"context_line":"            fed_dict[\u0027idp_id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_ba3922a6","line":35,"range":{"start_line":35,"start_character":10,"end_line":35,"end_character":16},"updated":"2017-03-23 12:50:39.000000000","message":"why not just {}?","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"d4db2f7199e14d9d372387a09a3da85261a8774a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    if not fed_ref:"},{"line_number":33,"context_line":"        return []"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fed \u003d dict()"},{"line_number":36,"context_line":"    for fed_dict in fed_ref:"},{"line_number":37,"context_line":"        fed.setdefault("},{"line_number":38,"context_line":"            fed_dict[\u0027idp_id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_23734ae9","line":35,"range":{"start_line":35,"start_character":10,"end_line":35,"end_character":16},"in_reply_to":"1a1ced50_ba3922a6","updated":"2017-03-23 16:11:43.000000000","message":"Done","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"03491b0430afed20454f9f9aeb2ad5d100147db1","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fed \u003d dict()"},{"line_number":36,"context_line":"    for fed_dict in fed_ref:"},{"line_number":37,"context_line":"        fed.setdefault("},{"line_number":38,"context_line":"            fed_dict[\u0027idp_id\u0027],"},{"line_number":39,"context_line":"            {"},{"line_number":40,"context_line":"                \u0027idp_id\u0027: fed_dict[\u0027idp_id\u0027],"},{"line_number":41,"context_line":"                \u0027protocols\u0027: []"},{"line_number":42,"context_line":"            }"},{"line_number":43,"context_line":"        )[\u0027protocols\u0027].append({"},{"line_number":44,"context_line":"            \u0027protocol_id\u0027: fed_dict[\u0027protocol_id\u0027],"},{"line_number":45,"context_line":"            \u0027unique_id\u0027: fed_dict[\u0027unique_id\u0027]"},{"line_number":46,"context_line":"        })"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    return list(fed.values())"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_7a024ab5","line":46,"range":{"start_line":37,"start_character":0,"end_line":46,"end_character":10},"updated":"2017-03-23 12:50:39.000000000","message":"this couldn\u0027t be harder to read.","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"d4db2f7199e14d9d372387a09a3da85261a8774a","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fed \u003d dict()"},{"line_number":36,"context_line":"    for fed_dict in fed_ref:"},{"line_number":37,"context_line":"        fed.setdefault("},{"line_number":38,"context_line":"            fed_dict[\u0027idp_id\u0027],"},{"line_number":39,"context_line":"            {"},{"line_number":40,"context_line":"                \u0027idp_id\u0027: fed_dict[\u0027idp_id\u0027],"},{"line_number":41,"context_line":"                \u0027protocols\u0027: []"},{"line_number":42,"context_line":"            }"},{"line_number":43,"context_line":"        )[\u0027protocols\u0027].append({"},{"line_number":44,"context_line":"            \u0027protocol_id\u0027: fed_dict[\u0027protocol_id\u0027],"},{"line_number":45,"context_line":"            \u0027unique_id\u0027: fed_dict[\u0027unique_id\u0027]"},{"line_number":46,"context_line":"        })"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    return list(fed.values())"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_23850aad","line":46,"range":{"start_line":37,"start_character":0,"end_line":46,"end_character":10},"in_reply_to":"1a1ced50_7a024ab5","updated":"2017-03-23 16:11:43.000000000","message":"Ah, the reformatting has to account for multiple objects and protocols to follow \nhttps://specs.openstack.org/openstack/keystone-specs/specs/keystone/ocata/support-federated-attr.html","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"4f7d54620dc05189d299e6ba0e088fe2cbef263b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        }"},{"line_number":40,"context_line":"    ]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    :returnanew_fed_ref"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":"    if not fed_ref:"},{"line_number":45,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_18e6b116","line":42,"range":{"start_line":42,"start_character":5,"end_line":42,"end_character":23},"updated":"2017-03-23 17:27:11.000000000","message":"typo","commit_id":"4a18bd9e473c0e1ed4b58de6b723db9a91b7f411"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"25e0f59cb74d4c6804d5610543d570ee81e38279","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        }"},{"line_number":40,"context_line":"    ]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    :returnanew_fed_ref"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":"    if not fed_ref:"},{"line_number":45,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_0ca3d650","line":42,"range":{"start_line":42,"start_character":5,"end_line":42,"end_character":23},"in_reply_to":"1a1ced50_18e6b116","updated":"2017-03-23 20:28:34.000000000","message":"Done","commit_id":"4a18bd9e473c0e1ed4b58de6b723db9a91b7f411"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"4f7d54620dc05189d299e6ba0e088fe2cbef263b","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    fed \u003d {}"},{"line_number":48,"context_line":"    for fed_dict in fed_ref:"},{"line_number":49,"context_line":"        fed.setdefault("},{"line_number":50,"context_line":"            fed_dict[\u0027idp_id\u0027],"},{"line_number":51,"context_line":"            {"},{"line_number":52,"context_line":"                \u0027idp_id\u0027: fed_dict[\u0027idp_id\u0027],"},{"line_number":53,"context_line":"                \u0027protocols\u0027: []"},{"line_number":54,"context_line":"            }"},{"line_number":55,"context_line":"        )[\u0027protocols\u0027].append({"},{"line_number":56,"context_line":"            \u0027protocol_id\u0027: fed_dict[\u0027protocol_id\u0027],"},{"line_number":57,"context_line":"            \u0027unique_id\u0027: fed_dict[\u0027unique_id\u0027]"},{"line_number":58,"context_line":"        })"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    return list(fed.values())"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_78c4055f","line":58,"range":{"start_line":49,"start_character":0,"end_line":58,"end_character":10},"updated":"2017-03-23 17:27:11.000000000","message":"can you refactor this? :)","commit_id":"4a18bd9e473c0e1ed4b58de6b723db9a91b7f411"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"25e0f59cb74d4c6804d5610543d570ee81e38279","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    fed \u003d {}"},{"line_number":48,"context_line":"    for fed_dict in fed_ref:"},{"line_number":49,"context_line":"        fed.setdefault("},{"line_number":50,"context_line":"            fed_dict[\u0027idp_id\u0027],"},{"line_number":51,"context_line":"            {"},{"line_number":52,"context_line":"                \u0027idp_id\u0027: fed_dict[\u0027idp_id\u0027],"},{"line_number":53,"context_line":"                \u0027protocols\u0027: []"},{"line_number":54,"context_line":"            }"},{"line_number":55,"context_line":"        )[\u0027protocols\u0027].append({"},{"line_number":56,"context_line":"            \u0027protocol_id\u0027: fed_dict[\u0027protocol_id\u0027],"},{"line_number":57,"context_line":"            \u0027unique_id\u0027: fed_dict[\u0027unique_id\u0027]"},{"line_number":58,"context_line":"        })"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    return list(fed.values())"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_2c6c1236","line":58,"range":{"start_line":49,"start_character":0,"end_line":58,"end_character":10},"in_reply_to":"1a1ced50_78c4055f","updated":"2017-03-23 20:28:34.000000000","message":"Refactor the spec or the code? If the code, elaborate please :)\nI could add a comment explaining the process like they mention here: http://stackoverflow.com/questions/3483520/use-cases-for-the-setdefault-dict-method ?","commit_id":"4a18bd9e473c0e1ed4b58de6b723db9a91b7f411"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"4f7d54620dc05189d299e6ba0e088fe2cbef263b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027unique_id\u0027: fed_dict[\u0027unique_id\u0027]"},{"line_number":58,"context_line":"        })"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    return list(fed.values())"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_989f0165","line":60,"range":{"start_line":60,"start_character":11,"end_line":60,"end_character":29},"updated":"2017-03-23 17:27:11.000000000","message":"this might be included in the refactoring","commit_id":"4a18bd9e473c0e1ed4b58de6b723db9a91b7f411"}],"keystone/tests/unit/identity/test_core.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"03491b0430afed20454f9f9aeb2ad5d100147db1","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        self.assertEqual(fed_dict[\u0027unique_id\u0027],"},{"line_number":193,"context_line":"                         fed_object[\u0027protocols\u0027][0][\u0027unique_id\u0027])"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def test_get_users_when_user_has_federated_users(self):"},{"line_number":196,"context_line":"        fed_dict \u003d unit.new_federated_user_ref()"},{"line_number":197,"context_line":"        user \u003d self.shadow_users_api.create_federated_user("},{"line_number":198,"context_line":"            self.domain_id, fed_dict)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_9a1466e9","line":195,"range":{"start_line":195,"start_character":13,"end_line":195,"end_character":22},"updated":"2017-03-23 12:50:39.000000000","message":"s/get_users/get_user","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"d4db2f7199e14d9d372387a09a3da85261a8774a","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        self.assertEqual(fed_dict[\u0027unique_id\u0027],"},{"line_number":193,"context_line":"                         fed_object[\u0027protocols\u0027][0][\u0027unique_id\u0027])"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def test_get_users_when_user_has_federated_users(self):"},{"line_number":196,"context_line":"        fed_dict \u003d unit.new_federated_user_ref()"},{"line_number":197,"context_line":"        user \u003d self.shadow_users_api.create_federated_user("},{"line_number":198,"context_line":"            self.domain_id, fed_dict)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_cc3f0386","line":195,"range":{"start_line":195,"start_character":13,"end_line":195,"end_character":22},"in_reply_to":"1a1ced50_9a1466e9","updated":"2017-03-23 16:11:43.000000000","message":"Done","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"03491b0430afed20454f9f9aeb2ad5d100147db1","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        # test that the user returns a federated object and that there is only"},{"line_number":201,"context_line":"        # one returned"},{"line_number":202,"context_line":"        user_ref \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":203,"context_line":"        self.assertTrue(\u0027federated\u0027 in user_ref)"},{"line_number":204,"context_line":"        self.assertEqual(1, len(user_ref[\u0027federated\u0027]))"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        # Verify that all federated attributes are present"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_7af08ac9","line":203,"range":{"start_line":203,"start_character":8,"end_line":203,"end_character":48},"updated":"2017-03-23 12:50:39.000000000","message":"self.assertIn(\u0027federated\u0027, user_ref)","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"d4db2f7199e14d9d372387a09a3da85261a8774a","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        # test that the user returns a federated object and that there is only"},{"line_number":201,"context_line":"        # one returned"},{"line_number":202,"context_line":"        user_ref \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":203,"context_line":"        self.assertTrue(\u0027federated\u0027 in user_ref)"},{"line_number":204,"context_line":"        self.assertEqual(1, len(user_ref[\u0027federated\u0027]))"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        # Verify that all federated attributes are present"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_ec44bf1c","line":203,"range":{"start_line":203,"start_character":8,"end_line":203,"end_character":48},"in_reply_to":"1a1ced50_7af08ac9","updated":"2017-03-23 16:11:43.000000000","message":"Done","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"03491b0430afed20454f9f9aeb2ad5d100147db1","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        self.assertEqual(1, len(user_ref[\u0027federated\u0027]))"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        # Verify that all federated attributes are present"},{"line_number":207,"context_line":"        self.assertTrue(\u0027federated\u0027 in user_ref)"},{"line_number":208,"context_line":"        self._assert_fed_dicts(fed_dict, user_ref[\u0027federated\u0027][0])"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_9aa706a6","line":207,"range":{"start_line":207,"start_character":8,"end_line":207,"end_character":48},"updated":"2017-03-23 12:50:39.000000000","message":"again?","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"d4db2f7199e14d9d372387a09a3da85261a8774a","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        self.assertEqual(1, len(user_ref[\u0027federated\u0027]))"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        # Verify that all federated attributes are present"},{"line_number":207,"context_line":"        self.assertTrue(\u0027federated\u0027 in user_ref)"},{"line_number":208,"context_line":"        self._assert_fed_dicts(fed_dict, user_ref[\u0027federated\u0027][0])"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_0c4afb27","line":207,"range":{"start_line":207,"start_character":8,"end_line":207,"end_character":48},"in_reply_to":"1a1ced50_9aa706a6","updated":"2017-03-23 16:11:43.000000000","message":"Done","commit_id":"bdd0db0607de5e99f745e24ee8d8599e1992a917"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"4f7d54620dc05189d299e6ba0e088fe2cbef263b","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        self.useFixture(database.Database())"},{"line_number":186,"context_line":"        self.load_backends()"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _assert_fed_dicts(self, fed_dict, fed_object):"},{"line_number":189,"context_line":"        self.assertEqual(fed_dict[\u0027idp_id\u0027], fed_object[\u0027idp_id\u0027])"},{"line_number":190,"context_line":"        self.assertEqual(fed_dict[\u0027protocol_id\u0027],"},{"line_number":191,"context_line":"                         fed_object[\u0027protocols\u0027][0][\u0027protocol_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_b88bdd1d","line":188,"range":{"start_line":188,"start_character":8,"end_line":188,"end_character":25},"updated":"2017-03-23 17:27:11.000000000","message":"I think would be good to follow the \"assertEqual\" naming convention (assertFedDicts) - I know we have this kind of examples in our code, however this is the \"default\" for Python tests.","commit_id":"4a18bd9e473c0e1ed4b58de6b723db9a91b7f411"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"25e0f59cb74d4c6804d5610543d570ee81e38279","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        self.useFixture(database.Database())"},{"line_number":186,"context_line":"        self.load_backends()"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _assert_fed_dicts(self, fed_dict, fed_object):"},{"line_number":189,"context_line":"        self.assertEqual(fed_dict[\u0027idp_id\u0027], fed_object[\u0027idp_id\u0027])"},{"line_number":190,"context_line":"        self.assertEqual(fed_dict[\u0027protocol_id\u0027],"},{"line_number":191,"context_line":"                         fed_object[\u0027protocols\u0027][0][\u0027protocol_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_45829cca","line":188,"range":{"start_line":188,"start_character":8,"end_line":188,"end_character":25},"in_reply_to":"1a1ced50_b88bdd1d","updated":"2017-03-23 20:28:34.000000000","message":"Done","commit_id":"4a18bd9e473c0e1ed4b58de6b723db9a91b7f411"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"5f7d197adfd93a55c7d5766361b8ee77fe92df16","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        self.assertEqual(fed_dict[\u0027unique_id\u0027],"},{"line_number":193,"context_line":"                         fed_object[\u0027protocols\u0027][0][\u0027unique_id\u0027])"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def test_get_user_when_user_has_federated_users(self):"},{"line_number":196,"context_line":"        fed_dict \u003d unit.new_federated_user_ref()"},{"line_number":197,"context_line":"        user \u003d self.shadow_users_api.create_federated_user("},{"line_number":198,"context_line":"            self.domain_id, fed_dict)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_a0c5a43e","line":195,"range":{"start_line":195,"start_character":46,"end_line":195,"end_character":51},"updated":"2017-03-24 19:56:10.000000000","message":"s/users/objects","commit_id":"f38d326704911cacf09d2b4bfc9214696d743811"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"8d2a29844b352314319b2347908ec812b65d8f6e","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        self.assertEqual(fed_dict[\u0027unique_id\u0027],"},{"line_number":193,"context_line":"                         fed_object[\u0027protocols\u0027][0][\u0027unique_id\u0027])"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def test_get_user_when_user_has_federated_users(self):"},{"line_number":196,"context_line":"        fed_dict \u003d unit.new_federated_user_ref()"},{"line_number":197,"context_line":"        user \u003d self.shadow_users_api.create_federated_user("},{"line_number":198,"context_line":"            self.domain_id, fed_dict)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_82e70b41","line":195,"range":{"start_line":195,"start_character":46,"end_line":195,"end_character":51},"in_reply_to":"ffe62b97_a0c5a43e","updated":"2017-03-27 14:27:36.000000000","message":"Done","commit_id":"f38d326704911cacf09d2b4bfc9214696d743811"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"4bc9a90ea6aaa3464a6159438fc86ccfcb1f4876","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class TestUserWithFederatedUser(test_v3.RestfulTestCase,"},{"line_number":189,"context_line":"                                test_shadow_users.ShadowUsersTests):"},{"line_number":190,"context_line":"    def setUp(self):"},{"line_number":191,"context_line":"        super(TestUserWithFederatedUser, self).setUp()"},{"line_number":192,"context_line":"        self.useFixture(database.Database())"},{"line_number":193,"context_line":"        self.load_backends()"}],"source_content_type":"text/x-python","patch_set":22,"id":"7faddb67_f85ff20b","line":190,"updated":"2019-08-21 13:41:51.000000000","message":"NIT: a new line space will be better.","commit_id":"bcc20b2d9f7de64aa29a94051ecafc0afee3053e"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"58279ba4b0e360a243682e991ed32734e9e48df2","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        self.assertEqual(CONF.ldap.query_scope, res.ldap.query_scope)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class TestUserWithFederatedUser(test_v3.RestfulTestCase,"},{"line_number":189,"context_line":"                                test_shadow_users.ShadowUsersTests):"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def setUp(self):"},{"line_number":192,"context_line":"        super(TestUserWithFederatedUser, self).setUp()"}],"source_content_type":"text/x-python","patch_set":24,"id":"df33271e_0a35b1da","line":189,"range":{"start_line":188,"start_character":32,"end_line":189,"end_character":66},"updated":"2020-04-07 16:27:14.000000000","message":"I think the domain conflict issue comes from this, this is combining two unrelated test classes, the v3 API test base class and the shadow users backend test class, and they have different ways of setting up the root and default domains.\n\nThis is not an API test, it\u0027s a manager/backend test, so can we have this not inherit from RestfulTestCase?\n\nCan we also move this test class to somewhere less generic - somewhere close to the shadow users tests, or the regular identity users tests? test_core.py does not seem like an appropriate place for this.","commit_id":"bcded012575faf6262531aa1a6b2ba1c4a4344cf"}],"keystone/tests/unit/test_v3.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a64c1b34f11635bd7b38f71e8b428427a905d3e4","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                    resource_base.NULL_DOMAIN_ID, root_domain)"},{"line_number":216,"context_line":"            except exception.Conflict:"},{"line_number":217,"context_line":"                # the root domain already exists, skip now."},{"line_number":218,"context_line":"                pass"},{"line_number":219,"context_line":"            domain \u003d unit.new_domain_ref("},{"line_number":220,"context_line":"                description\u003d(u\u0027The default domain\u0027),"},{"line_number":221,"context_line":"                id\u003dDEFAULT_DOMAIN_ID,"}],"source_content_type":"text/x-python","patch_set":23,"id":"1fa4df85_cd598a35","line":218,"updated":"2020-03-18 21:51:21.000000000","message":"This looks unrelated, is this an accidental rebase addition?","commit_id":"3236e64f1fe67ce5bce6c6996d6341e3f1370928"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"6022ab899f4ca0266307a5adc25186a10f96efcf","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                    resource_base.NULL_DOMAIN_ID, root_domain)"},{"line_number":216,"context_line":"            except exception.Conflict:"},{"line_number":217,"context_line":"                # the root domain already exists, skip now."},{"line_number":218,"context_line":"                pass"},{"line_number":219,"context_line":"            domain \u003d unit.new_domain_ref("},{"line_number":220,"context_line":"                description\u003d(u\u0027The default domain\u0027),"},{"line_number":221,"context_line":"                id\u003dDEFAULT_DOMAIN_ID,"}],"source_content_type":"text/x-python","patch_set":23,"id":"df33271e_db2fc285","line":218,"in_reply_to":"1fa4df85_cd598a35","updated":"2020-03-31 14:46:54.000000000","message":"I thought so too, but tests fail with a conflict error without this. Investigating.","commit_id":"3236e64f1fe67ce5bce6c6996d6341e3f1370928"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4f97ce8415991fbae92c09b8ad0993e77ea6c556","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                    resource_base.NULL_DOMAIN_ID, root_domain)"},{"line_number":216,"context_line":"            except exception.Conflict:"},{"line_number":217,"context_line":"                # the root domain already exists, skip now."},{"line_number":218,"context_line":"                pass"},{"line_number":219,"context_line":"            domain \u003d unit.new_domain_ref("},{"line_number":220,"context_line":"                description\u003d(u\u0027The default domain\u0027),"},{"line_number":221,"context_line":"                id\u003dDEFAULT_DOMAIN_ID,"}],"source_content_type":"text/x-python","patch_set":24,"id":"df33271e_472c6bab","line":218,"updated":"2020-03-31 22:02:34.000000000","message":"still would prefer to undo this or keep it in a separate patch if possible","commit_id":"bcded012575faf6262531aa1a6b2ba1c4a4344cf"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"8af62f0ca1848dfd550489dc79f21596a95211a9","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                    resource_base.NULL_DOMAIN_ID, root_domain)"},{"line_number":216,"context_line":"            except exception.Conflict:"},{"line_number":217,"context_line":"                # the root domain already exists, skip now."},{"line_number":218,"context_line":"                pass"},{"line_number":219,"context_line":"            domain \u003d unit.new_domain_ref("},{"line_number":220,"context_line":"                description\u003d(u\u0027The default domain\u0027),"},{"line_number":221,"context_line":"                id\u003dDEFAULT_DOMAIN_ID,"}],"source_content_type":"text/x-python","patch_set":24,"id":"df33271e_baaf4e7b","line":218,"in_reply_to":"df33271e_472c6bab","updated":"2020-03-31 22:37:49.000000000","message":"I agree, I\u0027m going to spend a few hours investigating why tests would fail without this.","commit_id":"bcded012575faf6262531aa1a6b2ba1c4a4344cf"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"a38eefc166c9399c93f15082cf10f5f44ed935a8","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                    resource_base.NULL_DOMAIN_ID, root_domain)"},{"line_number":216,"context_line":"            except exception.Conflict:"},{"line_number":217,"context_line":"                # the root domain already exists, skip now."},{"line_number":218,"context_line":"                pass"},{"line_number":219,"context_line":"            domain \u003d unit.new_domain_ref("},{"line_number":220,"context_line":"                description\u003d(u\u0027The default domain\u0027),"},{"line_number":221,"context_line":"                id\u003dDEFAULT_DOMAIN_ID,"}],"source_content_type":"text/x-python","patch_set":24,"id":"df33271e_477b35bd","line":218,"in_reply_to":"df33271e_baaf4e7b","updated":"2020-04-07 15:55:51.000000000","message":"I am unable to split this out in time or do more investigration.","commit_id":"bcded012575faf6262531aa1a6b2ba1c4a4344cf"}],"releasenotes/notes/federated-attr-a887677dbe0917cc.yaml":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d6655b5186e57250abe6a53e504545a8ac713d92","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Federated attributes can be used to query for users.  The three"},{"line_number":5,"context_line":"    paramaters of idp_id, protocol_id, and unique_id together can be"},{"line_number":6,"context_line":"    used to select a user from a Federated Identity provider that has"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3f79a3b5_bbaca436","line":3,"updated":"2018-10-22 21:02:13.000000000","message":"This needs to link to the specification.\n\nhttps://docs.openstack.org/keystone/latest/contributor/release-notes.html#release-notes-for-features","commit_id":"f7fe68b9f7b2766650ca57f21049e95758918f49"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"4bc9a90ea6aaa3464a6159438fc86ccfcb1f4876","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Federated attributes can be used to query for users.  The three"},{"line_number":5,"context_line":"    paramaters of idp_id, protocol_id, and unique_id together can be"},{"line_number":6,"context_line":"    used to select a user from a Federated Identity provider that has"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3fce034c_34e6bb18","line":3,"in_reply_to":"3f79a3b5_bbaca436","updated":"2019-08-21 13:41:51.000000000","message":"++","commit_id":"f7fe68b9f7b2766650ca57f21049e95758918f49"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"9d5a84924acc1071b03b39a4da0968ed8d9fc4ef","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Federated attributes can be used to query for users.  The three"},{"line_number":5,"context_line":"    paramaters of idp_id, protocol_id, and unique_id together can be"},{"line_number":6,"context_line":"    used to select a user from a Federated Identity provider that has"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"7faddb67_56b5b27c","line":3,"in_reply_to":"3f79a3b5_bbaca436","updated":"2019-08-06 15:27:44.000000000","message":"Done","commit_id":"f7fe68b9f7b2766650ca57f21049e95758918f49"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a64c1b34f11635bd7b38f71e8b428427a905d3e4","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    Federated attributes can be used to query for users.  The three"},{"line_number":6,"context_line":"    paramaters of idp_id, protocol_id, and unique_id together can be"},{"line_number":7,"context_line":"    used to select a user from a Federated Identity provider that has"},{"line_number":8,"context_line":"    previously authenticated via the identity service."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"1fa4df85_ada44e09","line":8,"updated":"2020-03-18 21:51:21.000000000","message":"I think I would add this to the final patch in the series, not the first.","commit_id":"3236e64f1fe67ce5bce6c6996d6341e3f1370928"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"6022ab899f4ca0266307a5adc25186a10f96efcf","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    Federated attributes can be used to query for users.  The three"},{"line_number":6,"context_line":"    paramaters of idp_id, protocol_id, and unique_id together can be"},{"line_number":7,"context_line":"    used to select a user from a Federated Identity provider that has"},{"line_number":8,"context_line":"    previously authenticated via the identity service."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"df33271e_c00eaf39","line":8,"in_reply_to":"1fa4df85_ada44e09","updated":"2020-03-31 14:46:54.000000000","message":"Will do.","commit_id":"3236e64f1fe67ce5bce6c6996d6341e3f1370928"}]}
