Source code for orm.bioreplicate

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 Bioreplicate(OrmBase):
[docs] __tablename__ = 'Bioreplicates'
[docs] id: Mapped[int] = mapped_column(primary_key=True)
[docs] name: Mapped[str] = mapped_column(sql.String(100), nullable=False)
[docs] position: Mapped[str] = mapped_column(sql.String(100))
[docs] biosampleUrl: Mapped[str] = mapped_column(sql.String)
[docs] isControl: Mapped[bool] = mapped_column(sql.Boolean, nullable=False, default=False)
[docs] isBlank: Mapped[bool] = mapped_column(sql.Boolean, nullable=False, default=False)
# Only set if the bioreplicate was generated and not uploaded
[docs] calculationType: Mapped[str] = mapped_column(sql.String(50))
[docs] studyId: Mapped[str] = mapped_column(sql.ForeignKey('Studies.studyId'), nullable=False)
[docs] study: Mapped['Study'] = relationship(back_populates='bioreplicates')
[docs] experimentId: Mapped[int] = mapped_column(sql.ForeignKey('Experiments.id'), nullable=False)
[docs] experiment: Mapped['Experiment'] = relationship(back_populates='bioreplicates')
[docs] measurementContexts: Mapped[List['MeasurementContext']] = relationship( back_populates='bioreplicate', cascade='all, delete-orphan' )
[docs] measurements: Mapped[List['Measurement']] = relationship( order_by='Measurement.timeInSeconds', secondary='MeasurementContexts', viewonly=True, )
@staticmethod
[docs] def find_for_study(db_session, study_id, name): return db_session.scalars( sql.select(Bioreplicate.id) .where( Bioreplicate.studyId == study_id, Bioreplicate.name == name, ) ).one()