Source code for orm.modeling_request

from datetime import datetime
from typing import List

import sqlalchemy as sql
from sqlalchemy.orm import (
    Mapped,
    mapped_column,
    relationship,
    validates,
)
from sqlalchemy.schema import FetchedValue
from sqlalchemy_utc.sqltypes import UtcDateTime

from app.model.orm.orm_base import OrmBase

[docs] VALID_TYPES = [ 'easy_linear', 'logistic', 'baranyi_roberts', ]
[docs] VALID_STATES = [ 'pending', 'in_progress', 'ready', 'error', ]
[docs] MODEL_NAMES = { 'easy_linear': '"Easy linear" method', 'logistic': 'Logistic model', 'baranyi_roberts': 'Baranyi-Roberts model', }
[docs] class ModelingRequest(OrmBase):
[docs] __tablename__ = "ModelingRequests"
[docs] id: Mapped[int] = mapped_column(primary_key=True)
[docs] type: Mapped[str] = mapped_column(sql.String(100), nullable=False)
[docs] studyId: Mapped[str] = mapped_column(sql.ForeignKey('Studies.studyId'), nullable=False)
[docs] study: Mapped['Study'] = relationship(back_populates='modelingRequests')
[docs] jobUuid: Mapped[str] = mapped_column(sql.String(100))
[docs] state: Mapped[str] = mapped_column(sql.String(100), default='pending')
[docs] error: Mapped[str] = mapped_column(sql.String)
[docs] createdAt: Mapped[datetime] = mapped_column(UtcDateTime, server_default=FetchedValue())
[docs] updatedAt: Mapped[datetime] = mapped_column(UtcDateTime, server_default=FetchedValue())
[docs] results: Mapped[List['ModelingResult']] = relationship( back_populates='request', cascade='all, delete-orphan' )
@validates('type')
[docs] def _validate_type(self, key, value): return self._validate_inclusion(key, value, VALID_TYPES)
@validates('state')
[docs] def _validate_state(self, key, value): return self._validate_inclusion(key, value, VALID_STATES)
@property
[docs] def long_name(self): return MODEL_NAMES[self.type]