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)
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)
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)
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")
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)
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)