)]}'
{"keystone/catalog/backends/_legacy_kvs.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"0e5475f65de531fced8de7bfd65c5b3f357dd6d2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"def deprecated():"},{"line_number":22,"context_line":"    return versionutils.deprecated("},{"line_number":23,"context_line":"        versionutils.deprecated.KILO,"},{"line_number":24,"context_line":"        in_favor_of\u003d\u0027keystone.common.kvs.KeyValueStore\u0027,"},{"line_number":25,"context_line":"        remove_in\u003d+1)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_cbde0a3f","line":24,"updated":"2015-03-06 09:21:44.000000000","message":"Isn\u0027t the crud operation going away?  so \u0027KeyValueStore\u0027 is not really a replacement for it.","commit_id":"941393d7f1568beeb1658a931d145055fa8ae0cd"}],"keystone/catalog/backends/templated.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"aa22db9c754a5f98dc6b276a857cd4ce3e824cdc","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        raise exception.NotImplemented()"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def list_endpoints(self, hints):"},{"line_number":208,"context_line":"        return []"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def get_endpoint(self, endpoint_id):"},{"line_number":211,"context_line":"        raise exception.EndpointNotFound(endpoint_id\u003dendpoint_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ab451fb_7d2c6c4a","line":208,"updated":"2015-04-17 18:18:27.000000000","message":"looks like i forgot an implementation (thanks mgagne!)","commit_id":"ef5618fbd982ea87a19558af06dd3ed18b4f7736"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"09bad9fb241b1b4fb4b8ba4c4c88a73f3f6934dc","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_regions(self, hints):"},{"line_number":159,"context_line":"        return [{\u0027id\u0027: region_id, \u0027description\u0027: \u0027\u0027, \u0027parent_region_id\u0027: \u0027\u0027}"},{"line_number":160,"context_line":"                for region_id in self.templates]"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def get_region(self, region_id):"},{"line_number":163,"context_line":"        if region_id in self.templates:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_0e4e55c1","line":160,"updated":"2015-11-23 14:12:06.000000000","message":"Note that the catalog format is:\n\n   {region_id: {service_id: {key: v}}}\n\nThis should be self.templates.keys()\n\nAlso, methods below need to be updated to reflect this.","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"214ae0958ce1d23489f7b3e922bdf9e0d26acb62","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_regions(self, hints):"},{"line_number":159,"context_line":"        return [{\u0027id\u0027: region_id, \u0027description\u0027: \u0027\u0027, \u0027parent_region_id\u0027: \u0027\u0027}"},{"line_number":160,"context_line":"                for region_id in self.templates]"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def get_region(self, region_id):"},{"line_number":163,"context_line":"        if region_id in self.templates:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_418408d3","line":160,"in_reply_to":"7a740942_91c3888a","updated":"2016-01-14 04:40:39.000000000","message":"What is incorrect about it?","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"214ae0958ce1d23489f7b3e922bdf9e0d26acb62","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_regions(self, hints):"},{"line_number":159,"context_line":"        return [{\u0027id\u0027: region_id, \u0027description\u0027: \u0027\u0027, \u0027parent_region_id\u0027: \u0027\u0027}"},{"line_number":160,"context_line":"                for region_id in self.templates]"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def get_region(self, region_id):"},{"line_number":163,"context_line":"        if region_id in self.templates:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_410de88e","line":160,"in_reply_to":"ba8a016a_0e4e55c1","updated":"2016-01-14 04:40:39.000000000","message":"\"x in self.template.keys()\" is the same as \"x in self.template\"","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"b3c4acbdb5f91bbdf83217d1d28dc050ff16304d","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_regions(self, hints):"},{"line_number":159,"context_line":"        return [{\u0027id\u0027: region_id, \u0027description\u0027: \u0027\u0027, \u0027parent_region_id\u0027: \u0027\u0027}"},{"line_number":160,"context_line":"                for region_id in self.templates]"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def get_region(self, region_id):"},{"line_number":163,"context_line":"        if region_id in self.templates:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_91c3888a","line":160,"in_reply_to":"ba8a016a_0e4e55c1","updated":"2015-12-09 17:54:49.000000000","message":"This statement is not correct.\n\nSee current sample template:\nhttps://github.com/openstack/keystone/blob/master/etc/default_catalog.templates\n\nIt\u0027s:\n\n    {region_id: {service_type: {key: value}}}","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"09bad9fb241b1b4fb4b8ba4c4c88a73f3f6934dc","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    def list_services(self, hints):"},{"line_number":179,"context_line":"        services \u003d []"},{"line_number":180,"context_line":"        for region in six.itervalues(self.templates):"},{"line_number":181,"context_line":"            for service_type, service in six.iteritems(region):"},{"line_number":182,"context_line":"                services.append({"},{"line_number":183,"context_line":"                    \u0027id\u0027: service[\u0027id\u0027],"},{"line_number":184,"context_line":"                    \u0027enabled\u0027: True,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_69c59b3b","line":181,"updated":"2015-11-23 14:12:06.000000000","message":"Where does this service_type come from ? Looking at parse_templates method, I see the catalog format as described in my comment above.","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"214ae0958ce1d23489f7b3e922bdf9e0d26acb62","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    def list_services(self, hints):"},{"line_number":179,"context_line":"        services \u003d []"},{"line_number":180,"context_line":"        for region in six.itervalues(self.templates):"},{"line_number":181,"context_line":"            for service_type, service in six.iteritems(region):"},{"line_number":182,"context_line":"                services.append({"},{"line_number":183,"context_line":"                    \u0027id\u0027: service[\u0027id\u0027],"},{"line_number":184,"context_line":"                    \u0027enabled\u0027: True,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_41e9687f","line":181,"in_reply_to":"ba8a016a_69c59b3b","updated":"2016-01-14 04:40:39.000000000","message":"Exactly. The inner \"for\" loop here is getting \u0027{service_type: {key: value}}\u0027 from the region.","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"b3c4acbdb5f91bbdf83217d1d28dc050ff16304d","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    def list_services(self, hints):"},{"line_number":179,"context_line":"        services \u003d []"},{"line_number":180,"context_line":"        for region in six.itervalues(self.templates):"},{"line_number":181,"context_line":"            for service_type, service in six.iteritems(region):"},{"line_number":182,"context_line":"                services.append({"},{"line_number":183,"context_line":"                    \u0027id\u0027: service[\u0027id\u0027],"},{"line_number":184,"context_line":"                    \u0027enabled\u0027: True,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_1181d84d","line":181,"in_reply_to":"ba8a016a_69c59b3b","updated":"2015-12-09 17:54:49.000000000","message":"I see nothing wrong in this code. The data is coming from the templated catalog in Keystone.\n\nEach entry in the template file has the following format:\n\n  catalog.\u003cregion_id\u003e.\u003cservice_type\u003e.id \u003d \u003cservice_id\u003e\n  catalog.\u003cregion_id\u003e.\u003cservice_type\u003e.description \u003d \u003cservice_description\u003e\n  catalog.\u003cregion_id\u003e.\u003cservice_type\u003e.publicURL \u003d \u003cservice_publicURL\u003e\n  catalog.\u003cregion_id\u003e.\u003cservice_type\u003e.internalURL \u003d \u003cservice_internalURL\u003e\n  catalog.\u003cregion_id\u003e.\u003cservice_type\u003e.adminURL \u003d \u003cservice_adminURL\u003e\n\nself.templates contains everything after \"catalog.\" and structured as explained above.","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"1c41ef000834377c9d40af3d38f3f34c19a61f3f","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        for region in six.itervalues(self.templates):"},{"line_number":181,"context_line":"            for service_type, service in six.iteritems(region):"},{"line_number":182,"context_line":"                services.append({"},{"line_number":183,"context_line":"                    \u0027id\u0027: service[\u0027id\u0027],"},{"line_number":184,"context_line":"                    \u0027enabled\u0027: True,"},{"line_number":185,"context_line":"                    \u0027name\u0027: service.get(\u0027name\u0027, \u0027\u0027),"},{"line_number":186,"context_line":"                    \u0027description\u0027: service.get(\u0027description\u0027, \u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_b1500460","line":183,"updated":"2015-12-09 18:01:52.000000000","message":"There is no id in the default templated_catalog. This means code crashes for me when it\u0027s not provided in /etc/keystone/default_catalog.templates\n\nAn other change proposed auto-generating it:\nhttps://review.openstack.org/#/c/120011/\n\nMaybe there could be an hybrid way where one is auto-generated when not provided and otherwise, provided one is used.","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"09bad9fb241b1b4fb4b8ba4c4c88a73f3f6934dc","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                    \u0027id\u0027: service[\u0027id\u0027],"},{"line_number":184,"context_line":"                    \u0027enabled\u0027: True,"},{"line_number":185,"context_line":"                    \u0027name\u0027: service.get(\u0027name\u0027, \u0027\u0027),"},{"line_number":186,"context_line":"                    \u0027description\u0027: service.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":187,"context_line":"                    \u0027type\u0027: service_type,"},{"line_number":188,"context_line":"                })"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_89579fc9","line":186,"updated":"2015-11-23 14:12:06.000000000","message":"According to class docs, name, publicURL, internalURL and adminURL are the valid keys within a service. This way, we can put empty string directly.","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"b3c4acbdb5f91bbdf83217d1d28dc050ff16304d","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                    \u0027id\u0027: service[\u0027id\u0027],"},{"line_number":184,"context_line":"                    \u0027enabled\u0027: True,"},{"line_number":185,"context_line":"                    \u0027name\u0027: service.get(\u0027name\u0027, \u0027\u0027),"},{"line_number":186,"context_line":"                    \u0027description\u0027: service.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":187,"context_line":"                    \u0027type\u0027: service_type,"},{"line_number":188,"context_line":"                })"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_51e68045","line":186,"in_reply_to":"ba8a016a_89579fc9","updated":"2015-12-09 17:54:49.000000000","message":"I do not understand your comment. Do you mean the templated catalog shouldn\u0027t return a service description if one is provided by the template?\n\nkeystone service-list does show the service description column and I would like to be able to populate it.","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"73c0fd3fb156c667460f56bd5888f5901b458565","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"da6ed579_504b542a","updated":"2016-01-14 06:51:28.000000000","message":"these changes could go in a separate commit for easier reviewing.","commit_id":"6c6867a6d7eb6d3bc1e381ac68ede79f4f06a476"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"3a68532c5aadbf9694f6bc9b4979ce2198451650","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"da6ed579_dba2dcfb","in_reply_to":"da6ed579_504b542a","updated":"2016-01-14 19:05:46.000000000","message":"Back when this was started there were two separate reviews, but they eventually got merged. One made the templated backend work exactly as it had previously by moving KVS code into templated.py. The second patch removed most of that code and replaced the implementations. Reviewers didn\u0027t like the fact that the first review added code that was deleted in the second.","commit_id":"6c6867a6d7eb6d3bc1e381ac68ede79f4f06a476"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"73c0fd3fb156c667460f56bd5888f5901b458565","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        for region_ref in six.itervalues(self.templates):"},{"line_number":135,"context_line":"            for service_type, service_ref in six.iteritems(region_ref):"},{"line_number":136,"context_line":"                yield {"},{"line_number":137,"context_line":"                    \u0027id\u0027: service_type,"},{"line_number":138,"context_line":"                    \u0027enabled\u0027: True,"},{"line_number":139,"context_line":"                    \u0027name\u0027: service_ref.get(\u0027name\u0027, \u0027\u0027),"},{"line_number":140,"context_line":"                    \u0027description\u0027: service_ref.get(\u0027description\u0027, \u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"da6ed579_10ff1cab","line":137,"range":{"start_line":137,"start_character":26,"end_line":137,"end_character":38},"updated":"2016-01-14 06:51:28.000000000","message":"bah - no service id for templated eh. yay crappy pycadf audits","commit_id":"6c6867a6d7eb6d3bc1e381ac68ede79f4f06a476"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"45cd30ee0356cfd2425bb0051d880621da14715b","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def _list_services(self, hints):"},{"line_number":134,"context_line":"        for region_ref in six.itervalues(self.templates):"},{"line_number":135,"context_line":"            for service_type, service_ref in six.iteritems(region_ref):"},{"line_number":136,"context_line":"                yield {"},{"line_number":137,"context_line":"                    \u0027id\u0027: service_type,"},{"line_number":138,"context_line":"                    \u0027enabled\u0027: True,"},{"line_number":139,"context_line":"                    \u0027name\u0027: service_ref.get(\u0027name\u0027, \u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_f31c3715","line":136,"range":{"start_line":136,"start_character":16,"end_line":136,"end_character":21},"updated":"2016-01-18 04:50:01.000000000","message":"nice","commit_id":"38bb860c0704b3842b0039f669beb078e56ebb84"}],"keystone/tests/unit/core.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"09bad9fb241b1b4fb4b8ba4c4c88a73f3f6934dc","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            backend\u003d\u0027dogpile.cache.memory\u0027,"},{"line_number":285,"context_line":"            enabled\u003dTrue,"},{"line_number":286,"context_line":"            proxies\u003d[\u0027keystone.tests.unit.test_cache.CacheIsolatingProxy\u0027])"},{"line_number":287,"context_line":"        self.config_fixture.config(group\u003d\u0027catalog\u0027, driver\u003d\u0027sql\u0027)"},{"line_number":288,"context_line":"        self.config_fixture.config("},{"line_number":289,"context_line":"            group\u003d\u0027kvs\u0027,"},{"line_number":290,"context_line":"            backends\u003d["}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_29b47333","line":287,"updated":"2015-11-23 14:12:06.000000000","message":"Why are we changing the backend tests currently use ?","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"214ae0958ce1d23489f7b3e922bdf9e0d26acb62","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            backend\u003d\u0027dogpile.cache.memory\u0027,"},{"line_number":285,"context_line":"            enabled\u003dTrue,"},{"line_number":286,"context_line":"            proxies\u003d[\u0027keystone.tests.unit.test_cache.CacheIsolatingProxy\u0027])"},{"line_number":287,"context_line":"        self.config_fixture.config(group\u003d\u0027catalog\u0027, driver\u003d\u0027sql\u0027)"},{"line_number":288,"context_line":"        self.config_fixture.config("},{"line_number":289,"context_line":"            group\u003d\u0027kvs\u0027,"},{"line_number":290,"context_line":"            backends\u003d["}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_d8fa22bd","line":287,"in_reply_to":"ba8a016a_29b47333","updated":"2016-01-14 04:40:39.000000000","message":"With these changes the tests will fail since templated catalogs no longer implement the writable methods.","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"}],"keystone/tests/unit/test_backend_templated.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d5b789a20c5c7be75407da87da4c16c8130c5afe","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"from six.moves import zip"},{"line_number":19,"context_line":"from testtools import matchers"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from keystone import catalog"},{"line_number":22,"context_line":"from keystone.tests import unit as tests"},{"line_number":23,"context_line":"from keystone.tests.unit import default_fixtures"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_1242d23e","line":20,"updated":"2015-08-25 09:12:46.000000000","message":"where is \u0027matchers\u0027 used in this patch?","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"214ae0958ce1d23489f7b3e922bdf9e0d26acb62","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"from six.moves import zip"},{"line_number":19,"context_line":"from testtools import matchers"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from keystone import catalog"},{"line_number":22,"context_line":"from keystone.tests import unit as tests"},{"line_number":23,"context_line":"from keystone.tests.unit import default_fixtures"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_9ee1ffd2","line":20,"in_reply_to":"ba8a016a_a937034c","updated":"2016-01-14 04:40:39.000000000","message":"Done - this was for a test that never happened","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"09bad9fb241b1b4fb4b8ba4c4c88a73f3f6934dc","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"from six.moves import zip"},{"line_number":19,"context_line":"from testtools import matchers"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from keystone import catalog"},{"line_number":22,"context_line":"from keystone.tests import unit as tests"},{"line_number":23,"context_line":"from keystone.tests.unit import default_fixtures"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_a937034c","line":20,"in_reply_to":"fa1b9901_1242d23e","updated":"2015-11-23 14:12:06.000000000","message":"They aren\u0027t in this file, this should be removed","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"214ae0958ce1d23489f7b3e922bdf9e0d26acb62","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        self.skipTest(BROKEN_WRITE_FUNCTIONALITY_MSG)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def test_list_endpoints(self):"},{"line_number":232,"context_line":"        expected_urls \u003d set([\u0027http://localhost:$(public_port)s/v2.0\u0027,"},{"line_number":233,"context_line":"                             \u0027http://localhost:$(admin_port)s/v2.0\u0027,"},{"line_number":234,"context_line":"                             \u0027http://localhost:$(admin_port)s/v2.0\u0027,"},{"line_number":235,"context_line":"                             \u0027http://localhost:8774/v1.1/$(tenant_id)s\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_3e36d352","line":232,"updated":"2016-01-14 04:40:39.000000000","message":"The duplication was not necessary and was an artifact of looking at what the catalog returned.","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"}],"keystone/tests/unit/test_v2.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d5b789a20c5c7be75407da87da4c16c8130c5afe","unresolved":false,"context_lines":[{"line_number":983,"context_line":"        super(V2TestCase, self).config_overrides()"},{"line_number":984,"context_line":"        self.config_fixture.config("},{"line_number":985,"context_line":"            group\u003d\u0027catalog\u0027,"},{"line_number":986,"context_line":"            driver\u003d\u0027keystone.catalog.backends.templated.Catalog\u0027,"},{"line_number":987,"context_line":"            template_file\u003dunit.dirs.tests(\u0027default_catalog.templates\u0027))"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def _get_user_id(self, r):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_72446e1a","line":986,"updated":"2015-08-25 09:12:46.000000000","message":"use \u0027templated\u0027 in favor of stevedore","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"09bad9fb241b1b4fb4b8ba4c4c88a73f3f6934dc","unresolved":false,"context_lines":[{"line_number":983,"context_line":"        super(V2TestCase, self).config_overrides()"},{"line_number":984,"context_line":"        self.config_fixture.config("},{"line_number":985,"context_line":"            group\u003d\u0027catalog\u0027,"},{"line_number":986,"context_line":"            driver\u003d\u0027keystone.catalog.backends.templated.Catalog\u0027,"},{"line_number":987,"context_line":"            template_file\u003dunit.dirs.tests(\u0027default_catalog.templates\u0027))"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def _get_user_id(self, r):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_493f7725","line":986,"in_reply_to":"fa1b9901_72446e1a","updated":"2015-11-23 14:12:06.000000000","message":"++","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"214ae0958ce1d23489f7b3e922bdf9e0d26acb62","unresolved":false,"context_lines":[{"line_number":983,"context_line":"        super(V2TestCase, self).config_overrides()"},{"line_number":984,"context_line":"        self.config_fixture.config("},{"line_number":985,"context_line":"            group\u003d\u0027catalog\u0027,"},{"line_number":986,"context_line":"            driver\u003d\u0027keystone.catalog.backends.templated.Catalog\u0027,"},{"line_number":987,"context_line":"            template_file\u003dunit.dirs.tests(\u0027default_catalog.templates\u0027))"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def _get_user_id(self, r):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_9de6dcb2","line":986,"in_reply_to":"fa1b9901_72446e1a","updated":"2016-01-14 04:40:39.000000000","message":"Done","commit_id":"fd77f6bb320112c2c68e839ccc482d694a5b7650"}],"releasenotes/notes/impl-templated-catalog-1d8f6333726b34f8.yaml":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"73c0fd3fb156c667460f56bd5888f5901b458565","unresolved":false,"context_lines":[{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`bug 1367113 \u003chttps://bugs.launchpad.net/keystone/+bug/1367113\u003e`_]"},{"line_number":5,"context_line":"    The \"get entity\" and \"list entities\" functionality has been"},{"line_number":6,"context_line":"    reimplemented to use the data from the catalog template. Previously"},{"line_number":7,"context_line":"    this would only act on temporary data that was created at runtime. The"},{"line_number":8,"context_line":"    \"update entity\" and \"delete entity\" functionality now raises an"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"da6ed579_d08f4428","line":5,"range":{"start_line":5,"start_character":41,"end_line":5,"end_character":54},"updated":"2016-01-14 06:51:28.000000000","message":"... functionality for the KVS catalog backend has been reimplemented to use data from the templated backend.","commit_id":"6c6867a6d7eb6d3bc1e381ac68ede79f4f06a476"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"3a68532c5aadbf9694f6bc9b4979ce2198451650","unresolved":false,"context_lines":[{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`bug 1367113 \u003chttps://bugs.launchpad.net/keystone/+bug/1367113\u003e`_]"},{"line_number":5,"context_line":"    The \"get entity\" and \"list entities\" functionality has been"},{"line_number":6,"context_line":"    reimplemented to use the data from the catalog template. Previously"},{"line_number":7,"context_line":"    this would only act on temporary data that was created at runtime. The"},{"line_number":8,"context_line":"    \"update entity\" and \"delete entity\" functionality now raises an"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"da6ed579_f62257a2","line":5,"range":{"start_line":5,"start_character":41,"end_line":5,"end_character":54},"in_reply_to":"da6ed579_d08f4428","updated":"2016-01-14 19:05:46.000000000","message":"Done","commit_id":"6c6867a6d7eb6d3bc1e381ac68ede79f4f06a476"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"73c0fd3fb156c667460f56bd5888f5901b458565","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    The \"get entity\" and \"list entities\" functionality has been"},{"line_number":6,"context_line":"    reimplemented to use the data from the catalog template. Previously"},{"line_number":7,"context_line":"    this would only act on temporary data that was created at runtime. The"},{"line_number":8,"context_line":"    \"update entity\" and \"delete entity\" functionality now raises an"},{"line_number":9,"context_line":"    exception."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"da6ed579_b0917049","line":8,"range":{"start_line":8,"start_character":4,"end_line":8,"end_character":19},"updated":"2016-01-14 06:51:28.000000000","message":"\"create entity\" too","commit_id":"6c6867a6d7eb6d3bc1e381ac68ede79f4f06a476"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"3a68532c5aadbf9694f6bc9b4979ce2198451650","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    The \"get entity\" and \"list entities\" functionality has been"},{"line_number":6,"context_line":"    reimplemented to use the data from the catalog template. Previously"},{"line_number":7,"context_line":"    this would only act on temporary data that was created at runtime. The"},{"line_number":8,"context_line":"    \"update entity\" and \"delete entity\" functionality now raises an"},{"line_number":9,"context_line":"    exception."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"da6ed579_d61dd362","line":8,"range":{"start_line":8,"start_character":4,"end_line":8,"end_character":19},"in_reply_to":"da6ed579_b0917049","updated":"2016-01-14 19:05:46.000000000","message":"Done","commit_id":"6c6867a6d7eb6d3bc1e381ac68ede79f4f06a476"}]}
