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)