Exemplo n.º 1
0
    def copy(self, meta, fresh_meta):
        sxcontroller = get_sxcontroller()
        metadata = get_metadata(self.src_vol, self.src_path)

        clean_meta = {
            'etag': metadata.get('etag', ''),
            'content-type': metadata.get('content-type', 'application/octet-stream'),
            'last-modified': datetime_to_http_iso(datetime.utcnow()),
        }

        if not fresh_meta:
            for key, value in meta:
                clean_meta[key] = value
        meta = clean_meta

        file_info = sxcontroller.getFile.json_call(
            self.src_vol, self.src_path
        )

        blocks = [obj.keys()[0] for obj in file_info['fileData']]
        size = file_info['fileSize']

        resp = sxcontroller.initializeFile.call(
            self.dst_vol, self.dst_path, size, blocks,
            encode_meta(meta)
        )
        token = resp.json()['uploadToken']

        sxcontroller.flushUploadedFile.call_on_node(resp.node_address, token)
Exemplo n.º 2
0
def set_common_headers():
    now = datetime.utcnow()
    bottle.response.set_header('date', datetime_to_http_iso(now))
    trans_id = bottle.request.get_header('x-trans-id')
    if not trans_id:
        trans_id = '5358-' + str(uuid.uuid4())  # 5358 = SX hex encoded
    bottle.response.set_header('x-trans-id', trans_id)
Exemplo n.º 3
0
def set_common_headers():
    now = datetime.utcnow()
    bottle.response.set_header('date', datetime_to_http_iso(now))
    trans_id = bottle.request.get_header('x-trans-id')
    if not trans_id:
        trans_id = '5358-' + str(uuid.uuid4())  # 5358 = SX hex encoded
    bottle.response.set_header('x-trans-id', trans_id)
Exemplo n.º 4
0
    def copy(self, meta, fresh_meta):
        sxcontroller = get_sxcontroller()
        metadata = get_metadata(self.src_vol, self.src_path)

        clean_meta = {
            'etag':
            metadata.get('etag', ''),
            'content-type':
            metadata.get('content-type', 'application/octet-stream'),
            'last-modified':
            datetime_to_http_iso(datetime.utcnow()),
        }

        if not fresh_meta:
            for key, value in meta:
                clean_meta[key] = value
        meta = clean_meta

        file_info = sxcontroller.getFile.json_call(self.src_vol, self.src_path)

        blocks = [obj.keys()[0] for obj in file_info['fileData']]
        size = file_info['fileSize']

        resp = sxcontroller.initializeFile.call(self.dst_vol,
                                                self.dst_path, size, blocks,
                                                encode_meta(meta))
        token = resp.json()['uploadToken']

        sxcontroller.flushUploadedFile.call_on_node(resp.node_address, token)
Exemplo n.º 5
0
def list_files(vol_name, prefix, delimiter, start_marker, end_marker, limit):
    sxcontroller = get_sxcontroller()
    file_objects = sxcontroller.listFiles.call(vol_name, recursive=True, limit=str(limit)).content
    file_objects = json.loads(file_objects, object_pairs_hook=collections.OrderedDict)
    for file_name, file_object in file_objects["fileList"].iteritems():
        file_name = file_name.lstrip("/")
        file_meta = sxcontroller.getFileMeta.json_call(vol_name, file_name)
        file_meta = file_meta.get("fileMeta", {})
        last_modified = datetime.fromtimestamp(file_object["createdAt"])
        last_modified = datetime_to_http_iso(last_modified)
        yield {
            "hash": file_meta.get("sx-etag", "").decode("hex"),
            "content_type": file_meta.get("sx-content-type", "").decode("hex"),
            "last_modified": last_modified,
            "bytes": file_object["fileSize"],
            "name": file_name,
        }
Exemplo n.º 6
0
def list_files(vol_name, prefix, delimiter, start_marker, end_marker, limit):
    sxcontroller = get_sxcontroller()
    file_objects = sxcontroller.listFiles.call(vol_name,
                                               recursive=True,
                                               limit=str(limit)).content
    file_objects = json.loads(file_objects,
                              object_pairs_hook=collections.OrderedDict)
    for file_name, file_object in file_objects['fileList'].iteritems():
        file_name = file_name.lstrip('/')
        file_meta = sxcontroller.getFileMeta.json_call(vol_name, file_name)
        file_meta = file_meta.get('fileMeta', {})
        last_modified = datetime.fromtimestamp(file_object['createdAt'])
        last_modified = datetime_to_http_iso(last_modified)
        yield {
            'hash': file_meta.get('sx-etag', '').decode('hex'),
            'content_type': file_meta.get('sx-content-type', '').decode('hex'),
            'last_modified': last_modified,
            'bytes': file_object['fileSize'],
            'name': file_name
        }
Exemplo n.º 7
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
Exemplo n.º 8
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