async def _vlob_create(self, encryption_revision: int, entry_id: EntryID, ciphered: bytes, now: Pendulum): """ Raises: FSError FSRemoteSyncError FSBackendOfflineError FSWorkspaceInMaintenance FSBadEncryptionRevision FSWorkspaceNoAccess """ # Vlob upload rep = await self._backend_cmds("vlob_create", self.workspace_id, encryption_revision, entry_id, now, ciphered) if rep["status"] == "already_exists": raise FSRemoteSyncError(entry_id) elif rep["status"] == "not_allowed": # Seems we lost the access to the realm raise FSWorkspaceNoWriteAccess( "Cannot upload manifest: no write access") elif rep["status"] == "bad_encryption_revision": raise FSBadEncryptionRevision( f"Cannot create vlob {entry_id}: Bad encryption revision provided" ) elif rep["status"] == "in_maintenance": raise FSWorkspaceInMaintenance( f"Cannot create vlob while the workspace is in maintenance") elif rep["status"] != "ok": raise FSError(f"Cannot create vlob {entry_id}: `{rep['status']}`")
async def _vlob_update( self, encryption_revision: int, entry_id: EntryID, ciphered: bytes, now: DateTime, version: int, ) -> None: """ Raises: FSError FSRemoteSyncError FSBackendOfflineError FSWorkspaceInMaintenance FSBadEncryptionRevision FSWorkspaceNoAccess """ # Vlob upload with translate_backend_cmds_errors(): rep = await self.backend_cmds.vlob_update(encryption_revision, entry_id, version, now, ciphered) if rep["status"] == "not_found": raise FSRemoteSyncError(entry_id) elif rep["status"] == "not_allowed": # Seems we lost the access to the realm raise FSWorkspaceNoWriteAccess( "Cannot upload manifest: no write access") elif rep["status"] == "bad_version": raise FSRemoteSyncError(entry_id) elif rep["status"] == "bad_timestamp": # Quick and dirty fix before a better version with a retry loop : go offline so we # don't have to deal with another client updating manifest with a later timestamp raise FSBackendOfflineError(rep) elif rep["status"] == "bad_encryption_revision": raise FSBadEncryptionRevision( f"Cannot update vlob {entry_id}: Bad encryption revision provided" ) elif rep["status"] == "in_maintenance": raise FSWorkspaceInMaintenance( "Cannot create vlob while the workspace is in maintenance") elif rep["status"] != "ok": raise FSError(f"Cannot update vlob {entry_id}: `{rep['status']}`")
async def _vlob_update( self, encryption_revision: int, entry_id: EntryID, ciphered: bytes, now: DateTime, version: int, ) -> None: """ Raises: FSError FSRemoteSyncError FSBackendOfflineError FSRemoteOperationError FSWorkspaceInMaintenance FSBadEncryptionRevision FSWorkspaceNoAccess """ # Vlob upload with translate_backend_cmds_errors(): rep = await self.backend_cmds.vlob_update(encryption_revision, VlobID(entry_id.uuid), version, now, ciphered) if rep["status"] == "not_found": raise FSRemoteSyncError(entry_id) elif rep["status"] == "not_allowed": # Seems we lost the access to the realm raise FSWorkspaceNoWriteAccess( "Cannot upload manifest: no write access") elif rep["status"] == "require_greater_timestamp": raise VlobRequireGreaterTimestampError( rep["strictly_greater_than"]) elif rep["status"] == "bad_version": raise FSRemoteSyncError(entry_id) elif rep["status"] == "bad_encryption_revision": raise FSBadEncryptionRevision( f"Cannot update vlob {entry_id}: Bad encryption revision provided" ) elif rep["status"] == "in_maintenance": raise FSWorkspaceInMaintenance( "Cannot create vlob while the workspace is in maintenance") elif rep["status"] != "ok": raise FSError(f"Cannot update vlob {entry_id}: `{rep['status']}`")