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