Source code for server.web.models.queue

"""Queue Table in the Database."""

from sqlalchemy import Column, ForeignKey, Integer, String, UniqueConstraint, select
from sqlalchemy.orm import Mapped, Session, mapped_column, relationship

from jobmon.core.serializers import SerializeQueue
from jobmon.server.web.models import Base
from jobmon.server.web.models.cluster import Cluster


[docs] class Queue(Base): """Queue Table in the Database."""
[docs] __tablename__ = "queue"
[docs] def to_wire_as_requested_by_client(self) -> tuple: """Serialize cluster object.""" return SerializeQueue.to_wire(self.id, self.name, self.parameters)
[docs] id: Mapped[int] = mapped_column(Integer, primary_key=True)
[docs] name: Mapped[str] = mapped_column(String(255), nullable=False)
[docs] cluster_id = Column(Integer, ForeignKey("cluster.id"), nullable=False)
[docs] parameters: Mapped[str] = mapped_column(String(2500), nullable=False)
# ORM relationships
[docs] cluster = relationship("Cluster", back_populates="queues")
[docs] __table_args__ = ( UniqueConstraint("name", "cluster_id", name="uc_name_cluster_id"), )
[docs] def add_queues(session: Session) -> None: """Populate the queue table in the database.""" for cluster_name in ["dummy", "sequential", "multiprocess"]: cluster = ( session.execute(select(Cluster).where(Cluster.name == cluster_name)) .scalars() .one() ) if cluster_name == "multiprocess": parameters = '{"cores": (1,20)}' else: parameters = "{}" session.add(Queue(name="null.q", cluster_id=cluster.id, parameters=parameters))