Source code for upload_step5_form

from wtforms import (
    BooleanField,
    FieldList,
    FormField,
    IntegerField,
    SelectField,
    SelectMultipleField,
    StringField,
    TextAreaField,
    URLField,
)
from wtforms.validators import DataRequired, ValidationError

from app.view.forms.base_form import BaseForm


[docs] class UploadStep5Form(BaseForm):
[docs] class ExperimentForm(BaseForm):
[docs] class Meta:
[docs] csrf = False
[docs] class BioreplicateForm(BaseForm):
[docs] class Meta:
[docs] csrf = False
[docs] name = StringField('name', validators=[DataRequired()])
[docs] position = StringField('position')
[docs] biosampleUrl = URLField('biosampleUrl')
[docs] isControl = BooleanField('isControl')
[docs] isBlank = BooleanField('isBlank')
[docs] class PerturbationForm(BaseForm):
[docs] class Meta:
[docs] csrf = False
[docs] startTimepoint = IntegerField('startTimepoint', validators=[DataRequired()])
[docs] description = TextAreaField('description', validators=[DataRequired()])
[docs] removedCompartmentName = SelectField('removedCompartmentName', choices=[], validate_choice=False)
[docs] addedCompartmentName = SelectField('addedCompartmentName', choices=[], validate_choice=False)
[docs] oldCommunityName = SelectField('oldCommunityName', choices=[], validate_choice=False)
[docs] newCommunityName = SelectField('newCommunityName', choices=[], validate_choice=False)
[docs] name = StringField('name', validators=[DataRequired()])
[docs] description = TextAreaField('description', validators=[DataRequired()])
[docs] timepointCount = IntegerField('timepointCount', validators=[DataRequired()])
[docs] cultivationMode = SelectField('cultivationMode', choices=[ ('batch', "Batch"), ('fed-batch', "Fed-batch"), ('chemostat', "Chemostat"), ('other', "Other"), ])
[docs] communityName = SelectField( 'communityName', validators=[DataRequired()], choices=[], validate_choice=False, )
[docs] compartmentNames = SelectMultipleField( 'compartmentNames', validators=[DataRequired()], choices=[], validate_choice=False, )
[docs] bioreplicates = FieldList(FormField(BioreplicateForm))
[docs] perturbations = FieldList(FormField(PerturbationForm))
[docs] def validate_bioreplicates(self, field): names = [b['name'] for b in field.data] self._validate_uniqueness("names are not unique", names) if len(names) == 0: raise ValidationError("at least one is required")
[docs] timeUnits = SelectField('timeUnits', choices=[ ('h', 'Hours (h)'), ('m', 'Minutes (m)'), ('s', 'Seconds (s)'), ])
[docs] experiments = FieldList(FormField(ExperimentForm))
[docs] def validate_experiments(self, field): # Local validation: names = [e['name'] for e in field.data] self._validate_uniqueness("names are not unique", names) # Global bioreplicate validation: names = [ bioreplicate['name'] for experiment in field.data for bioreplicate in experiment['bioreplicates'] ] self._validate_uniqueness("bioreplicate names are not globally unique", names)