Beispiel #1
0
def create_full_version(session: Session, local_path: str):
    node = LocalNode.create(Path(local_path).resolve(), session)
    remote_history = RemoteNodeHistory(history=None, key=node.key, etag=None)
    remote_history.load(session)

    history = remote_history.history
    last = history.last
    prev = history.entries[-2]

    assert last.base_version is None
    assert last.has_delta
    assert prev.base_version is not None

    with create_temp_file() as base_path:
        s3_path = f"{session.s3_prefix}/{node.path}"
        download_file(session.s3_client,
                      session.storage_bucket,
                      s3_path,
                      base_path,
                      version=prev.base_version)
        patch_file(session, base_path, [last.key])
        upload_file(
            session.s3_client,
            base_path,
            session.storage_bucket,
            s3_path,
        )
        obj = get_file_metadata(session.s3_client, session.storage_bucket,
                                s3_path)
        last.base_version = obj["VersionId"]
        last.base_size = int(obj.get("Size", 0))
        remote_history.save(session)
Beispiel #2
0
def delete_remote(
    remote_history: RemoteNodeHistory,
    stored_history: StoredNodeHistory,
    session: Session,
) -> SyncActionResult:
    history = cast(NodeHistory, remote_history.history)
    (session.signature_folder / history.last.key).unlink()
    s3util.delete_file(session.s3_client, session.storage_bucket,
                       f"{session.s3_prefix}/{history.path}")
    history.add_delete_marker()
    remote_history.save(session)
    stored_history.delete().execute()
    return SyncActionResult()