Source code for orm.experiment

import re
from typing import List

import sqlalchemy as sql
from sqlalchemy.orm import (
    Mapped,
    mapped_column,
    relationship,
)

from app.model.orm.orm_base import OrmBase


[docs] class Experiment(OrmBase):
[docs] __tablename__ = "Experiments"
[docs] id: Mapped[int] = mapped_column(primary_key=True)
[docs] publicId: Mapped[str] = mapped_column(sql.String(100))
[docs] name: Mapped[str] = mapped_column(sql.String(100), nullable=False)
[docs] description: Mapped[str] = mapped_column(sql.String)
[docs] bioreplicates: Mapped[List['Bioreplicate']] = relationship( order_by="Bioreplicate.id", back_populates='experiment', cascade="all, delete-orphan" )
[docs] communityId: Mapped[int] = mapped_column(sql.ForeignKey('Communities.id'))
[docs] community: Mapped['Community'] = relationship(back_populates='experiments')
[docs] studyId: Mapped[str] = mapped_column(sql.ForeignKey('Studies.studyId'), nullable=False)
[docs] study: Mapped['Study'] = relationship(back_populates='experiments')
[docs] cultivationMode: Mapped[str] = mapped_column(sql.String(50))
[docs] experimentCompartments: Mapped[List['ExperimentCompartment']] = relationship(back_populates='experiment')
[docs] compartments: Mapped[List['Compartment']] = relationship( secondary='ExperimentCompartments', viewonly=True, )
[docs] perturbations: Mapped[List['Perturbation']] = relationship(back_populates='experiment')
[docs] measurementContexts: Mapped[List['MeasurementContext']] = relationship( secondary='Bioreplicates', viewonly=True, )
@staticmethod
[docs] def generate_public_id(db_session): last_string_id = db_session.scalars( sql.select(Experiment.publicId) .order_by(Experiment.publicId.desc()) .limit(1) ).one_or_none() if last_string_id: last_numeric_id = int(re.sub(r'EMGDB0*', '', last_string_id)) else: last_numeric_id = 0 return "EMGDB{:09d}".format(last_numeric_id + 1)