)]}'
{"keystone/catalog/controllers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29d568e5e7e11fe96b531ec7e1b38fe6edc5e298","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        legacy_endpoint_ref \u003d endpoint.copy()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        urls \u003d dict((i, endpoint.pop(\u0027%surl\u0027 % i)) for i in INTERFACES)"},{"line_number":87,"context_line":"        legacy_endpoint_id \u003d uuid.uuid4().hex"},{"line_number":88,"context_line":"        for interface, url in urls.iteritems():"},{"line_number":89,"context_line":"            endpoint_ref \u003d endpoint.copy()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FogI%3D","side":"PARENT","line":86,"updated":"2013-01-11 21:01:38.000000000","message":"the pop() was intentionally removed from the loop so that all urls would be split off of the endpoint object prior to making copies of the endpoint for persistence; that part of the change needs to be reverted back","commit_id":"cf3a3379c86415e8b2ecbefaa06da62570d768f0"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29d568e5e7e11fe96b531ec7e1b38fe6edc5e298","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def create_endpoint(self, context, endpoint):"},{"line_number":81,"context_line":"        \"\"\"Create three v3 endpoint refs based on a legacy ref.\"\"\""},{"line_number":82,"context_line":"        self.assert_admin(context)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        legacy_endpoint_ref \u003d endpoint.copy()"},{"line_number":85,"context_line":"        legacy_endpoint_id \u003d uuid.uuid4().hex"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fogg%3D","line":83,"updated":"2013-01-11 21:01:38.000000000","message":"self._require_attribute(endpoint, \u0027publicurl\u0027)","commit_id":"33870bd24c1129acff35b70eedb2212541c97ba4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29d568e5e7e11fe96b531ec7e1b38fe6edc5e298","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        endpoint_refs \u003d []"},{"line_number":88,"context_line":"        for interface in INTERFACES:"},{"line_number":89,"context_line":"            self._require_attribute(endpoint, \"%surl\" % interface)"},{"line_number":90,"context_line":"            url \u003d endpoint.pop(\"%surl\" % interface)"},{"line_number":91,"context_line":"            endpoint_ref \u003d endpoint.copy()"},{"line_number":92,"context_line":"            endpoint_ref[\u0027id\u0027] \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Foi4%3D","line":89,"updated":"2013-01-11 21:01:38.000000000","message":"The only one that\u0027s actually _required_ according to the v2 spec is publicurl, which can be check externally:\n\n  if \u0027%surl\u0027 % interface in endpoint:\n    # everything else in this loop","commit_id":"33870bd24c1129acff35b70eedb2212541c97ba4"}],"keystone/common/controller.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29d568e5e7e11fe96b531ec7e1b38fe6edc5e298","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        \"\"\"Ensures the reference contains the specified attribute.\"\"\""},{"line_number":65,"context_line":"        if ref.get(attr) is None or ref.get(attr) \u003d\u003d \u0027\u0027:"},{"line_number":66,"context_line":"            msg \u003d \u0027%s field is required and cannot be empty\u0027 % attr"},{"line_number":67,"context_line":"            raise exception.ValidationError(message\u003dmsg)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class V3Controller(V2Controller):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Foio%3D","line":67,"updated":"2013-01-11 21:01:38.000000000","message":"cool","commit_id":"33870bd24c1129acff35b70eedb2212541c97ba4"}]}
