)]}'
{"swift/proxy/controllers/obj.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"694eba4cf802d211611fedf87f6c3d452b23358c","unresolved":false,"context_lines":[{"line_number":657,"context_line":"        error_response, req, delete_at_container, delete_at_part, \\"},{"line_number":658,"context_line":"            delete_at_nodes \u003d self._config_obj_expiration(req)"},{"line_number":659,"context_line":"        if error_response:"},{"line_number":660,"context_line":"            return error_response"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"        node_iter \u003d GreenthreadSafeIterator("},{"line_number":663,"context_line":"            self.iter_nodes_local_first(obj_ring, partition))"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_0efa3b77","line":660,"updated":"2014-08-06 05:33:58.000000000","message":"Would it be better to instead of passing around the error_response (and having to pass back None, req,.. on success) to raise an raise an exception that wraps up the error_reponse?\n\nSomething like:\n\nIn swift.common.exceptions.py\n\n  class BadRequestException(SwiftException):\n      def __init__(self, resp):\n          self.resp \u003d resp\n\nThen in your new method you can simply raise an execption like:\n\n  raise BadRequestException(resp)\n\nAnd when calling your method you can use:\n\n  try:\n      req, delete_at_container, delete_at_part, \\\n          delete_at_nodes \u003d self._config_obj_expiration(req)\n  except BadRequestException as ex:\n      return ex.resp\n\nBut obviously choose better names :)","commit_id":"924403976e86cd5ecbeefad07e41358f1ed1090e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"06f4f11ae6a605156d94f2a9480f17d4a0747b89","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                                      content_type\u003d\u0027text/plain\u0027,"},{"line_number":243,"context_line":"                                      body\u003d\u0027Non-integer X-Delete-After\u0027)"},{"line_number":244,"context_line":"            req.headers[\u0027x-delete-at\u0027] \u003d normalize_delete_at_timestamp("},{"line_number":245,"context_line":"                time.time() + x_delete_after)"},{"line_number":246,"context_line":"        if self.app.object_post_as_copy:"},{"line_number":247,"context_line":"            req.method \u003d \u0027PUT\u0027"},{"line_number":248,"context_line":"            req.path_info \u003d \u0027/v1/%s/%s/%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ee568bcc","side":"PARENT","line":245,"updated":"2014-08-08 09:32:11.000000000","message":"ah yeah, so in this *one* case we\u0027d 400 before all the x-newest jazz\n\n... bah\n\nMaybe we should try to move the rest of the validation up here too someday?","commit_id":"9bc3b0ebd8fb8fc2ba212373e05f09141e753ef9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a524239f960c0f983a4d6e2126bd3ae5c3f6b664","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                                      content_type\u003d\u0027text/plain\u0027,"},{"line_number":243,"context_line":"                                      body\u003d\u0027Non-integer X-Delete-After\u0027)"},{"line_number":244,"context_line":"            req.headers[\u0027x-delete-at\u0027] \u003d normalize_delete_at_timestamp("},{"line_number":245,"context_line":"                time.time() + x_delete_after)"},{"line_number":246,"context_line":"        if self.app.object_post_as_copy:"},{"line_number":247,"context_line":"            req.method \u003d \u0027PUT\u0027"},{"line_number":248,"context_line":"            req.path_info \u003d \u0027/v1/%s/%s/%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_0843ac6b","side":"PARENT","line":245,"in_reply_to":"baada198_ee568bcc","updated":"2014-08-08 14:30:01.000000000","message":"Also in the PUT path if its a copy - now the GETs will happen before this check.","commit_id":"9bc3b0ebd8fb8fc2ba212373e05f09141e753ef9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a524239f960c0f983a4d6e2126bd3ae5c3f6b664","unresolved":false,"context_lines":[{"line_number":497,"context_line":"            return HTTPNotImplemented(request\u003dreq, content_type\u003d\u0027text/plain\u0027,"},{"line_number":498,"context_line":"                                      body\u003dstr(e))"},{"line_number":499,"context_line":"        if ml is not None and ml \u003e constraints.MAX_FILE_SIZE:"},{"line_number":500,"context_line":"            return HTTPRequestEntityTooLarge(request\u003dreq)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        partition, nodes \u003d obj_ring.get_nodes("},{"line_number":503,"context_line":"            self.account_name, self.container_name, self.object_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_23b3310a","line":500,"updated":"2014-08-08 14:30:01.000000000","message":"you could call _config_obj_expiration() here *as well* i.e. perform checks early, repeat later","commit_id":"4adb3d7e5b326f358c628c23203bb430f74d2849"}]}
