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]
bioreplicates: Mapped[List['Bioreplicate']] = relationship(
order_by="Bioreplicate.id",
back_populates='experiment',
cascade="all, delete-orphan"
)
[docs]
experimentCompartments: Mapped[List['ExperimentCompartment']] = relationship(back_populates='experiment')
[docs]
compartments: Mapped[List['Compartment']] = relationship(
secondary='ExperimentCompartments',
viewonly=True,
)
[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)