Source code for openprotein.jobs.jobs
from datetime import datetime
from openprotein import config
from openprotein.base import APISession
from . import api
from .futures import Future
from .schemas import Job, JobStatus, JobType
[docs]
class JobsAPI:
    """API interface to get jobs."""
    def __init__(self, session: APISession):
        self.session = session
[docs]
    def list(
        self,
        status: JobStatus | None = None,
        job_type: JobType | None = None,
        assay_id: str | None = None,
        more_recent_than: datetime | str | None = None,
        limit: int = 100,
    ) -> list[Job]:
        """List jobs."""
        more_recent_than_str = (
            more_recent_than.isoformat()
            if isinstance(more_recent_than, datetime)
            else more_recent_than
        )
        return [
            Job.create(j)
            for j in api.jobs_list(
                self.session,
                status=status,
                job_type=job_type,
                assay_id=assay_id,
                more_recent_than=more_recent_than_str,
                limit=limit,
            )
        ] 
    def get_job(self, job_id: str) -> Job:
        return api.job_get(session=self.session, job_id=job_id)
[docs]
    def get(self, job_id: str, verbose: bool = False) -> Future:  # Job:
        """
        Get job by ID.
        Notes
        -----
        This retrieves the job and loads it as a future so you can do `wait` and `get`.
        """
        return self.__load(job_id=job_id) 
        # return Job.create(job.job_get(session=self.session, job_id=job_id))
    def __load(self, job_id: str) -> Future:
        """Loads a job by ID and returns the future."""
        return Future.create(session=self.session, job_id=job_id)
[docs]
    def wait(
        self,
        future: Future,
        interval=config.POLLING_INTERVAL,
        timeout: int | None = None,
        verbose: bool = False,
    ):
        """Waits on a job result."""
        return future.wait(interval=interval, timeout=timeout, verbose=verbose)