)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3186fc3f6a4fa07dc84b4240edba43ec4e070a69","unresolved":false,"context_lines":[{"line_number":7,"context_line":"List federated projects from keystoneauth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Handle the EmptyCatalog exception raised from the"},{"line_number":10,"context_line":"keystoneauth.keystoneauth1.service_catalog.url_for"},{"line_number":11,"context_line":"function in the unscoped token case."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Also make sure AUTH_INTERFACE is passed in from"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3a50d1a3_9b5e2411","line":10,"updated":"2015-07-21 02:18:46.000000000","message":"keystoneauth. can be removed, it is not really part of the module","commit_id":"8d6fcdd6567d1fb7f190ae9693665cab415ffdd4"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"2cab392af088076d7d080f20e8c7c3ad9ad41207","unresolved":false,"context_lines":[{"line_number":7,"context_line":"List federated projects from keystoneauth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Handle the EmptyCatalog exception raised from the"},{"line_number":10,"context_line":"keystoneauth.keystoneauth1.service_catalog.url_for"},{"line_number":11,"context_line":"function in the unscoped token case."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Also make sure AUTH_INTERFACE is passed in from"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3a50d1a3_4984160a","line":10,"in_reply_to":"3a50d1a3_9b5e2411","updated":"2015-07-27 23:11:44.000000000","message":"Done","commit_id":"8d6fcdd6567d1fb7f190ae9693665cab415ffdd4"}],"keystoneclient/tests/unit/v3/test_federation.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"4d7a7e4199a2cd63967f8de953ccc6097aa6c359","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import copy"},{"line_number":14,"context_line":"import uuid"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from keystoneauth1.tests.unit.auth import test_identity_v3_federation"},{"line_number":17,"context_line":"from keystoneclient import access"},{"line_number":18,"context_line":"from keystoneclient import exceptions"},{"line_number":19,"context_line":"from keystoneclient import fixture"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_221a9018","line":16,"updated":"2015-07-10 23:28:37.000000000","message":"keystoneauth1 is external library, move it to separate group of imports","commit_id":"caf9d72ba6a4589fd447bde0debf98f16c07665c"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"9987c1cacabc6479782a2fe57e6a01a4935e7690","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import copy"},{"line_number":14,"context_line":"import uuid"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from keystoneauth1.tests.unit.auth import test_identity_v3_federation"},{"line_number":17,"context_line":"from keystoneclient import access"},{"line_number":18,"context_line":"from keystoneclient import exceptions"},{"line_number":19,"context_line":"from keystoneclient import fixture"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_26834058","line":16,"in_reply_to":"9a41bdd9_221a9018","updated":"2015-07-13 13:24:58.000000000","message":"Done","commit_id":"caf9d72ba6a4589fd447bde0debf98f16c07665c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5f2a7551e92d7020495ad46980caa0d203468240","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        super(K2KFederatedProjectTests, self).setUp()"},{"line_number":364,"context_line":"        self.collection_key \u003d \u0027projects\u0027"},{"line_number":365,"context_line":"        self.model \u003d projects.Project"},{"line_number":366,"context_line":"        self.URL \u003d \"%s%s\" % (self.SP_ROOT_URL, \u0027/OS-FEDERATION/projects\u0027)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_list_projects(self):"},{"line_number":369,"context_line":"        self._mock_k2k_flow_urls()"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_c6fe1438","line":366,"updated":"2015-07-13 13:34:39.000000000","message":"use \u0027 for strings consistently.","commit_id":"457600890261829def783e08a827e3d5e8e1d96e"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"f86afd118ae3e4160a18645b68e9e195fef4113c","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        super(K2KFederatedProjectTests, self).setUp()"},{"line_number":364,"context_line":"        self.collection_key \u003d \u0027projects\u0027"},{"line_number":365,"context_line":"        self.model \u003d projects.Project"},{"line_number":366,"context_line":"        self.URL \u003d \"%s%s\" % (self.SP_ROOT_URL, \u0027/OS-FEDERATION/projects\u0027)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_list_projects(self):"},{"line_number":369,"context_line":"        self._mock_k2k_flow_urls()"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_b4e3f132","line":366,"in_reply_to":"9a41bdd9_c6fe1438","updated":"2015-07-13 15:21:36.000000000","message":"Done","commit_id":"457600890261829def783e08a827e3d5e8e1d96e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5f2a7551e92d7020495ad46980caa0d203468240","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_list_projects(self):"},{"line_number":369,"context_line":"        self._mock_k2k_flow_urls()"},{"line_number":370,"context_line":"        projects_ref \u003d [new_ref(), new_ref()]"},{"line_number":371,"context_line":"        projects_json \u003d {"},{"line_number":372,"context_line":"            self.collection_key: [new_ref(), new_ref()]"},{"line_number":373,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_461684a8","line":370,"updated":"2015-07-13 13:34:39.000000000","message":"move this down to where it\u0027s used so it\u0027s easier to see what it\u0027s for.\n\nAlso, since all it\u0027s used for is the length and the refs are ignored, why even have it?","commit_id":"457600890261829def783e08a827e3d5e8e1d96e"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"f86afd118ae3e4160a18645b68e9e195fef4113c","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_list_projects(self):"},{"line_number":369,"context_line":"        self._mock_k2k_flow_urls()"},{"line_number":370,"context_line":"        projects_ref \u003d [new_ref(), new_ref()]"},{"line_number":371,"context_line":"        projects_json \u003d {"},{"line_number":372,"context_line":"            self.collection_key: [new_ref(), new_ref()]"},{"line_number":373,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_14cbbda6","line":370,"in_reply_to":"9a41bdd9_461684a8","updated":"2015-07-13 15:21:36.000000000","message":"yeah good point. I\u0027ll update it.","commit_id":"457600890261829def783e08a827e3d5e8e1d96e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5f2a7551e92d7020495ad46980caa0d203468240","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        }"},{"line_number":374,"context_line":"        self.requests_mock.get(self.URL, json\u003dprojects_json)"},{"line_number":375,"context_line":"        version_json \u003d {"},{"line_number":376,"context_line":"            \"version\": fixture.discovery.V3Discovery(self.SP_ROOT_URL)"},{"line_number":377,"context_line":"        }"},{"line_number":378,"context_line":"        self.requests_mock.get(self.SP_ROOT_URL, json\u003dversion_json)"},{"line_number":379,"context_line":"        k2k_client \u003d client.Client(session\u003dself.session, auth\u003dself.k2kplugin)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_66fdc839","line":376,"updated":"2015-07-13 13:34:39.000000000","message":"use \u0027 for strings consistently.","commit_id":"457600890261829def783e08a827e3d5e8e1d96e"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"f86afd118ae3e4160a18645b68e9e195fef4113c","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        }"},{"line_number":374,"context_line":"        self.requests_mock.get(self.URL, json\u003dprojects_json)"},{"line_number":375,"context_line":"        version_json \u003d {"},{"line_number":376,"context_line":"            \"version\": fixture.discovery.V3Discovery(self.SP_ROOT_URL)"},{"line_number":377,"context_line":"        }"},{"line_number":378,"context_line":"        self.requests_mock.get(self.SP_ROOT_URL, json\u003dversion_json)"},{"line_number":379,"context_line":"        k2k_client \u003d client.Client(session\u003dself.session, auth\u003dself.k2kplugin)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_d4c5558e","line":376,"in_reply_to":"9a41bdd9_66fdc839","updated":"2015-07-13 15:21:36.000000000","message":"Done","commit_id":"457600890261829def783e08a827e3d5e8e1d96e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5f2a7551e92d7020495ad46980caa0d203468240","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        k2k_client \u003d client.Client(session\u003dself.session, auth\u003dself.k2kplugin)"},{"line_number":380,"context_line":"        returned_list \u003d k2k_client.federation.projects.list()"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        self.assertEqual(len(projects_ref), len(returned_list))"},{"line_number":383,"context_line":"        for project in returned_list:"},{"line_number":384,"context_line":"            self.assertIsInstance(project, self.model)"},{"line_number":385,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_664f08be","line":382,"updated":"2015-07-13 13:34:39.000000000","message":"suggest use matchers.HasLength","commit_id":"457600890261829def783e08a827e3d5e8e1d96e"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"f86afd118ae3e4160a18645b68e9e195fef4113c","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        k2k_client \u003d client.Client(session\u003dself.session, auth\u003dself.k2kplugin)"},{"line_number":380,"context_line":"        returned_list \u003d k2k_client.federation.projects.list()"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        self.assertEqual(len(projects_ref), len(returned_list))"},{"line_number":383,"context_line":"        for project in returned_list:"},{"line_number":384,"context_line":"            self.assertIsInstance(project, self.model)"},{"line_number":385,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_94bfcdfa","line":382,"in_reply_to":"9a41bdd9_664f08be","updated":"2015-07-13 15:21:36.000000000","message":"Done","commit_id":"457600890261829def783e08a827e3d5e8e1d96e"}],"keystoneclient/v3/contrib/federation/base.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"4d7a7e4199a2cd63967f8de953ccc6097aa6c359","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import six"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystoneauth1.auth import base as base_auth"},{"line_number":18,"context_line":"from keystoneclient import base"},{"line_number":19,"context_line":"from keystoneclient import exceptions"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_a20ea0e3","line":17,"updated":"2015-07-10 23:28:37.000000000","message":"keystoneauth1 is an external library, group it together with six","commit_id":"caf9d72ba6a4589fd447bde0debf98f16c07665c"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"9987c1cacabc6479782a2fe57e6a01a4935e7690","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import six"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystoneauth1.auth import base as base_auth"},{"line_number":18,"context_line":"from keystoneclient import base"},{"line_number":19,"context_line":"from keystoneclient import exceptions"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_a697508f","line":17,"in_reply_to":"9a41bdd9_a20ea0e3","updated":"2015-07-13 13:24:58.000000000","message":"Done","commit_id":"caf9d72ba6a4589fd447bde0debf98f16c07665c"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3186fc3f6a4fa07dc84b4240edba43ec4e070a69","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        url \u003d \u0027/OS-FEDERATION/%s\u0027 % self.object_type"},{"line_number":33,"context_line":"        try:"},{"line_number":34,"context_line":"            tenant_list \u003d self._list(url, self.object_type)"},{"line_number":35,"context_line":"        except (exceptions.EndpointNotFound, exceptions.EmptyCatalog):"},{"line_number":36,"context_line":"            endpoint_filter \u003d {\u0027interface\u0027: base_auth.AUTH_INTERFACE}"},{"line_number":37,"context_line":"            tenant_list \u003d self._list(url, self.object_type,"},{"line_number":38,"context_line":"                                     endpoint_filter\u003dendpoint_filter)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_9be38433","line":35,"updated":"2015-07-21 02:18:46.000000000","message":"If the service catalog is empty, why do is another query attempted? it will just hit the same error anyway.","commit_id":"8d6fcdd6567d1fb7f190ae9693665cab415ffdd4"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"2cab392af088076d7d080f20e8c7c3ad9ad41207","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        url \u003d \u0027/OS-FEDERATION/%s\u0027 % self.object_type"},{"line_number":33,"context_line":"        try:"},{"line_number":34,"context_line":"            tenant_list \u003d self._list(url, self.object_type)"},{"line_number":35,"context_line":"        except (exceptions.EndpointNotFound, exceptions.EmptyCatalog):"},{"line_number":36,"context_line":"            endpoint_filter \u003d {\u0027interface\u0027: base_auth.AUTH_INTERFACE}"},{"line_number":37,"context_line":"            tenant_list \u003d self._list(url, self.object_type,"},{"line_number":38,"context_line":"                                     endpoint_filter\u003dendpoint_filter)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_c971060e","line":35,"in_reply_to":"3a50d1a3_9be38433","updated":"2015-07-27 23:11:44.000000000","message":"The service catalog is expected to be empty in my normal case - I\u0027m starting with an unscoped token which has no service catalog.\n\nThe second call doesn\u0027t get an error; the difference is the endpoint_filter. Passing this parameter triggers a separate branch of code to get the url.\n\nhttps://github.com/openstack/python-keystoneclient/blob/b1496abbb77360672d1d94e689513daeeb3cafd0/keystoneclient/auth/identity/base.py#L300","commit_id":"8d6fcdd6567d1fb7f190ae9693665cab415ffdd4"}]}
