""" The tasks module contains the worker tasks that are used to back up and restore """ from datetime import datetime, timezone from selfprivacy_api.graphql.common_types.backup import RestoreStrategy, BackupReason from selfprivacy_api.models.backup.snapshot import Snapshot from selfprivacy_api.utils.huey import huey from selfprivacy_api.services.service import Service from selfprivacy_api.backup import Backups def validate_datetime(dt: datetime) -> bool: """ Validates that the datetime passed in is timezone-aware. """ if dt.tzinfo is None: return Backups.is_time_to_backup(dt.replace(tzinfo=timezone.utc)) return Backups.is_time_to_backup(dt) # huey tasks need to return something @huey.task() def start_backup( service: Service, reason: BackupReason = BackupReason.EXPLICIT ) -> bool: """ The worker task that starts the backup process. """ Backups.back_up(service, reason) return True @huey.task() def restore_snapshot( snapshot: Snapshot, strategy: RestoreStrategy = RestoreStrategy.DOWNLOAD_VERIFY_OVERWRITE, ) -> bool: """ The worker task that starts the restore process. """ Backups.restore_snapshot(snapshot, strategy) return True @huey.periodic_task(validate_datetime=validate_datetime) def automatic_backup(): """ The worker periodic task that starts the automatic backup process. """ time = datetime.utcnow().replace(tzinfo=timezone.utc) for service in Backups.services_to_back_up(time): start_backup(service, BackupReason.AUTO)