コード例 #1
0
ファイル: copy.py プロジェクト: skylable/sxswift
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
コード例 #2
0
ファイル: get.py プロジェクト: skylable/sxswift
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()
コード例 #3
0
ファイル: delete.py プロジェクト: skylable/sxswift
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
コード例 #4
0
ファイル: delete.py プロジェクト: rmayhue/sxswift
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
コード例 #5
0
ファイル: post.py プロジェクト: rmayhue/sxswift
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
コード例 #6
0
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
コード例 #7
0
ファイル: put.py プロジェクト: skylable/sxswift
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
コード例 #8
0
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