def copy_object(api_ver, account, container, object): _validate_object(api_ver, account, container, object) fresh = bottle.request.get_header('x-fresh-metadata') fresh = is_truthy(fresh) dst_container, dst_object = get_destination() meta = {} for key, value in bottle.request.headers.iteritems(): key = key.lower() if key.startswith('x-object-meta-'): meta[key] = value content_type = bottle.request.get_header('content-type') if content_type: meta['content-type'] = content_type copier = ObjectCopier( container, object, dst_container, dst_object ) copier.copy(meta=meta, fresh_meta=fresh) bottle.response.set_header('x-timestamp', 0) bottle.response.status = 201
def get_object(api_ver, account, container, object): # TODO: query params _validate_object(api_ver, account, container, object) object_loader = ObjectLoader(account, container, object) metadata = get_metadata(container, object) for key, value in metadata.iteritems(): bottle.response.set_header(str(key), str(value)) return object_loader.get_content_stream()
def delete_object(api_ver, account, container, object): _validate_object(api_ver, account, container, object) deleter = ObjectDeleter(account, container, object) try: deleter.delete() except NotFound: raise bottle.HTTPError(404, 'Object not found') bottle.response.set_header('x-timestamp', 0) bottle.response.status = 204
def post_object(api_ver, account, container, object): _validate_object(api_ver, account, container, object) meta = {} for key, value in bottle.request.headers.iteritems(): key = key.lower() if key.startswith("x-object-meta-"): meta[key] = value try: meta['content-type'] = get_content_type(object) except bottle.HTTPError: pass meta_saver = MetaSaver(account, container, object) meta_saver.save(meta) bottle.response.set_header('x-timestamp', 0) bottle.response.status = 202
def put_object(api_ver, account, container, object): _validate_object(api_ver, account, container, object) content_length = get_content_length() now = datetime.utcnow() params = { 'last-modified': datetime_to_http_iso(now), 'content-type': get_content_type(object), 'content-length': content_length, 'copy-from': get_copy_from(content_length), 'etag': get_etag(), } content_stream = get_content_stream(params) object_saver = ObjectSaver(account, container, object) object_saver.update_metadata(params) object_saver.upload_from_stream(content_stream) bottle.response.status = 201
def put_object(api_ver, account, container, object): _validate_object(api_ver, account, container, object) content_length = get_content_length() now = datetime.utcnow() params = { "last-modified": datetime_to_http_iso(now), "content-type": get_content_type(object), "content-length": content_length, "copy-from": get_copy_from(content_length), "etag": get_etag(), } content_stream = get_content_stream(params) object_saver = ObjectSaver(account, container, object) object_saver.update_metadata(params) object_saver.upload_from_stream(content_stream) bottle.response.status = 201
def copy_object(api_ver, account, container, object): _validate_object(api_ver, account, container, object) fresh = bottle.request.get_header('x-fresh-metadata') fresh = is_truthy(fresh) dst_container, dst_object = get_destination() meta = {} for key, value in bottle.request.headers.iteritems(): key = key.lower() if key.startswith('x-object-meta-'): meta[key] = value content_type = bottle.request.get_header('content-type') if content_type: meta['content-type'] = content_type copier = ObjectCopier(container, object, dst_container, dst_object) copier.copy(meta=meta, fresh_meta=fresh) bottle.response.set_header('x-timestamp', 0) bottle.response.status = 201