app.model.orm#

Classes#

Bioreplicate

A specific physical implementation of a particular experiment.

Community

A collection of strains measured in a particular study

CommunityStrain

Join table between Communities and StudyStrains

Compartment

The environment of a particular bioreplicate.

CustomModel

The description of a user-created model type.

ExcelFile

An uploaded excel file with measurement data

Experiment

An entity that describes the design of a particular experiment.

ExperimentCompartment

Join table between Experiments and Compartments

Measurement

A single observed measurement at a particular time point.

MeasurementContext

A collection of measurements of a particular subject with a particular technique.

MeasurementTechnique

The technique used for a particular set of measurements.

Metabolite

A metabolite record imported from ChEBI.

ModelingResult

The results of fitting a model onto a set of measurements.

PageError

A record of an error that occurred on a particular page, used for tracking

PageVisit

A record of a single visit of a page in the app, intended to be aggregated

PageVisitCounter

A record of a single visit of a page in the app, intended to be aggregated

Perturbation

The description of a change over time in a particular experiment's environment.

Project

A collection of studies.

ProjectUser

Join table between Projects and Users.

Study

The main container for a particular scientific study.

StudyMetabolite

Join table between Studies and Metabolites

StudyStrain

A microbial strain used in a particular study

StudyTechnique

A technique used within a study, parent to one or more MeasurementTechnique records

StudyUser

Join table between Studies and Users.

Submission

A temporary container for the data of a Study, uploaded by a particular User.

SubmissionBackup

A backup recording of a particular past submission

Taxon

A taxon record imported from NCBI.

User

A visitor to the site that is identified by ORCID.

Workspace

A space where users can upload data that is not linked to a study.

WorkspaceEntry

Data uploaded by a user that is not linked to a study.

Package Contents#

class app.model.orm.Bioreplicate[source]#

Bases: app.model.orm.orm_base.OrmBase

A specific physical implementation of a particular experiment.

This would usually be a specific vessel or a connected combination of vessels (Compartment records). All bioreplicates of one particular experiment have the same experimental design. All measurements are made within the context of a bioreplicate.

__tablename__ = 'Bioreplicates'#
id: sqlalchemy.orm.Mapped[int]#
name: sqlalchemy.orm.Mapped[str]#
position: sqlalchemy.orm.Mapped[str]#
biosampleUrl: sqlalchemy.orm.Mapped[str]#
calculationType: sqlalchemy.orm.Mapped[str]#
experimentId: sqlalchemy.orm.Mapped[str]#
experiment: sqlalchemy.orm.Mapped[Experiment]#
study: sqlalchemy.orm.Mapped[Study]#
measurementContexts: sqlalchemy.orm.Mapped[List[MeasurementContext]]#
measurements: sqlalchemy.orm.Mapped[List[Measurement]]#
property externalId#

For compatibility with other subjects of measurements. Always None, since a bioreplicate is not an external record.

get_df(db_session)[source]#
class app.model.orm.Community[source]#

Bases: app.model.orm.orm_base.OrmBase

A collection of strains measured in a particular study

__tablename__ = 'Communities'#
id: sqlalchemy.orm.Mapped[int]#
name: sqlalchemy.orm.Mapped[str]#
studyId: sqlalchemy.orm.Mapped[str]#
study: sqlalchemy.orm.Mapped[Study]#
experiments: sqlalchemy.orm.Mapped[List[Experiment]]#
communityStrains: sqlalchemy.orm.Mapped[List[CommunityStrain]]#
strains: sqlalchemy.orm.Mapped[List[StudyStrain]]#
diff(other)[source]#
class app.model.orm.CommunityStrain[source]#

Bases: app.model.orm.orm_base.OrmBase

Join table between Communities and StudyStrains

__tablename__ = 'CommunityStrains'#
id: sqlalchemy.orm.Mapped[int]#
communityId: sqlalchemy.orm.Mapped[int]#
strainId: sqlalchemy.orm.Mapped[int]#
community: sqlalchemy.orm.Mapped[Community]#
strain: sqlalchemy.orm.Mapped[StudyStrain]#
class app.model.orm.Compartment[source]#

Bases: app.model.orm.orm_base.OrmBase

The environment of a particular bioreplicate.

There could be multiple of these within the same bioreplicate that form a single biological system, but can be measured separately.

One compartment may change to a different compartment due to a Perturbation.

In the future, this entity may be broken down into a separate “compartment” and “environment”.

__tablename__ = 'Compartments'#
id: sqlalchemy.orm.Mapped[int]#
name: sqlalchemy.orm.Mapped[str]#
studyId: sqlalchemy.orm.Mapped[str]#
study: sqlalchemy.orm.Mapped[Study]#
volume: sqlalchemy.orm.Mapped[decimal.Decimal]#
pressure: sqlalchemy.orm.Mapped[decimal.Decimal]#
stirringSpeed: sqlalchemy.orm.Mapped[decimal.Decimal]#
stirringMode: sqlalchemy.orm.Mapped[str]#
O2: sqlalchemy.orm.Mapped[decimal.Decimal]#
CO2: sqlalchemy.orm.Mapped[decimal.Decimal]#
H2: sqlalchemy.orm.Mapped[decimal.Decimal]#
N2: sqlalchemy.orm.Mapped[decimal.Decimal]#
inoculumConcentration: sqlalchemy.orm.Mapped[decimal.Decimal]#
inoculumVolume: sqlalchemy.orm.Mapped[decimal.Decimal]#
initialPh: sqlalchemy.orm.Mapped[decimal.Decimal]#
initialTemperature: sqlalchemy.orm.Mapped[decimal.Decimal]#
dilutionRate: sqlalchemy.orm.Mapped[decimal.Decimal]#
mediumName: sqlalchemy.orm.Mapped[str]#
mediumUrl: sqlalchemy.orm.Mapped[str]#
experimentCompartments: sqlalchemy.orm.Mapped[List[ExperimentCompartment]]#
experiments: sqlalchemy.orm.Mapped[List[Experiment]]#
measurementContexts: sqlalchemy.orm.Mapped[List[MeasurementContext]]#
measurements: sqlalchemy.orm.Mapped[List[Measurement]]#
property properties_description#
diff(other)[source]#
class app.model.orm.CustomModel[source]#

Bases: app.model.orm.orm_base.OrmBase

The description of a user-created model type.

__tablename__ = 'CustomModels'#
id: sqlalchemy.orm.Mapped[int]#
studyId: sqlalchemy.orm.Mapped[int]#
study: sqlalchemy.orm.Mapped[Study]#
name: sqlalchemy.orm.Mapped[str]#
shortName: sqlalchemy.orm.Mapped[str]#
url: sqlalchemy.orm.Mapped[str]#
description: sqlalchemy.orm.Mapped[str]#
coefficientNames: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
fitNames: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
updatedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
property coefficientInfo#
property fitInfo#
class app.model.orm.ExcelFile[source]#

Bases: app.model.orm.orm_base.OrmBase

An uploaded excel file with measurement data

__tablename__ = 'ExcelFiles'#
id: sqlalchemy.orm.Mapped[int]#
filename: sqlalchemy.orm.Mapped[str]#
size: sqlalchemy.orm.Mapped[int]#
content: sqlalchemy.orm.Mapped[bytes]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
classmethod from_upload(uploaded_file)[source]#
property humanized_size#
extract_sheets()[source]#
class app.model.orm.Experiment[source]#

Bases: app.model.orm.orm_base.OrmBase

An entity that describes the design of a particular experiment.

The specific measurements of an experiment are connected to its biological replicates (Bioreplicate), which are the concrete implementations of the experimental design.

A published study contains experiments with fixed publicId identifiers starting with the prefix “EMGDB”.

__tablename__ = 'Experiments'#
publicId: sqlalchemy.orm.Mapped[str]#
name: sqlalchemy.orm.Mapped[str]#
description: sqlalchemy.orm.Mapped[str]#
bioreplicates: sqlalchemy.orm.Mapped[List[Bioreplicate]]#
communityId: sqlalchemy.orm.Mapped[int]#
community: sqlalchemy.orm.Mapped[Community]#
studyId: sqlalchemy.orm.Mapped[str]#
study: sqlalchemy.orm.Mapped[Study]#
cultivationMode: sqlalchemy.orm.Mapped[str]#
experimentCompartments: sqlalchemy.orm.Mapped[List[ExperimentCompartment]]#
compartments: sqlalchemy.orm.Mapped[List[Compartment]]#
perturbations: sqlalchemy.orm.Mapped[List[Perturbation]]#
measurementContexts: sqlalchemy.orm.Mapped[List[MeasurementContext]]#
get_df(db_session)[source]#
static generate_public_id(db_session)[source]#
class app.model.orm.ExperimentCompartment[source]#

Bases: app.model.orm.orm_base.OrmBase

Join table between Experiments and Compartments

__tablename__ = 'ExperimentCompartments'#
id: sqlalchemy.orm.Mapped[int]#
experimentId: sqlalchemy.orm.Mapped[str]#
compartmentId: sqlalchemy.orm.Mapped[int]#
experiment: sqlalchemy.orm.Mapped[Experiment]#
compartment: sqlalchemy.orm.Mapped[Compartment]#
class app.model.orm.Measurement[source]#

Bases: app.model.orm.orm_base.OrmBase

A single observed measurement at a particular time point.

A measurement may be an average of multiple technical replicates with a standard deviation. It may also be a “calculated” measurement from an average of multiple biological replicates. This information is encapsulated in a MeasurementContext, while this record mostly contains the time and recorded value.

__tablename__ = 'Measurements'#
context_relationship#
id: sqlalchemy.orm.Mapped[int]#
studyId: sqlalchemy.orm.Mapped[str]#
study: sqlalchemy.orm.Mapped[Study]#
contextId: sqlalchemy.orm.Mapped[int]#
context: sqlalchemy.orm.Mapped[MeasurementContext]#
bioreplicate: sqlalchemy.orm.Mapped[Bioreplicate]#
compartment: sqlalchemy.orm.Mapped[Compartment]#
technique: sqlalchemy.orm.Mapped[MeasurementTechnique]#
timeInSeconds: sqlalchemy.orm.Mapped[int]#
value: sqlalchemy.orm.Mapped[decimal.Decimal]#
std: sqlalchemy.orm.Mapped[decimal.Decimal]#
timeInHours()[source]#
subjectId()[source]#
subjectType()[source]#
classmethod insert_from_csv_string(db_session, study, csv_string)[source]#
class app.model.orm.MeasurementContext[source]#

Bases: app.model.orm.orm_base.OrmBase

A collection of measurements of a particular subject with a particular technique.

All connections between measurements and other entities are encapsulated here, so the individual Measurement objects can be packages of time and value alone.

__tablename__ = 'MeasurementContexts'#
id: sqlalchemy.orm.Mapped[int]#
bioreplicateId: sqlalchemy.orm.Mapped[int]#
bioreplicate: sqlalchemy.orm.Mapped[Bioreplicate]#
experiment: sqlalchemy.orm.Mapped[Experiment]#
compartmentId: sqlalchemy.orm.Mapped[int]#
compartment: sqlalchemy.orm.Mapped[Compartment]#
studyId: sqlalchemy.orm.Mapped[str]#
study: sqlalchemy.orm.Mapped[Study]#
techniqueId: sqlalchemy.orm.Mapped[int]#
technique: sqlalchemy.orm.Mapped[MeasurementTechnique]#
measurements: sqlalchemy.orm.Mapped[List[Measurement]]#
modelingResults: sqlalchemy.orm.Mapped[List[ModelingResult]]#
calculationType: sqlalchemy.orm.Mapped[str]#
subjectId: sqlalchemy.orm.Mapped[int]#
subjectType: sqlalchemy.orm.Mapped[str]#
subjectName: sqlalchemy.orm.Mapped[str]#
subjectExternalId: sqlalchemy.orm.Mapped[str]#
subjectTypeOrdering#
property readyModelingResults#
property publishedModelingResults#
property units#
get_df(db_session)[source]#
get_chart_label(model_name=None)[source]#
get_subject(db_session)[source]#
class app.model.orm.MeasurementTechnique[source]#

Bases: app.model.orm.orm_base.OrmBase

The technique used for a particular set of measurements.

__tablename__ = 'MeasurementTechniques'#
id: sqlalchemy.orm.Mapped[int]#
type: sqlalchemy.orm.Mapped[str]#
cellType: sqlalchemy.orm.Mapped[str]#
subjectType: sqlalchemy.orm.Mapped[str]#
metaboliteIds: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
updatedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
studyTechniqueId: sqlalchemy.orm.Mapped[int]#
studyTechnique: sqlalchemy.orm.Mapped[StudyTechnique]#
measurementContexts: sqlalchemy.orm.Mapped[List[MeasurementContext]]#
measurements: sqlalchemy.orm.Mapped[List[Measurement]]#
connectedBioreplicates: sqlalchemy.orm.Mapped[List[Bioreplicate]]#
typeOrdering#
subjectTypeOrdering#
__lt__(other)[source]#
property units#
property short_name#
property long_name#
property long_name_with_subject_type#
property is_growth#
property connectedExperimentIds#
get_bioreplicates(db_session)[source]#
csv_column_name(subject_name=None)[source]#
get_grouped_contexts()[source]#
__str__()[source]#
class app.model.orm.Metabolite[source]#

Bases: app.model.orm.orm_base.OrmBase

A metabolite record imported from ChEBI.

This entity is independent from any particular study and it represents the general information about a metabolite.

__tablename__ = 'Metabolites'#
id: sqlalchemy.orm.Mapped[int]#
chebiId: sqlalchemy.orm.Mapped[str]#
name: sqlalchemy.orm.Mapped[str]#
definition: sqlalchemy.orm.Mapped[str]#
averageMass: sqlalchemy.orm.Mapped[decimal.Decimal]#
massIsEstimation: sqlalchemy.orm.Mapped[bool]#
studyMetabolites: sqlalchemy.orm.Mapped[List[StudyMetabolite]]#
__lt__(other)[source]#
property externalId#

For compatibility with other subjects of measurements. The metabolite’s ChEBI id, e.g. “CHEBI:1234”

static search_by_name(db_session, term, page=1, per_page=10)[source]#
class app.model.orm.ModelingResult[source]#

Bases: app.model.orm.orm_base.OrmBase

The results of fitting a model onto a set of measurements.

The measurements are represented by a ModelingContext and the results of the calculation are stored in the params field. The state of the record describes the status of the job that runs the calculations.

__tablename__ = 'ModelingResults'#
id: sqlalchemy.orm.Mapped[int]#
type: sqlalchemy.orm.Mapped[str]#
measurementContextId: sqlalchemy.orm.Mapped[int]#
measurementContext: sqlalchemy.orm.Mapped[MeasurementContext]#
study: sqlalchemy.orm.Mapped[Study]#
workspaceEntryId: sqlalchemy.orm.Mapped[int]#
workspaceEntry: sqlalchemy.orm.Mapped[WorkspaceEntry]#
customModelId: sqlalchemy.orm.Mapped[int]#
customModel: sqlalchemy.orm.Mapped[CustomModel]#
params: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
state: sqlalchemy.orm.Mapped[str]#
error: sqlalchemy.orm.Mapped[str]#
rSummary: sqlalchemy.orm.Mapped[str]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
updatedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
calculatedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
publishedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
xValues: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
yValues: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
yErrors: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
classmethod empty_params(model_type)[source]#
isPublished()[source]#
property info#
property model_name#
property short_model_name#
property model_url#
property model_description#
property model_params#
property target#
property units#
get_chart_label()[source]#
generate_chart_df(measurements_df=None)[source]#
update_model_params(form)[source]#
visible_to_user(user)[source]#
class app.model.orm.PageError[source]#

Bases: app.model.orm.orm_base.OrmBase

A record of an error that occurred on a particular page, used for tracking unseen problems in the application in production.

__tablename__ = 'PageErrors'#
id: sqlalchemy.orm.Mapped[int]#
fullPath: sqlalchemy.orm.Mapped[str]#
uuid: sqlalchemy.orm.Mapped[str]#
userId: sqlalchemy.orm.Mapped[int]#
traceback: sqlalchemy.orm.Mapped[str]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
class app.model.orm.PageVisit[source]#

Bases: app.model.orm.orm_base.OrmBase

A record of a single visit of a page in the app, intended to be aggregated into counts and deleted on a regular basis.

__tablename__ = 'PageVisits'#
id: sqlalchemy.orm.Mapped[int]#
path: sqlalchemy.orm.Mapped[str]#
query: sqlalchemy.orm.Mapped[str]#
referrer: sqlalchemy.orm.Mapped[str]#
ip: sqlalchemy.orm.Mapped[str]#
country: sqlalchemy.orm.Mapped[str]#
userAgent: sqlalchemy.orm.Mapped[str]#
uuid: sqlalchemy.orm.Mapped[str]#
isUser: sqlalchemy.orm.Mapped[bool]#
isAdmin: sqlalchemy.orm.Mapped[bool]#
isBot: sqlalchemy.orm.Mapped[bool]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
property parsedQuery#
class app.model.orm.PageVisitCounter[source]#

Bases: app.model.orm.orm_base.OrmBase

A record of a single visit of a page in the app, intended to be aggregated into counts and deleted on a regular basis.

__tablename__ = 'PageVisitCounters'#
id: sqlalchemy.orm.Mapped[int]#
paths: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
countries: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
totalVisitCount: sqlalchemy.orm.Mapped[int]#
totalBotVisitCount: sqlalchemy.orm.Mapped[int]#
totalVisitorCount: sqlalchemy.orm.Mapped[int]#
totalUserCount: sqlalchemy.orm.Mapped[int]#
totalApiVisitCount: sqlalchemy.orm.Mapped[int]#
startTimestamp: sqlalchemy.orm.Mapped[datetime.datetime]#
endTimestamp: sqlalchemy.orm.Mapped[datetime.datetime]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
class app.model.orm.Perturbation[source]#

Bases: app.model.orm.orm_base.OrmBase

The description of a change over time in a particular experiment’s environment.

A perturbation is described by the addition or removal of a Compartment to the experiment or by the change from one Community to another.

This may be changed in the future as we collect more studies with perturbations.

__tablename__ = 'Perturbations'#
id: sqlalchemy.orm.Mapped[int]#
description: sqlalchemy.orm.Mapped[str]#
experimentId: sqlalchemy.orm.Mapped[str]#
experiment: sqlalchemy.orm.Mapped[Experiment]#
study: sqlalchemy.orm.Mapped[Study]#
startTimeInSeconds: sqlalchemy.orm.Mapped[int]#
endTimeInSeconds: sqlalchemy.orm.Mapped[int]#
removedCompartmentId: sqlalchemy.orm.Mapped[int]#
addedCompartmentId: sqlalchemy.orm.Mapped[int]#
oldCommunityId: sqlalchemy.orm.Mapped[int]#
newCommunityId: sqlalchemy.orm.Mapped[int]#
oldCommunity: sqlalchemy.orm.Mapped[Community | None]#
newCommunity: sqlalchemy.orm.Mapped[Community | None]#
removedCompartment: sqlalchemy.orm.Mapped[Compartment | None]#
addedCompartment: sqlalchemy.orm.Mapped[Compartment | None]#
startTimeInHours()[source]#
endTimeInHours()[source]#
class app.model.orm.Project[source]#

Bases: app.model.orm.orm_base.OrmBase

A collection of studies.

It has a fixed publicId identifier starting with the prefix “PMGDB”.

__tablename__ = 'Projects'#
publicId: sqlalchemy.orm.Mapped[str]#
uuid: sqlalchemy.orm.Mapped[str]#
ownerUuid: sqlalchemy.orm.Mapped[str]#
owner: sqlalchemy.orm.Mapped[User]#
name: sqlalchemy.orm.Mapped[str]#
description: sqlalchemy.orm.Mapped[str]#
projectUsers: sqlalchemy.orm.Mapped[List[ProjectUser]]#
studies: sqlalchemy.orm.Mapped[List[Study]]#
property studyUuids#
property managerUuids#
static generate_public_id(db_session)[source]#
class app.model.orm.ProjectUser[source]#

Bases: app.model.orm.orm_base.OrmBase

Join table between Projects and Users.

The users recorded in this table have the ability to manage a particular project, add studies to it.

__tablename__ = 'ProjectUsers'#
id: sqlalchemy.orm.Mapped[int]#
projectUniqueID: sqlalchemy.orm.Mapped[str]#
userUniqueID: sqlalchemy.orm.Mapped[str]#
project: sqlalchemy.orm.Mapped[Project]#
user: sqlalchemy.orm.Mapped[User]#
class app.model.orm.Study[source]#

Bases: app.model.orm.orm_base.OrmBase

The main container for a particular scientific study.

Updates to experiments and measurements can only be done by issuing a Submission to update a particular study. Access control over the individual experiments is also done at the study level.

It has a fixed publicId identifier starting with the prefix “SMGDB”.

__tablename__ = 'Studies'#
owner_relationship#
publicId: sqlalchemy.orm.Mapped[str]#
uuid: sqlalchemy.orm.Mapped[str]#
ownerUuid: sqlalchemy.orm.Mapped[str]#
owner: sqlalchemy.orm.Mapped[User]#
name: sqlalchemy.orm.Mapped[str]#
description: sqlalchemy.orm.Mapped[str]#
url: sqlalchemy.orm.Mapped[str]#
licenseUrl: sqlalchemy.orm.Mapped[str]#
timeUnits: sqlalchemy.orm.Mapped[str]#
authors: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
authorCache: sqlalchemy.orm.Mapped[str]#
projectUuid: sqlalchemy.orm.Mapped[str]#
project: sqlalchemy.orm.Mapped[Project]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
updatedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
publishableAt: sqlalchemy.orm.Mapped[datetime.datetime]#
publishedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
embargoExpiresAt: sqlalchemy.orm.Mapped[datetime.datetime]#
studyUsers: sqlalchemy.orm.Mapped[List[StudyUser]]#
experiments: sqlalchemy.orm.Mapped[List[Experiment]]#
strains: sqlalchemy.orm.Mapped[List[StudyStrain]]#
communities: sqlalchemy.orm.Mapped[List[Community]]#
compartments: sqlalchemy.orm.Mapped[List[Compartment]]#
studyTechniques: sqlalchemy.orm.Mapped[List[StudyTechnique]]#
measurementContexts: sqlalchemy.orm.Mapped[List[MeasurementContext]]#
customModels: sqlalchemy.orm.Mapped[List[CustomModel]]#
bioreplicates: sqlalchemy.orm.Mapped[List[Bioreplicate]]#
measurementTechniques: sqlalchemy.orm.Mapped[List[MeasurementTechnique]]#
measurements: sqlalchemy.orm.Mapped[List[Measurement]]#
modelingResults: sqlalchemy.orm.Mapped[List[ModelingResult]]#
studyMetabolites: sqlalchemy.orm.Mapped[List[StudyMetabolite]]#
metabolites: sqlalchemy.orm.Mapped[List[Metabolite]]#
lastSubmissionId: sqlalchemy.orm.Mapped[int]#
lastSubmission: sqlalchemy.orm.Mapped[Submission]#
isPublished()[source]#
property nameWithId#
property isPublishable#
property managerUuids#
visible_to_user(user)[source]#
manageable_by_user(user)[source]#
get_model_info_list()[source]#
find_last_submission(db_session)[source]#
fetch_grouped_measurement_subjects(db_session)[source]#
fetch_experiment_ids_by_measurement_subject(db_session)[source]#
publish(db_session)[source]#
get_cc_code()[source]#

If the license URL is to a Creative Commons license, get the corresponding code to render the appropriate image.

static generate_public_id(db_session)[source]#
class app.model.orm.StudyMetabolite[source]#

Bases: app.model.orm.orm_base.OrmBase

Join table between Studies and Metabolites

__tablename__ = 'StudyMetabolites'#
id: sqlalchemy.orm.Mapped[int]#
studyId: sqlalchemy.orm.Mapped[str]#
chebiId: sqlalchemy.orm.Mapped[str]#
study: sqlalchemy.orm.Mapped[Study]#
metabolite: sqlalchemy.orm.Mapped[Metabolite]#
static search_by_name(db_session, term, page=1, per_page=10)[source]#
class app.model.orm.StudyStrain[source]#

Bases: app.model.orm.orm_base.OrmBase

A microbial strain used in a particular study

__tablename__ = 'StudyStrains'#
id: sqlalchemy.orm.Mapped[int]#
name: sqlalchemy.orm.Mapped[str]#
description: sqlalchemy.orm.Mapped[str]#
defined: sqlalchemy.orm.Mapped[bool]#
ncbiId: sqlalchemy.orm.Mapped[int]#
studyId: sqlalchemy.orm.Mapped[str]#
study: sqlalchemy.orm.Mapped[Study]#
userUniqueID: sqlalchemy.orm.Mapped[str]#
taxon: sqlalchemy.orm.Mapped[Taxon]#
communityStrains: sqlalchemy.orm.Mapped[List[CommunityStrain]]#
static search_by_name(db_session, term, page=1, per_page=10)[source]#
__lt__(other)[source]#
isUnknown()[source]#
notUnknown()[source]#
property externalId#

For compatibility with other subjects of measurements. The strain’s (or parent strain’s) NCBI id, e.g. “NCBI:1234”

class app.model.orm.StudyTechnique[source]#

Bases: app.model.orm.orm_base.OrmBase

A technique used within a study, parent to one or more MeasurementTechnique records

__tablename__ = 'StudyTechniques'#
id: sqlalchemy.orm.Mapped[int]#
type: sqlalchemy.orm.Mapped[str]#
subjectType: sqlalchemy.orm.Mapped[str]#
units: sqlalchemy.orm.Mapped[str]#
includeStd: sqlalchemy.orm.Mapped[bool]#
includeUnknown: sqlalchemy.orm.Mapped[bool]#
label: sqlalchemy.orm.Mapped[str]#
description: sqlalchemy.orm.Mapped[str]#
studyId: sqlalchemy.orm.Mapped[str]#
study: sqlalchemy.orm.Mapped[Study]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
updatedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
measurementTechniques: sqlalchemy.orm.Mapped[List[MeasurementTechnique]]#
typeOrdering#
subjectTypeOrdering#
property is_growth#
property short_name#
property short_name_with_units#
property short_name_with_subject_type#
property long_name#
property long_name_with_subject_type#
class app.model.orm.StudyUser[source]#

Bases: app.model.orm.orm_base.OrmBase

Join table between Studies and Users.

The users recorded in this table have the ability to manage a particular study, to update it, or to reuse its components in other uploads.

__tablename__ = 'StudyUsers'#
id: sqlalchemy.orm.Mapped[int]#
studyUniqueID: sqlalchemy.orm.Mapped[str]#
userUniqueID: sqlalchemy.orm.Mapped[str]#
study: sqlalchemy.orm.Mapped[Study]#
user: sqlalchemy.orm.Mapped[User]#
class app.model.orm.Submission[source]#

Bases: app.model.orm.orm_base.OrmBase

A temporary container for the data of a Study, uploaded by a particular User.

The study design is stored in a JSON field, built up over several steps in a frontend form. The study measurements are stored in an uploaded excel file. Both of these are processed to create individual entities that are accessible to the public.

__tablename__ = 'Submissions'#
id: sqlalchemy.orm.Mapped[int]#
projectUniqueID: sqlalchemy.orm.Mapped[str]#
studyUniqueID: sqlalchemy.orm.Mapped[str]#
project: sqlalchemy.orm.Mapped[Project | None]#
study: sqlalchemy.orm.Mapped[Study | None]#
userUniqueID: sqlalchemy.orm.Mapped[str]#
user: sqlalchemy.orm.Mapped[User]#
studyDesign: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
dataFileId: sqlalchemy.orm.Mapped[int]#
dataFile: sqlalchemy.orm.Mapped[ExcelFile | None]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
updatedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
publishedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
changelogText: sqlalchemy.orm.Mapped[sqlalchemy.String]#
isPublished()[source]#
property completedStepCount#
build_techniques()[source]#
export_data(message, timestamp=None)[source]#
class app.model.orm.SubmissionBackup[source]#

Bases: app.model.orm.orm_base.OrmBase

A backup recording of a particular past submission

__tablename__ = 'SubmissionBackups'#
id: sqlalchemy.orm.Mapped[int]#
projectId: sqlalchemy.orm.Mapped[int]#
studyId: sqlalchemy.orm.Mapped[int]#
userUuid: sqlalchemy.orm.Mapped[str]#
dataFileId: sqlalchemy.orm.Mapped[int]#
studyDesign: sqlalchemy.orm.Mapped[sqlalchemy.JSON]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
class app.model.orm.Taxon[source]#

Bases: app.model.orm.orm_base.OrmBase

A taxon record imported from NCBI.

This entity is independent from any particular study and it represents the general information about a specific taxon.

__tablename__ = 'Taxa'#
id: sqlalchemy.orm.Mapped[int]#
ncbiId: sqlalchemy.orm.Mapped[int]#
name: sqlalchemy.orm.Mapped[str]#
studyStrains: sqlalchemy.orm.Mapped[List[StudyStrain]]#
property short_name#
static search_by_name(db_session, term, page=1, per_page=10)[source]#
class app.model.orm.User[source]#

Bases: app.model.orm.orm_base.OrmBase

A visitor to the site that is identified by ORCID.

Every project and study need to be owned by a specific user and may be editable by other users. This ensures a trace for who uploaded a particular study in case moderation or editing is needed.

__tablename__ = 'Users'#
owner_relationship#
id: sqlalchemy.orm.Mapped[int]#
uuid: sqlalchemy.orm.Mapped[str]#
orcidId: sqlalchemy.orm.Mapped[str]#
orcidToken: sqlalchemy.orm.Mapped[str]#
apiKey: sqlalchemy.orm.Mapped[str]#
name: sqlalchemy.orm.Mapped[str]#
isAdmin: sqlalchemy.orm.Mapped[bool]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
updatedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
lastLoginAt: sqlalchemy.orm.Mapped[datetime.datetime]#
ownedProjects: sqlalchemy.orm.Mapped[List[Project]]#
ownedStudies: sqlalchemy.orm.Mapped[List[Study]]#
submissions: sqlalchemy.orm.Mapped[List[Submission]]#
studyUsers: sqlalchemy.orm.Mapped[List[StudyUser]]#
managedStudies: sqlalchemy.orm.Mapped[List[Study]]#
projectUsers: sqlalchemy.orm.Mapped[List[ProjectUser]]#
managedProjects: sqlalchemy.orm.Mapped[List[Project]]#
workspaces: sqlalchemy.orm.Mapped[List[Workspace]]#
property orcidUrl#
__str__()[source]#
class app.model.orm.Workspace[source]#

Bases: app.model.orm.orm_base.OrmBase

A space where users can upload data that is not linked to a study.

The actual data instances are in `WorkspaceEntry` records. This is a container for them that is linked to a specific user with a specific name. It can be made public or kept private (the default).

__tablename__ = 'Workspaces'#
id: sqlalchemy.orm.Mapped[int]#
name: sqlalchemy.orm.Mapped[str]#
userId: sqlalchemy.orm.Mapped[int]#
user: sqlalchemy.orm.Mapped[User]#
entries: sqlalchemy.orm.Mapped[List[WorkspaceEntry]]#
modelingResults: sqlalchemy.orm.Mapped[List[ModelingResult]]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
updatedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
publishedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
property uploadedEntries#
property apiEntries#
isPublished()[source]#
visible_to_user(user)[source]#
manageable_by_user(user)[source]#
class app.model.orm.WorkspaceEntry[source]#

Bases: app.model.orm.orm_base.OrmBase

Data uploaded by a user that is not linked to a study.

This data is meant to be shown on a user’s dashboard, or attached to a study post-upload. It could be observational measurements, or it could be modeling results.

__tablename__ = 'WorkspaceEntries'#
id: sqlalchemy.orm.Mapped[int]#
label: sqlalchemy.orm.Mapped[str]#
data: sqlalchemy.orm.Mapped[str]#
sourceType: sqlalchemy.orm.Mapped[Literal['upload', 'api']]#
dataType: sqlalchemy.orm.Mapped[Literal['measurement', 'model', 'other']]#
subjectType: sqlalchemy.orm.Mapped[Literal['community', 'strain', 'metabolite']]#
subjectId: sqlalchemy.orm.Mapped[int]#
units: sqlalchemy.orm.Mapped[str]#
workspaceId: sqlalchemy.orm.Mapped[int]#
workspace: sqlalchemy.orm.Mapped[Workspace]#
user: sqlalchemy.orm.Mapped[User]#
createdAt: sqlalchemy.orm.Mapped[datetime.datetime]#
updatedAt: sqlalchemy.orm.Mapped[datetime.datetime]#
modelingResults: sqlalchemy.orm.Mapped[List[ModelingResult]]#
classmethod from_upload(df, workspace, metadata={}, include_error=False)[source]#

Construct workspace entry records from the data in a CSV file.

The first column will be parsed as time values, every other column will be considered to represent measurements. If `include_error` is truthy, columns will be parsed as pairs of value and error measurements.

property isGrowth#
property canBeModeled#
property readyModelingResults#
get_df(db_session=None)[source]#
get_chart_label(model_name=None)[source]#