"""Job input model.""" from typing import Any from sqlalchemy import Column, ForeignKey from sqlalchemy.dialects.mysql import INTEGER, VARCHAR from sqlalchemy.orm import validates from video.connectors import mysql from video.models.sql.classes import base_mixin class JobInput(mysql.BaseModel, base_mixin.BaseMixin): """Job input model.""" __tablename__ = "job_inputs" job_id = Column( INTEGER(unsigned=True), ForeignKey("jobs.id"), nullable=False, ) name = Column(VARCHAR(length=280)) value = Column(VARCHAR(length=900)) field_type = Column(VARCHAR(length=280), name="type", nullable=False) context_id = Column( INTEGER(unsigned=True), ForeignKey("contexts.id"), nullable=False, ) @validates("value") def validate_value_length(self, key: str, value: str) -> str: """Validate the length of value column.""" if len(value) > 900: raise ValueError("JobInputs column `value` has a limit of 900 chars.") return value def to_dict(self) -> dict[str, Any]: """Get a dict representation of a JobInput.""" data = super(JobInput, self).to_dict() data.update( { "job_id": self.job_id, "name": self.name, "value": self.value, "type": self.field_type, "context_id": self.context_id, } ) return data