Source code for topchef.database.models.job
"""
Contains a model for a job. A job is matched to a particular service. The job's
parameters must be an instance of the service schema, and the result must be
an instance of the result schema
"""
from .declarative_base import BASE
from ..schemas import database, JobStatus
from uuid import UUID, uuid4
from typing import Optional
from ...json_type import JSON_TYPE as JSON
from datetime import datetime
[docs]class Job(BASE):
"""
The database model for a job
"""
__table__ = database.jobs
id = __table__.c.job_id
status = __table__.c.status # type: JobStatus
results = __table__.c.results # type: JSON
parameters = __table__.c.parameters # type: JSON
date_submitted = __table__.c.date_submitted # type: datetime
service_id = __table__.c.service_id
def __init__(
self, job_id: UUID, status: JobStatus, parameters: JSON,
service: 'Service', results: Optional[JSON],
date_submitted=datetime.utcnow()
) -> None:
self.id = job_id
self.status = status
self.parameters = parameters
self.results = results
self.service = service
self.date_submitted = date_submitted
@classmethod
[docs] def new(cls, service: 'Service', parameters: JSON) -> 'Job':
"""
:param service: The service for which this job is being
created.
:param parameters: The job parameters
:return: The newly-created job
"""
new_id = uuid4()
new_status = JobStatus.REGISTERED
return cls(new_id, new_status, parameters, service, None)