)]}'
{"keystone/catalog/backends/sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"539919eef27232e451871acb17771bd580971d3d","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                    all())"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        def make_v3_endpoints(endpoints):"},{"line_number":284,"context_line":"            for endpoint in (ep.to_dict() for ep in endpoints if ep.enabled):"},{"line_number":285,"context_line":"                del endpoint[\u0027service_id\u0027]"},{"line_number":286,"context_line":"                try:"},{"line_number":287,"context_line":"                    endpoint[\u0027url\u0027] \u003d core.format_url(endpoint[\u0027url\u0027], d)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9hCw%3D","line":284,"updated":"2014-04-04 00:19:02.000000000","message":"this is going to conflict with ayoung\u0027s patch -- https://review.openstack.org/#/c/85147/","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"97def3d496c2ede5dea8e4343c9b0f8ed0b1a95c","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                    all())"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        def make_v3_endpoints(endpoints):"},{"line_number":284,"context_line":"            for endpoint in (ep.to_dict() for ep in endpoints if ep.enabled):"},{"line_number":285,"context_line":"                del endpoint[\u0027service_id\u0027]"},{"line_number":286,"context_line":"                try:"},{"line_number":287,"context_line":"                    endpoint[\u0027url\u0027] \u003d core.format_url(endpoint[\u0027url\u0027], d)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9cl8%3D","line":284,"in_reply_to":"AAAAWH%2F9hCw%3D","updated":"2014-04-04 13:43:46.000000000","message":"I\u0027ll watch this patch and base this work on top once it\u0027s closer to being ready.","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"539919eef27232e451871acb17771bd580971d3d","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                try:"},{"line_number":287,"context_line":"                    endpoint[\u0027url\u0027] \u003d core.format_url(endpoint[\u0027url\u0027], d)"},{"line_number":288,"context_line":"                except exception.MalformedEndpoint:"},{"line_number":289,"context_line":"                    continue  # this failure is already logged in format_url()"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"                yield endpoint"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9hCg%3D","line":289,"updated":"2014-04-04 00:19:02.000000000","message":"why is format_url logging it when it\u0027s raising an exception anyways?","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"97def3d496c2ede5dea8e4343c9b0f8ed0b1a95c","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                try:"},{"line_number":287,"context_line":"                    endpoint[\u0027url\u0027] \u003d core.format_url(endpoint[\u0027url\u0027], d)"},{"line_number":288,"context_line":"                except exception.MalformedEndpoint:"},{"line_number":289,"context_line":"                    continue  # this failure is already logged in format_url()"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"                yield endpoint"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ckg%3D","line":289,"in_reply_to":"AAAAWH%2F9hCg%3D","updated":"2014-04-04 13:43:46.000000000","message":"No idea - git blame show 5 different author for that function.\n\nhttp://git.openstack.org/cgit/openstack/keystone/tree/keystone/catalog/core.py#n35","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"539919eef27232e451871acb17771bd580971d3d","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        return [{\u0027endpoints\u0027: list(make_v3_endpoints(svc.endpoints)),"},{"line_number":294,"context_line":"                 \u0027id\u0027: svc.id,"},{"line_number":295,"context_line":"                 \u0027type\u0027: svc.type} for svc in services]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9hB4%3D","line":295,"updated":"2014-04-04 00:19:02.000000000","message":"shouldn\u0027t we also be checking that the service is enabled?\n\nAlso, why isn\u0027t the check for service and endpoint enabled in the query?","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"97def3d496c2ede5dea8e4343c9b0f8ed0b1a95c","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        return [{\u0027endpoints\u0027: list(make_v3_endpoints(svc.endpoints)),"},{"line_number":294,"context_line":"                 \u0027id\u0027: svc.id,"},{"line_number":295,"context_line":"                 \u0027type\u0027: svc.type} for svc in services]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9cmc%3D","line":295,"in_reply_to":"AAAAWH%2F9hB4%3D","updated":"2014-04-04 13:43:46.000000000","message":"We are checking in make_v3_endpoint. It isn\u0027t in the query because I thought that would be too much work for this patch. This was really about refactoring the existing logic to capture an error.","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"67464daf3de6a3b74e585ee967bd870d70e033ce","unresolved":false,"context_lines":[{"line_number":291,"context_line":"                except exception.MalformedEndpoint:"},{"line_number":292,"context_line":"                    continue  # this failure is already logged in format_url()"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"                yield endpoint"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        def make_v3_service(svc):"},{"line_number":297,"context_line":"            eps \u003d make_v3_endpoints(svc.endpoints)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9VRE%3D","line":294,"updated":"2014-04-06 22:15:45.000000000","message":"yield? need to refactor some stuff here.","commit_id":"25452cabe7691e12631041d1e1f307ce3a22a477"}],"keystone/tests/test_v3_catalog.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3a575ac04a4cf9af8ec4f331b16472af5dc737a2","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        self.assertNotIn(\u0027legacy_endpoint_id\u0027, endpoint_v3)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"class TestCatalogAPISQL(tests.TestCase):"},{"line_number":362,"context_line":"    \"\"\"Tests for the catalog Manager against the SQL backend."},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2B1vk%3D","line":361,"updated":"2014-03-23 15:46:46.000000000","message":"why is it only the sql backend gets these tests? don\u0027t we want all the implementations to work the same way?","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6fcd18f9442ed6465fd83c0a23b00f0231e8714d","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        self.assertNotIn(\u0027legacy_endpoint_id\u0027, endpoint_v3)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"class TestCatalogAPISQL(tests.TestCase):"},{"line_number":362,"context_line":"    \"\"\"Tests for the catalog Manager against the SQL backend."},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2BoO0%3D","line":361,"in_reply_to":"AAAAWH%2F%2B1vk%3D","updated":"2014-03-25 13:36:00.000000000","message":"In the kvs and templated backends do not implement get_v3_catalog.\n\nThe endpoint_filter may need a similar modification, but I wanted to do that in a separate commit.","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"539919eef27232e451871acb17771bd580971d3d","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        # the only endpoint in the catalog is the one created in setUp"},{"line_number":401,"context_line":"        catalog \u003d self.catalog_api.get_v3_catalog(user_id, tenant_id)"},{"line_number":402,"context_line":"        self.assertEqual(1, len(catalog[0][\u0027endpoints\u0027]))"},{"line_number":403,"context_line":"        # it\u0027s also the only endpoint in the backend"},{"line_number":404,"context_line":"        self.assertEqual(1, len(self.catalog_api.list_endpoints()))"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9hA4%3D","line":402,"updated":"2014-04-04 00:19:02.000000000","message":"I thought you were going to use matchers.","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"97def3d496c2ede5dea8e4343c9b0f8ed0b1a95c","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        # the only endpoint in the catalog is the one created in setUp"},{"line_number":401,"context_line":"        catalog \u003d self.catalog_api.get_v3_catalog(user_id, tenant_id)"},{"line_number":402,"context_line":"        self.assertEqual(1, len(catalog[0][\u0027endpoints\u0027]))"},{"line_number":403,"context_line":"        # it\u0027s also the only endpoint in the backend"},{"line_number":404,"context_line":"        self.assertEqual(1, len(self.catalog_api.list_endpoints()))"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ccg%3D","line":402,"in_reply_to":"AAAAWH%2F9hA4%3D","updated":"2014-04-04 13:43:46.000000000","message":"I do when it makes it clearer. In this case I didn\u0027t because I would have had to break the line into two lines for:\n \n self.assertThat(self.catalog_api.list_endpoints(),\n                        matchers.HasLength(1))\n\nI can match that change if you think it\u0027s clearer.","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"539919eef27232e451871acb17771bd580971d3d","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        # verify that the invalid endpoints don\u0027t appear in the catalog"},{"line_number":417,"context_line":"        catalog \u003d self.catalog_api.get_v3_catalog(user_id, tenant_id)"},{"line_number":418,"context_line":"        self.assertEqual(1, len(catalog[0][\u0027endpoints\u0027]))"},{"line_number":419,"context_line":"        # all three appear in the backend"},{"line_number":420,"context_line":"        self.assertEqual(3, len(self.catalog_api.list_endpoints()))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9hAk%3D","line":418,"updated":"2014-04-04 00:19:02.000000000","message":"should be able to save the endpoints from the first get_v3_catalog and use that here.","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"97def3d496c2ede5dea8e4343c9b0f8ed0b1a95c","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        # verify that the invalid endpoints don\u0027t appear in the catalog"},{"line_number":417,"context_line":"        catalog \u003d self.catalog_api.get_v3_catalog(user_id, tenant_id)"},{"line_number":418,"context_line":"        self.assertEqual(1, len(catalog[0][\u0027endpoints\u0027]))"},{"line_number":419,"context_line":"        # all three appear in the backend"},{"line_number":420,"context_line":"        self.assertEqual(3, len(self.catalog_api.list_endpoints()))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ccU%3D","line":418,"in_reply_to":"AAAAWH%2F9hAk%3D","updated":"2014-04-04 13:43:46.000000000","message":"Good call.","commit_id":"74d6b70a0aa3ef3c1306ca54f69b80618834ab04"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d093dcc1b07fb149bd3c4fd071161ff3e7369a3d","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            group\u003d\u0027catalog\u0027,"},{"line_number":443,"context_line":"            driver\u003d\u0027keystone.catalog.backends.sql.Catalog\u0027)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def new_endpoint_ref(self, service_id):"},{"line_number":446,"context_line":"        return {"},{"line_number":447,"context_line":"            \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":448,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2FxyI%3D","line":445,"updated":"2014-04-28 00:37:37.000000000","message":"suggest move this out of the class since it doesn\u0027t have to be a class member.","commit_id":"7e4aab33e2d38a87e26f9f4e65b4ba2097564fd2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d093dcc1b07fb149bd3c4fd071161ff3e7369a3d","unresolved":false,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        # the only endpoint in the catalog is the one created in setUp"},{"line_number":461,"context_line":"        catalog \u003d self.catalog_api.get_v3_catalog(user_id, tenant_id)"},{"line_number":462,"context_line":"        self.assertEqual(1, len(catalog[0][\u0027endpoints\u0027]))"},{"line_number":463,"context_line":"        # it\u0027s also the only endpoint in the backend"},{"line_number":464,"context_line":"        self.assertEqual(1, len(self.catalog_api.list_endpoints()))"},{"line_number":465,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fxyc%3D","line":462,"updated":"2014-04-28 00:37:37.000000000","message":"suggest use the matcher.HasLength -- should print out a nicer message on failure.\n\nAlso, seems like we should be able to validate more than the length, should be able to validate that the endpoint is as expected. That applies to all these asserts.","commit_id":"7e4aab33e2d38a87e26f9f4e65b4ba2097564fd2"}]}
