from selfprivacy_api.services import Service
from selfprivacy_api.utils.block_devices import BlockDevice
from selfprivacy_api.utils.huey import huey
from selfprivacy_api.jobs import Job, Jobs, JobStatus


@huey.task()
def move_service(service: Service, new_volume: BlockDevice, job: Job) -> bool:
    """
    Move service's folders to new physical volume
    Does not raise exceptions (we cannot handle exceptions from tasks).
    Reports all errors via job.
    """
    try:
        service.move_to_volume(new_volume, job)
    except Exception as e:
        Jobs.update(
            job=job,
            status=JobStatus.ERROR,
            error=type(e).__name__ + " " + str(e),
        )
    return True