)]}'
{"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":"04e3cddc403ce52b44f6d601876f260b7393161c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import copy"},{"line_number":14,"context_line":"from testtools import matchers"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystoneauth1.tests.unit.identity import test_identity_v3_federation"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_32a398a0","line":14,"updated":"2015-12-01 10:32:13.000000000","message":"move this down with keystoneauth1 import","commit_id":"bfde03fcc1c34779a39ce4b969c34b37d6bc85d5"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"e035e589a1d6cfd985c606018e3d31a44af5a464","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import copy"},{"line_number":14,"context_line":"from testtools import matchers"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystoneauth1.tests.unit.identity import test_identity_v3_federation"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_896daa34","line":14,"in_reply_to":"9a8ffd7b_32a398a0","updated":"2015-12-03 17:47:38.000000000","message":"Done","commit_id":"bfde03fcc1c34779a39ce4b969c34b37d6bc85d5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"cdb67ddfcb6efb6f77e326cedbe133bd0d97cab0","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.identity import test_identity_v3_federation"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneclient import access"},{"line_number":19,"context_line":"from keystoneclient import exceptions"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_409cf25c","line":16,"range":{"start_line":16,"start_character":46,"end_line":16,"end_character":73},"updated":"2016-01-04 22:36:17.000000000","message":"don\u0027t do this. There\u0027s no guarantee/expectation of stability in test cases.\n\nFor test code it doesn\u0027t really matter if we copy and paste.","commit_id":"d6cdeaac174d41dc507c29a052265db4b9c9558a"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"39a00890c1933f6275c3f33b859d4e4e08b3b7be","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.identity import test_identity_v3_federation"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneclient import access"},{"line_number":19,"context_line":"from keystoneclient import exceptions"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_e7895127","line":16,"range":{"start_line":16,"start_character":46,"end_line":16,"end_character":73},"in_reply_to":"fa69d971_409cf25c","updated":"2016-01-05 19:01:26.000000000","message":"Done","commit_id":"d6cdeaac174d41dc507c29a052265db4b9c9558a"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"5d0f5331492e21e9b1f26565134c6c4d12f100f6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import uuid"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import six"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneauth1 import fixture as auth_fixture"},{"line_number":19,"context_line":"from keystoneauth1.identity import v3"},{"line_number":20,"context_line":"from keystoneauth1 import session"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_4d4cfb9d","line":17,"updated":"2016-01-05 21:12:19.000000000","message":"this blank line can be removed","commit_id":"829d49c413cef2c40c1a3807f22d97c239a7fccc"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"d60595855faa3d70c5c75ef99c45f4aee452aec2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import uuid"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import six"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneauth1 import fixture as auth_fixture"},{"line_number":19,"context_line":"from keystoneauth1.identity import v3"},{"line_number":20,"context_line":"from keystoneauth1 import session"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_590b4124","line":17,"in_reply_to":"fa69d971_4d4cfb9d","updated":"2016-01-06 13:28:40.000000000","message":"Done","commit_id":"829d49c413cef2c40c1a3807f22d97c239a7fccc"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"5d0f5331492e21e9b1f26565134c6c4d12f100f6","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from keystoneclient.v3 import domains"},{"line_number":34,"context_line":"from keystoneclient.v3 import projects"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"from testtools import matchers"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class IdentityProviderTests(utils.ClientTestCase, utils.CrudTests):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_0d6b63f2","line":36,"updated":"2016-01-05 21:12:19.000000000","message":"This can be put up with import six","commit_id":"829d49c413cef2c40c1a3807f22d97c239a7fccc"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"d60595855faa3d70c5c75ef99c45f4aee452aec2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from keystoneclient.v3 import domains"},{"line_number":34,"context_line":"from keystoneclient.v3 import projects"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"from testtools import matchers"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class IdentityProviderTests(utils.ClientTestCase, utils.CrudTests):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_1912a957","line":36,"in_reply_to":"fa69d971_0d6b63f2","updated":"2016-01-06 13:28:40.000000000","message":"Done","commit_id":"829d49c413cef2c40c1a3807f22d97c239a7fccc"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"09002d4edf40ecb6459850a4b315fb3a6f2fb0d7","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import six"},{"line_number":17,"context_line":"from testtools import matchers"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystoneauth1 import fixture as auth_fixture"},{"line_number":20,"context_line":"from keystoneauth1.identity import v3"},{"line_number":21,"context_line":"from keystoneauth1 import session"},{"line_number":22,"context_line":"from keystoneauth1.tests.unit import k2k_fixtures"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa69d971_9fbd1904","line":19,"range":{"start_line":19,"start_character":5,"end_line":19,"end_character":18},"updated":"2016-01-06 14:22:45.000000000","message":"keystoneauth1 is considered a \u00273rd-party lib\u0027. Check out the imports for keystoneclient inside keystone: https://github.com/openstack/keystone/blob/3ac286897fe84d9dff0f018385dc88ed4f4c7600/keystone/token/providers/pki.py","commit_id":"f38a67349b018d7879ebd5744527ce8c3ca19cf9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"37b67b4baa516d81127988372a1c1d91b7da4e44","unresolved":false,"context_lines":[{"line_number":380,"context_line":"    REQUEST_ECP_URL \u003d TEST_URL + \u0027/auth/OS-FEDERATION/saml2/ecp\u0027"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    SP_ID \u003d \u0027sp1\u0027"},{"line_number":383,"context_line":"    SP_ROOT_URL \u003d \u0027https://sp1.com/v3\u0027"},{"line_number":384,"context_line":"    SP_URL \u003d \u0027https://sp1.com/Shibboleth.sso/SAML2/ECP\u0027"},{"line_number":385,"context_line":"    SP_AUTH_URL \u003d (SP_ROOT_URL +"},{"line_number":386,"context_line":"                   \u0027/OS-FEDERATION/identity_providers\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"9abb7d3a_82d635ef","line":383,"updated":"2016-06-03 13:26:17.000000000","message":"Always use example.com (and any subdomain thereof you\u0027d like) instead of using real domain names -- that is the IANA reserved purpose of example.com","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b1dbd59d1f05837b440a77b8a5471b71274c3d1f","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                           username\u003dself.TEST_USER,"},{"line_number":413,"context_line":"                           password\u003dself.TEST_PASS)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _mock_k2k_flow_urls(self):"},{"line_number":416,"context_line":"        # List versions available for auth"},{"line_number":417,"context_line":"        self.requests_mock.get("},{"line_number":418,"context_line":"            self.TEST_URL,"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_89073bc9","line":415,"updated":"2016-05-10 11:47:07.000000000","message":"think the comments should be more clear about each step","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b1dbd59d1f05837b440a77b8a5471b71274c3d1f","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                           password\u003dself.TEST_PASS)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _mock_k2k_flow_urls(self):"},{"line_number":416,"context_line":"        # List versions available for auth"},{"line_number":417,"context_line":"        self.requests_mock.get("},{"line_number":418,"context_line":"            self.TEST_URL,"},{"line_number":419,"context_line":"            json\u003d{\u0027version\u0027: auth_fixture.V3Discovery(self.TEST_URL)},"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_e9f887c5","line":416,"range":{"start_line":416,"start_character":8,"end_line":416,"end_character":42},"updated":"2016-05-10 11:47:07.000000000","message":"example: # First, list versions available for auth","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"70fba445bc04cef9cca3183de624014fffc2f192","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                           password\u003dself.TEST_PASS)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _mock_k2k_flow_urls(self):"},{"line_number":416,"context_line":"        # List versions available for auth"},{"line_number":417,"context_line":"        self.requests_mock.get("},{"line_number":418,"context_line":"            self.TEST_URL,"},{"line_number":419,"context_line":"            json\u003d{\u0027version\u0027: auth_fixture.V3Discovery(self.TEST_URL)},"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_076853b8","line":416,"in_reply_to":"7aa08908_6ce49eab","updated":"2016-06-07 23:32:41.000000000","message":"absolutely, used an example to illustrate the idea (not to be followed exactly)","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"8ee3029e47704e9045641226c2ec9726209bfeff","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                           password\u003dself.TEST_PASS)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _mock_k2k_flow_urls(self):"},{"line_number":416,"context_line":"        # List versions available for auth"},{"line_number":417,"context_line":"        self.requests_mock.get("},{"line_number":418,"context_line":"            self.TEST_URL,"},{"line_number":419,"context_line":"            json\u003d{\u0027version\u0027: auth_fixture.V3Discovery(self.TEST_URL)},"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_6ce49eab","line":416,"in_reply_to":"9abb7d3a_42f44dce","updated":"2016-06-07 23:14:44.000000000","message":"++","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"37b67b4baa516d81127988372a1c1d91b7da4e44","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                           password\u003dself.TEST_PASS)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _mock_k2k_flow_urls(self):"},{"line_number":416,"context_line":"        # List versions available for auth"},{"line_number":417,"context_line":"        self.requests_mock.get("},{"line_number":418,"context_line":"            self.TEST_URL,"},{"line_number":419,"context_line":"            json\u003d{\u0027version\u0027: auth_fixture.V3Discovery(self.TEST_URL)},"}],"source_content_type":"text/x-python","patch_set":12,"id":"9abb7d3a_42f44dce","line":416,"in_reply_to":"dab17558_e9f887c5","updated":"2016-06-03 13:26:17.000000000","message":"Inline comments should explain WHY the code is doing what it\u0027s doing, not WHAT it\u0027s doing. Your suggestion does not strengthen the WHY, so I don\u0027t think that would add any meaningful value.\n\nAdditionally, when this code is modified in the future and the comments are inevitably not updated to match, the inclusion of language like \"first\" and \"then\" will become confusing.","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b1dbd59d1f05837b440a77b8a5471b71274c3d1f","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            json\u003d{\u0027version\u0027: auth_fixture.V3Discovery(self.TEST_URL)},"},{"line_number":420,"context_line":"            headers\u003d{\u0027Content-Type\u0027: \u0027application/json\u0027})"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"        # The IdP should return a ECP wrapped assertion when requested"},{"line_number":423,"context_line":"        self.requests_mock.register_uri("},{"line_number":424,"context_line":"            \u0027POST\u0027,"},{"line_number":425,"context_line":"            self.REQUEST_ECP_URL,"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_a9295f39","line":422,"range":{"start_line":422,"start_character":8,"end_line":422,"end_character":70},"updated":"2016-05-10 11:47:07.000000000","message":"example: Then, the identity provider receives a request for an ECP wrapped assertion","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"70fba445bc04cef9cca3183de624014fffc2f192","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            json\u003d{\u0027version\u0027: auth_fixture.V3Discovery(self.TEST_URL)},"},{"line_number":420,"context_line":"            headers\u003d{\u0027Content-Type\u0027: \u0027application/json\u0027})"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"        # The IdP should return a ECP wrapped assertion when requested"},{"line_number":423,"context_line":"        self.requests_mock.register_uri("},{"line_number":424,"context_line":"            \u0027POST\u0027,"},{"line_number":425,"context_line":"            self.REQUEST_ECP_URL,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_c77f6b64","line":422,"range":{"start_line":422,"start_character":8,"end_line":422,"end_character":70},"in_reply_to":"dab17558_a9295f39","updated":"2016-06-07 23:32:41.000000000","message":"better suggestion:\n\nThe identity provider receives a request for an ECP wrapped assertion - this assertion contains the user authentication info and will be presented to the service provider.","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b1dbd59d1f05837b440a77b8a5471b71274c3d1f","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            headers\u003d{\u0027Content-Type\u0027: \u0027application/vnd.paos+xml\u0027},"},{"line_number":428,"context_line":"            status_code\u003d200)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        # The SP should respond with a 302"},{"line_number":431,"context_line":"        self.requests_mock.register_uri("},{"line_number":432,"context_line":"            \u0027POST\u0027,"},{"line_number":433,"context_line":"            self.SP_URL,"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_a9b79ff3","line":430,"range":{"start_line":430,"start_character":8,"end_line":430,"end_character":42},"updated":"2016-05-10 11:47:07.000000000","message":"example: # The service provider is presented with the ECP wrapped assertion generated by the identity provider and should return a redirect (302 or 303) upon successful authentication","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"37b67b4baa516d81127988372a1c1d91b7da4e44","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        return v3.Keystone2Keystone(**kwargs)"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    def test_list_projects(self):"},{"line_number":451,"context_line":"        self._mock_k2k_flow_urls()"},{"line_number":452,"context_line":"        projects_json \u003d {"},{"line_number":453,"context_line":"            self.collection_key: [self.new_ref(), self.new_ref()]"},{"line_number":454,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":12,"id":"9abb7d3a_a277f900","line":451,"updated":"2016-06-03 13:26:17.000000000","message":"Depending on how you see this method \u0026 class being developed in the future, this could be done in setUp.","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"37b67b4baa516d81127988372a1c1d91b7da4e44","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        projects_json \u003d {"},{"line_number":453,"context_line":"            self.collection_key: [self.new_ref(), self.new_ref()]"},{"line_number":454,"context_line":"        }"},{"line_number":455,"context_line":"        self.requests_mock.get(self.URL, json\u003dprojects_json)"},{"line_number":456,"context_line":"        version_json \u003d {"},{"line_number":457,"context_line":"            \u0027version\u0027: auth_fixture.discovery.V3Discovery(self.SP_ROOT_URL)"},{"line_number":458,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":12,"id":"9abb7d3a_c265dd1d","line":455,"updated":"2016-06-03 13:26:17.000000000","message":"Considering that you don\u0027t need projects_json and version_json past this point, this would read more easily if there were no unnecessary variables for the reader to keep track of when reading this method.\n\n  self.requests_mock.get(self.URL, json\u003d{\n      self.collection_key: [self.new_ref(), self.new_ref()]\n  })","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b1dbd59d1f05837b440a77b8a5471b71274c3d1f","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        }"},{"line_number":459,"context_line":"        self.requests_mock.get(self.SP_ROOT_URL, json\u003dversion_json)"},{"line_number":460,"context_line":"        k2k_client \u003d client.Client(session\u003dself.session, auth\u003dself.k2kplugin)"},{"line_number":461,"context_line":"        returned_list \u003d k2k_client.federation.projects.list()"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        self.assertThat(returned_list, matchers.HasLength(2))"},{"line_number":464,"context_line":"        for project in returned_list:"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_49c39338","line":461,"range":{"start_line":461,"start_character":8,"end_line":461,"end_character":61},"updated":"2016-05-10 11:47:07.000000000","message":"I\u0027d put the mocks right before the mocked action. Like:\n\n        self._mock_k2k_flow_urls()\n        k2k_client \u003d client.Client(session\u003dself.session, auth\u003dself.k2kplugin)\n\n        projects_json \u003d {\n            self.collection_key: [self.new_ref(), self.new_ref()]\n        }\n        self.requests_mock.get(self.URL, json\u003dprojects_json)\n        version_json \u003d {\n            \u0027version\u0027: auth_fixture.discovery.V3Discovery(self.SP_ROOT_URL)\n        }\n        self.requests_mock.get(self.SP_ROOT_URL, json\u003dversion_json)\n        returned_list \u003d k2k_client.federation.projects.list()","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"70fba445bc04cef9cca3183de624014fffc2f192","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        }"},{"line_number":459,"context_line":"        self.requests_mock.get(self.SP_ROOT_URL, json\u003dversion_json)"},{"line_number":460,"context_line":"        k2k_client \u003d client.Client(session\u003dself.session, auth\u003dself.k2kplugin)"},{"line_number":461,"context_line":"        returned_list \u003d k2k_client.federation.projects.list()"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        self.assertThat(returned_list, matchers.HasLength(2))"},{"line_number":464,"context_line":"        for project in returned_list:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_27758f63","line":461,"in_reply_to":"9abb7d3a_c24cbd9f","updated":"2016-06-07 23:32:41.000000000","message":"absolutely! forgot to explain it:\n\nthe idea of putting them together is to be more clear for someone who is reading the code, it is easier to follow the \"flow\" of the actions:\n\n   mockActionA()\n   actionA()\n\n   moackActionB()\n   actionB()","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"37b67b4baa516d81127988372a1c1d91b7da4e44","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        }"},{"line_number":459,"context_line":"        self.requests_mock.get(self.SP_ROOT_URL, json\u003dversion_json)"},{"line_number":460,"context_line":"        k2k_client \u003d client.Client(session\u003dself.session, auth\u003dself.k2kplugin)"},{"line_number":461,"context_line":"        returned_list \u003d k2k_client.federation.projects.list()"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        self.assertThat(returned_list, matchers.HasLength(2))"},{"line_number":464,"context_line":"        for project in returned_list:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9abb7d3a_c24cbd9f","line":461,"in_reply_to":"dab17558_49c39338","updated":"2016-06-03 13:26:17.000000000","message":"When you make suggestions for others to follow, you need to explain the reasoning behind them.","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"48db8698e436c86fe640a40d890630bc1fcf7e28","unresolved":false,"context_lines":[{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        # The service provider is presented with the ECP wrapped assertion"},{"line_number":431,"context_line":"        # generated by the identity provider and should return a redirect"},{"line_number":432,"context_line":"        # (302 or 303) upon successful authentication"},{"line_number":433,"context_line":"        self.requests_mock.register_uri("},{"line_number":434,"context_line":"            \u0027POST\u0027,"},{"line_number":435,"context_line":"            self.SP_URL,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_0932e1a6","line":432,"updated":"2016-06-08 20:37:48.000000000","message":"nit: The comment suggests that a 303 is acceptable, but the code expects a 302. If a 303 is acceptable here, that\u0027d be news to me.","commit_id":"16a2adac86c5b7e5ce0864bcf501799badc3fd32"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"0f1d46dec41b9e9691c6727cf9ee861ea66b95df","unresolved":false,"context_lines":[{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        # The service provider is presented with the ECP wrapped assertion"},{"line_number":431,"context_line":"        # generated by the identity provider and should return a redirect"},{"line_number":432,"context_line":"        # (302 or 303) upon successful authentication"},{"line_number":433,"context_line":"        self.requests_mock.register_uri("},{"line_number":434,"context_line":"            \u0027POST\u0027,"},{"line_number":435,"context_line":"            self.SP_URL,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_74437c6c","line":432,"in_reply_to":"7aa08908_0932e1a6","updated":"2016-06-08 21:07:18.000000000","message":"some service providers returns 303 at this step, for example, mod_auth_mellon.","commit_id":"16a2adac86c5b7e5ce0864bcf501799badc3fd32"}],"keystoneclient/v3/contrib/federation/base.py":[{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2050ef764269dcb822dfdf60c42a05e5c1d4aa5a","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystoneclient.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":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_2fba45c1","side":"PARENT","line":19,"updated":"2015-11-09 17:29:18.000000000","message":"This is an interesting situation I was picking apart your test to see if this works correctly and I ran into the fact that if you removed \u0027exceptions.EmptyCatalog\u0027  Your tests still pass.  hmm so I dug in deeper and found that keystoneauth1.exceptions.EmptyCatalog is derived from keystoneauth1.exceptions.EndpointNotFound\n(https://github.com/openstack/keystoneauth/blob/master/keystoneauth1/exceptions/catalog.py#L25-#L30)\n\nWhich leads me to my question.  Should we leave \u0027from keystoneclient import exceptions\u0027 too? Since technically \u0027exceptions.EndpointNotFound\u0027 is a different exception and since \u0027exceptions.EndpointNotFound\u0027 has no test that checks it, we can\u0027t prove that this change works.","commit_id":"1242f9f7018c6bf10d9cb03777f58ecbb5ea1235"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"940141cc0efa94a13516f158d4807c72ce46fe6e","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystoneclient.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":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_165bb055","side":"PARENT","line":19,"in_reply_to":"da85f559_2fba45c1","updated":"2015-11-10 14:11:02.000000000","message":"great catch, Tom, thank you! yeah, I agree that keystoneclient.exceptions must be kept since we\u0027re covering only the exception coming from keystoneauth in this patch.","commit_id":"1242f9f7018c6bf10d9cb03777f58ecbb5ea1235"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"573e517e23ea3c5a7a151973172ba42e311e444c","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystoneauth1 import exceptions as auth_exceptions"},{"line_number":18,"context_line":"from keystoneclient.auth import base as base_auth"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystoneclient import base"},{"line_number":21,"context_line":"from keystoneclient import exceptions"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_6db7c3d8","line":19,"updated":"2015-11-10 15:24:38.000000000","message":"this line should be removed.  See http://docs.openstack.org/developer/hacking/#imports","commit_id":"296497c9c2a6851e2e432ee07f953a4ea0a63e15"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"04e3cddc403ce52b44f6d601876f260b7393161c","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 import exceptions as auth_exceptions"},{"line_number":18,"context_line":"from keystoneclient.auth import base as base_auth"},{"line_number":19,"context_line":"from keystoneclient import base"},{"line_number":20,"context_line":"from keystoneclient import exceptions"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_121774ee","line":17,"updated":"2015-12-01 10:32:13.000000000","message":"no longer necessary, you can just reference from the keystoneclient.exception\n\nhttps://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/exceptions.py#L369","commit_id":"bfde03fcc1c34779a39ce4b969c34b37d6bc85d5"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"e035e589a1d6cfd985c606018e3d31a44af5a464","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 import exceptions as auth_exceptions"},{"line_number":18,"context_line":"from keystoneclient.auth import base as base_auth"},{"line_number":19,"context_line":"from keystoneclient import base"},{"line_number":20,"context_line":"from keystoneclient import exceptions"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_6974fefc","line":17,"in_reply_to":"9a8ffd7b_121774ee","updated":"2015-12-03 17:47:38.000000000","message":"Done","commit_id":"bfde03fcc1c34779a39ce4b969c34b37d6bc85d5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"cdb67ddfcb6efb6f77e326cedbe133bd0d97cab0","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":"fa69d971_c0ec62f5","line":35,"updated":"2016-01-04 22:36:17.000000000","message":"or you can replace it with exceptions.EndpointException","commit_id":"d6cdeaac174d41dc507c29a052265db4b9c9558a"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"39a00890c1933f6275c3f33b859d4e4e08b3b7be","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":"fa69d971_479a9d6f","line":35,"in_reply_to":"fa69d971_c0ec62f5","updated":"2016-01-05 19:01:26.000000000","message":"Done","commit_id":"d6cdeaac174d41dc507c29a052265db4b9c9558a"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"5d0f5331492e21e9b1f26565134c6c4d12f100f6","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.EndpointException):"},{"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":10,"id":"fa69d971_2debc779","line":35,"range":{"start_line":35,"start_character":15,"end_line":35,"end_character":16},"updated":"2016-01-05 21:12:19.000000000","message":"no need for the parenthesis","commit_id":"829d49c413cef2c40c1a3807f22d97c239a7fccc"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"d60595855faa3d70c5c75ef99c45f4aee452aec2","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.EndpointException):"},{"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":10,"id":"fa69d971_b91cbd6a","line":35,"range":{"start_line":35,"start_character":15,"end_line":35,"end_character":16},"in_reply_to":"fa69d971_2debc779","updated":"2016-01-06 13:28:40.000000000","message":"Done","commit_id":"829d49c413cef2c40c1a3807f22d97c239a7fccc"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"d196158a6ee514285376d11751266f55455d95de","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.EndpointException:"},{"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":12,"id":"fa69d971_f05c7f1a","line":35,"updated":"2016-01-06 16:30:01.000000000","message":"I think a comment here explaining the two use cases when the exception is thrown would be helpful.","commit_id":"1b14394e7cb320118baf9619a111796585742e78"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"11552bd8f3d934a25c2be1c439984c37aa4ad062","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.EndpointException:"},{"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":12,"id":"dab17558_cae3d0a2","line":35,"in_reply_to":"fa69d971_f05c7f1a","updated":"2016-05-10 23:42:14.000000000","message":"The bug is quite detailed so i\u0027m ok there. \n\nMy concern is more if you are hitting this problem then you are using an unscoped token to get federation details. This is going to fail because your federation abilities depend on the project you are in. \n\nI\u0027m good with the change here, but you have more problems than this.","commit_id":"1b14394e7cb320118baf9619a111796585742e78"}]}
