Example #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)
Example #2
0
def upload_again(session: Session, path: str):
    path = Path(path).resolve()
    with open(path, "ab") as f:
        f.write(b"1")
    node = LocalNode.create(path, session)
    remote_history = RemoteNodeHistory(key=node.key, etag=None, history=None)
    remote_history.load(session)
    upload(remote_history, node)(session)
    show_history(session, node.key)
Example #3
0
def download_new_version(session: Session, path: str):
    path = Path(path).resolve()
    node = LocalNode.create(path, session)
    remote_history = RemoteNodeHistory(key=node.key, etag=None, history=None)
    remote_history.load(session)
    stored_history = models.StoredNodeHistory\
        .get(models.StoredNodeHistory.key == node.key)
    download(remote_history, stored_history)(session)

    show_history(session, node.key)
Example #4
0
def show_history(session: Session, key: str):
    print_line("History")
    print_line("Remote")
    remote_history = RemoteNodeHistory(key=key, etag=None, history=None)
    remote_history.load(session)
    pprint(remote_history.history.dict())
    stored_history = models.StoredNodeHistory\
        .get_or_none(models.StoredNodeHistory.key == key)
    print_line("Stored")
    pprint(models.recored_as_dict(stored_history) if stored_history else None)
    print_line("End History")
Example #5
0
def clear_remote(session: Session):
    # upload
    path = create_file(session.root_folder.path, MB(1))
    node = LocalNode.create(path, session)
    upload(None, node)(session)

    remote_history = RemoteNodeHistory(key=node.key, etag=None, history=None)
    remote_history.load(session)
    stored_history = models.StoredNodeHistory\
        .get(models.StoredNodeHistory.key == node.key)

    delete_remote(remote_history, stored_history)(session)
    node.local_path.unlink()

    show_history(session, node.key)
Example #6
0
def download_first_time(session: Session):
    # upload
    path = create_file(session.root_folder.path, MB(1))
    node = LocalNode.create(path, session)
    upload(None, node)(session)

    # clear local
    delete_local(
        node,
        models.StoredNodeHistory.get(models.StoredNodeHistory.key == node.key)
    )(session)

    # download
    remote_history = RemoteNodeHistory(key=node.key, etag=None, history=None)
    remote_history.load(session)
    download(remote_history, None)(session)

    show_history(session, node.key)