Exemplo n.º 1
0
class ClubSchema(ma.ModelSchema):
    id = field_for(Club, 'id', dump_only=True)
    name = field_for(Club, 'name', dump_only=True)
    tag = ma.Nested(TagSchema, many=True)
    city = ma.Nested(CitySchema, many=True)
    total = fields.Method('get_contacts_len')

    def get_contacts_len(self, obj):
        # base_city = Contact.query.join(City, Contact.city)
        # base_tag = Contact.query.join(Tag, Contact.tag_contact)

        # base = base_city.union(base_tag)
        if (len(obj.tag) == 0 and len(obj.city) != 0):
            total = len([t for x in obj.city for t in x.city_contact])

        elif (len(obj.city) == 0 and len(obj.tag) != 0):
            total = len([c for x in obj.tag for c in x.contact])

        elif (len(obj.city) != 0 and len(obj.tag) != 0):

            total_city = [t for x in obj.city for t in x.city_contact]
            total_tag = [c for x in obj.tag for c in x.contact]
            total = len(set(total_city) & set(total_tag))
        else:
            total = 0
        return {'contact': len(obj.contact), 'tag': total}

    class meta:
        model = Club
Exemplo n.º 2
0
class ProcessFlowSchema(ma.ModelSchema):
    id = field_for(ProcessFlow, 'id', dump_only=True)
    name = field_for(ProcessFlow, 'name', dump_only=True)
    task_items = ma.Nested(TaskItemSchema , many=True)
    
    class meta:
        model = ProcessFlow
Exemplo n.º 3
0
class BiospecimenDiagnosisSchema(BaseSchema):

    biospecimen_id = field_for(BiospecimenDiagnosis,
                               'biospecimen_id',
                               required=True,
                               load_only=True,
                               example='BS_ABC2C104')
    diagnosis_id = field_for(BiospecimenDiagnosis,
                             'diagnosis_id',
                             required=True,
                             load_only=True,
                             example='GF_ABB2C104')

    class Meta(BaseSchema.Meta):
        model = BiospecimenDiagnosis
        resource_url = 'api.biospecimen_diagnoses'
        collection_url = 'api.biospecimen_diagnoses_list'
        exclude = BaseSchema.Meta.exclude + ('biospecimen', 'diagnosis')

    _links = ma.Hyperlinks({
        'self':
        ma.URLFor(Meta.resource_url, kf_id='<kf_id>'),
        'collection':
        ma.URLFor(Meta.collection_url),
        'biospecimen':
        ma.URLFor('api.biospecimens', kf_id='<biospecimen_id>'),
        'diagnosis':
        ma.URLFor('api.diagnoses', kf_id='<diagnosis_id>')
    })
Exemplo n.º 4
0
class ParameterSchema(ExecutionElementBaseSchema):
    """The schema for arguments.

    This class handles constructing the argument specially so that either a reference or a value is always non-null,
    but never both.
    """
    name = field_for(Parameter, 'name', required=True)
    value = fields.Raw()
    reference = field_for(Parameter, 'reference', required=False)
    variant = field_for(Parameter, 'variant', required=False)

    class Meta:
        model = Parameter
        unknown = EXCLUDE

    @validates_schema
    def validate_argument(self, data):
        has_value = 'value' in data
        has_reference = 'reference' in data and bool(data['reference'])
        if (not has_value and not has_reference) or (has_value
                                                     and has_reference):
            raise ValidationError(
                'Parameters must have either a value or a reference.',
                ['value'])

    @post_load
    def make_instance(self, data):
        instance = self.instance or self.get_instance(data)
        if instance is not None:
            for key, value in data.items():
                setattr(instance, key, value)
            return instance
        return self.opts.model(**data)
Exemplo n.º 5
0
class BiospecimenGenomicFileSchema(BaseSchema):

    biospecimen_id = field_for(BiospecimenGenomicFile,
                               'biospecimen_id',
                               required=True,
                               load_only=True,
                               example='BS_ABC2C104')
    genomic_file_id = field_for(BiospecimenGenomicFile,
                                'genomic_file_id',
                                required=True,
                                load_only=True,
                                example='GF_ABB2C104')

    class Meta(BaseSchema.Meta):
        model = BiospecimenGenomicFile
        resource_url = 'api.biospecimen_genomic_files'
        collection_url = 'api.biospecimen_genomic_files_list'
        exclude = BaseSchema.Meta.exclude + ('biospecimen', 'genomic_file')

    _links = ma.Hyperlinks({
        'self':
        ma.URLFor(Meta.resource_url, kf_id='<kf_id>'),
        'collection':
        ma.URLFor(Meta.collection_url),
        'biospecimen':
        ma.URLFor('api.biospecimens', kf_id='<biospecimen_id>'),
        'genomic_file':
        ma.URLFor('api.genomic_files', kf_id='<genomic_file_id>')
    })
Exemplo n.º 6
0
class SequencingExperimentGenomicFileSchema(BaseSchema):

    sequencing_experiment_id = field_for(SequencingExperimentGenomicFile,
                                         'sequencing_experiment_id',
                                         required=True,
                                         load_only=True,
                                         example='SE_ABB2C104')
    genomic_file_id = field_for(SequencingExperimentGenomicFile,
                                'genomic_file_id',
                                required=True,
                                load_only=True,
                                example='GF_ABB2C104')

    class Meta(BaseSchema.Meta):
        model = SequencingExperimentGenomicFile
        resource_url = 'api.sequencing_experiment_genomic_files'
        collection_url = 'api.sequencing_experiment_genomic_files_list'
        exclude = BaseSchema.Meta.exclude + ('sequencing_experiment',
                                             'genomic_file')

    _links = ma.Hyperlinks({
        'self':
        ma.URLFor(Meta.resource_url, kf_id='<kf_id>'),
        'collection':
        ma.URLFor(Meta.collection_url),
        'sequencing_experiment':
        ma.URLFor('api.sequencing_experiments',
                  kf_id='<sequencing_experiment_id>'),
        'genomic_file':
        ma.URLFor('api.genomic_files', kf_id='<genomic_file_id>')
    })
Exemplo n.º 7
0
class FamilyRelationshipSchema(BaseSchema):
    participant1_id = field_for(FamilyRelationship,
                                'participant1_id',
                                required=True,
                                load_only=True,
                                example='PT_B048J5')
    participant2_id = field_for(FamilyRelationship,
                                'participant2_id',
                                required=True,
                                load_only=True,
                                example='PT_B048J6')

    class Meta(BaseSchema.Meta):
        model = FamilyRelationship
        resource_url = 'api.family_relationships'
        collection_url = 'api.family_relationships_list'
        exclude = BaseSchema.Meta.exclude + ('participant2', 'participant1')

    _links = ma.Hyperlinks({
        'self':
        ma.URLFor(Meta.resource_url, kf_id='<kf_id>'),
        'collection':
        ma.URLFor(Meta.collection_url),
        'participant1':
        ma.URLFor('api.participants', kf_id='<participant1_id>'),
        'participant2':
        ma.URLFor('api.participants', kf_id='<participant2_id>')
    })
Exemplo n.º 8
0
class DiagnosisSchema(BaseSchema):
    participant_id = field_for(Diagnosis,
                               'participant_id',
                               required=True,
                               load_only=True,
                               example='PT_DZB048J5')
    age_at_event_days = field_for(Diagnosis,
                                  'age_at_event_days',
                                  validate=validate_age,
                                  example=232)
    diagnosis_category = field_for(
        Diagnosis,
        'diagnosis_category',
        validate=enum_validation_generator(DIAGNOSIS_CATEGORY_ENUM))

    class Meta(BaseSchema.Meta):
        model = Diagnosis
        resource_url = 'api.diagnoses'
        collection_url = 'api.diagnoses_list'

    _links = ma.Hyperlinks({
        'self':
        ma.URLFor(Meta.resource_url, kf_id='<kf_id>'),
        'collection':
        ma.URLFor(Meta.collection_url),
        'participant':
        ma.URLFor('api.participants', kf_id='<participant_id>'),
        'biospecimen_diagnoses':
        ma.URLFor('api.biospecimen_diagnoses_list', diagnosis_id='<kf_id>'),
        'biospecimens':
        ma.URLFor('api.biospecimens_list', diagnosis_id='<kf_id>')
    })
Exemplo n.º 9
0
class FormSubmissionSchema(ModelSchema):
    class Meta:
        model = FormSubmission

    id = field_for(FormSubmission, 'id', dump_only=True)
    created_at = field_for(FormSubmission, 'created_at', dump_only=True)
    updated_at = field_for(FormSubmission, 'updated_at', dump_only=True)
Exemplo n.º 10
0
class OutcomeSchema(BaseSchema):

    participant_id = field_for(Outcome,
                               'participant_id',
                               required=True,
                               load_only=True,
                               example='PT_DZB048J5')
    age_at_event_days = field_for(Outcome,
                                  'age_at_event_days',
                                  validate=validate_age,
                                  example=232)
    vital_status = field_for(
        Outcome,
        'vital_status',
        validate=enum_validation_generator(VITAL_STATUS_ENUM))

    disease_related = field_for(
        Outcome,
        'disease_related',
        validate=enum_validation_generator(DISEASE_RELATED_ENUM))

    class Meta(BaseSchema.Meta):
        model = Outcome
        resource_url = 'api.outcomes'
        collection_url = 'api.outcomes_list'

    _links = ma.Hyperlinks({
        'self':
        ma.URLFor(Meta.resource_url, kf_id='<kf_id>'),
        'collection':
        ma.URLFor(Meta.collection_url),
        'participant':
        ma.URLFor('api.participants', kf_id='<participant_id>')
    })
Exemplo n.º 11
0
class JobSchema(ma.ModelSchema):
    id = field_for(Scrape, 'id', dump_only=True)
    status = field_for(Job, 'status', dump_only=True)
    timestamp = field_for(Job, 'timestamp', dump_only=True)
    meta = field_for(Job, 'meta', dump_only=True)
    club = ma.Nested(ClubSchema, many=True)
    template = ma.Nested(TemplateSchema, many=True)
Exemplo n.º 12
0
class JobSchema(BaseSchema):
    created_by_user = fields.Nested(UserSchema,
                                    attribute="created_by",
                                    dump_to="created_by",
                                    only=["id", "name"],
                                    dump_only=True)
    created_by = field_for(models.Job,
                           'created_by',
                           required=True,
                           load_only=True)

    job_status = field_for(models.JobStatus, 'name', required=False)

    scheduled_for = fields.DateTime()
    service_name = fields.Nested(ServiceSchema,
                                 attribute="service",
                                 dump_to="service_name",
                                 only=["name"],
                                 dump_only=True)

    @validates('scheduled_for')
    def validate_scheduled_for(self, value):
        _validate_datetime_not_in_past(value)
        _validate_datetime_not_more_than_96_hours_in_future(value)

    class Meta:
        model = models.Job
        exclude = ('notifications', 'notifications_sent',
                   'notifications_delivered', 'notifications_failed')
        strict = True
Exemplo n.º 13
0
class StudyFileSchema(BaseSchema, IndexdFileSchema):
    availability = field_for(
        StudyFile,
        'availability',
        validate=enum_validation_generator(AVAILABILITY_ENUM))

    class Meta(BaseSchema.Meta):
        model = StudyFile
        resource_url = 'api.study_files'
        collection_url = 'api.study_files_list'

    study_id = field_for(StudyFile, 'study_id', required=True, load_only=True)

    latest_did = field_for(StudyFile,
                           'latest_did',
                           required=False,
                           dump_only=True)

    _links = ma.Hyperlinks({
        'self':
        ma.URLFor(Meta.resource_url, kf_id='<kf_id>'),
        'collection':
        ma.URLFor(Meta.collection_url),
        'study':
        ma.URLFor('api.studies', kf_id='<study_id>')
    })
Exemplo n.º 14
0
class CavaticaTaskGenomicFileSchema(BaseSchema):

    cavatica_task_id = field_for(CavaticaTaskGenomicFile,
                                 'cavatica_task_id',
                                 required=True,
                                 load_only=True,
                                 example='CT_ABB2C104')
    genomic_file_id = field_for(CavaticaTaskGenomicFile,
                                'genomic_file_id',
                                required=True,
                                load_only=True,
                                example='GF_ABB2C104')

    class Meta(BaseSchema.Meta):
        model = CavaticaTaskGenomicFile
        resource_url = 'api.cavatica_task_genomic_files'
        collection_url = 'api.cavatica_task_genomic_files_list'
        exclude = BaseSchema.Meta.exclude + ('cavatica_task', 'genomic_file')

    _links = ma.Hyperlinks({
        'self':
        ma.URLFor(Meta.resource_url, kf_id='<kf_id>'),
        'collection':
        ma.URLFor(Meta.collection_url),
        'cavatica_task':
        ma.URLFor('api.cavatica_tasks', kf_id='<cavatica_task_id>'),
        'genomic_file':
        ma.URLFor('api.genomic_files', kf_id='<genomic_file_id>')
    })
Exemplo n.º 15
0
class TermSchema(ma.ModelSchema):
    term = field_for(Term,
                     'term',
                     required=True,
                     validate=validate.Length(min=2, max=100))

    full_term = field_for(Term,
                          'full_term',
                          validate=validate.Length(min=2, max=100))

    # Flask-Marshmallow SQLAlchemy integration
    class Meta:
        model = Term

    translations = ma.Nested(
        TranslationSchema,
        many=True,
        exclude=('downvoters', 'upvoters'),
    )

    @pre_dump()
    def make_acronym(self, data):
        """ Convert acronyms to uppercase """
        if data and data.is_acronym:
            data.term = data.term.upper()
        return data
Exemplo n.º 16
0
class FormSchema(ModelSchema):
    class Meta:
        model = Form

    id = field_for(User, 'id', dump_only=True)
    created_at = field_for(Form, 'created_at', dump_only=True)
    updated_at = field_for(Form, 'updated_at', dump_only=True)
    def test_field_for_can_override_validators(self, models, session):
        field = field_for(models.Student, 'full_name', validate=[validate.Length(max=20)])
        assert len(field.validators) == 1
        assert field.validators[0].max == 20

        field = field_for(models.Student, 'full_name', validate=[])
        assert field.validators == []
Exemplo n.º 18
0
class ContactTagSerializer(ModelSchema):
    name = field_for(Tag, 'name')
    color = field_for(Tag, 'color')

    class Meta:
        model = ContactTag
        fields = ('name', 'color', 'note')
Exemplo n.º 19
0
class UserSchema(schemas.ModelSchema):
    email = fields.Email(
        required=True,
        validate=[validators.Length(min=3, max=255)],
    )
    password = field_for(
        models.User,
        'password',
        required=True,
        load_only=True,
    )
    created_at = field_for(models.User, 'created_at', dump_only=True)

    class Meta:
        model = models.User
        fields = (
            'id',
            'email',
            'first_name',
            'last_name',
            'username',
            'password',
            'created_at',
        )

    @validates('email')
    def validate_email(self, value, **kwargs):
        if models.User.query.filter_by(email=value).scalar():
            raise ValidationError('User with given email already exists')
Exemplo n.º 20
0
class UserSchema(schemas.ModelSchema):
    username = fields.String(
        required=True,
        validate=[validators.Length(min=3, max=255)],
    )
    password = field_for(
        models.User,
        'password',
        required=True,
        load_only=True,
    )
    created_at = field_for(models.User, 'created_at', dump_only=True)

    class Meta:
        model = models.User
        fields = (
            'id',
            'username',
            'password',
            'created_at',
            'is_child',
        )

    @validates('username')
    def validate_username(self, value, **kwargs):
        if models.User.query.filter_by(username=value).scalar():
            raise ValidationError('User with given username already exists')
Exemplo n.º 21
0
class UserSchema(ma.ModelSchema):
    class Meta:
        model = User

    username = field_for(
        User,
        'username',
        required=True,
        validate=validate.Length(min=3, max=25),
    )

    password = field_for(
        User,
        'password',
        required=True,
        validate=validate.Length(min=8, max=50),
        load_only=True,
    )

    email = field_for(
        User,
        'email',
        required=False,
        validate=(
            validate.Length(min=6, max=50),
            validate.Email(),
        ),
    )

    @post_load
    def encrypt_password(self, data):
        password = data['password']
        data['password'] = guard.encrypt_password(password)
        return data
Exemplo n.º 22
0
class GenomicFileSchema(BaseSchema, IndexdFileSchema):
    class Meta(BaseSchema.Meta, IndexdFileSchema.Meta):
        model = GenomicFile
        resource_url = 'api.genomic_files'
        collection_url = 'api.genomic_files_list'

        exclude = (BaseSchema.Meta.exclude + (
            'biospecimen',
            'sequencing_experiment',
        ) + (
            'task_genomic_files',
            'biospecimen_genomic_files',
        ) + ('sequencing_experiment_genomic_files',
             'read_group_genomic_files'))

    paired_end = field_for(GenomicFile,
                           'paired_end',
                           validate=enum_validation_generator(PAIRED_END_ENUM))

    data_type = field_for(GenomicFile,
                          'data_type',
                          validate=enum_validation_generator(DATA_TYPE_ENUM))
    availability = field_for(
        GenomicFile,
        'availability',
        validate=enum_validation_generator(AVAILABILITY_ENUM))

    latest_did = field_for(GenomicFile,
                           'latest_did',
                           required=False,
                           dump_only=True)

    _links = ma.Hyperlinks(
        {
            'self':
            ma.URLFor(Meta.resource_url, kf_id='<kf_id>'),
            'collection':
            ma.URLFor(Meta.collection_url),
            'task_genomic_files':
            ma.URLFor('api.task_genomic_files_list',
                      genomic_file_id='<kf_id>'),
            'biospecimen_genomic_files':
            ma.URLFor('api.biospecimen_genomic_files_list',
                      genomic_file_id='<kf_id>'),
            'read_group_genomic_files':
            ma.URLFor('api.read_group_genomic_files_list',
                      genomic_file_id='<kf_id>'),
            'sequencing_experiment_genomic_files':
            ma.URLFor('api.sequencing_experiment_genomic_files_list',
                      genomic_file_id='<kf_id>'),
            'read_groups':
            ma.URLFor('api.read_groups_list', genomic_file_id='<kf_id>'),
            'sequencing_experiments':
            ma.URLFor('api.sequencing_experiments_list',
                      genomic_file_id='<kf_id>'),
            'biospecimens':
            ma.URLFor('api.biospecimens_list', genomic_file_id='<kf_id>')
        },
        description='Resource links and pagination')
Exemplo n.º 23
0
class ProdOtherMaterialsItemSchema(ma.ModelSchema):
    id = field_for(ProdOtherMaterialsItem, 'id', dump_only=True)

    quantity = field_for(ProdOtherMaterialsItem, 'quantity', dump_only=True)
    other_mat = ma.Nested(OtherMaterialsSchema, many=True)

    class meta:
        model = ProdOtherMaterialsItem
Exemplo n.º 24
0
class ProdAccessoriesItemSchema(ma.ModelSchema):
    id = field_for(ProdAccessoriesItem, 'id', dump_only=True)

    quantity = field_for(ProdAccessoriesItem, 'quantity', dump_only=True)
    accessories_mat = ma.Nested(AccessoriesSchema, many=True)

    class meta:
        model = ProdAccessoriesItem
Exemplo n.º 25
0
class EmployeeBasicSchema(ma.SQLAlchemySchema ):
    id = field_for(Employee, 'id', dump_only=True)
    name = field_for(Employee, 'name', dump_only=True)
    company = ma.Nested(CompanySchema, many=True)
    basicpay = field_for(Employee, 'basicpay', dump_only=True)

    class meta:
        model = Employee
Exemplo n.º 26
0
class ProdRawItemSchema(ma.ModelSchema):
    id = field_for(ProdRawItem, 'id', dump_only=True)

    quantity = field_for(ProdRawItem, 'quantity', dump_only=True)
    raw_mat = ma.Nested(RawGoodsSchema, many=True)

    class meta:
        model = ProdRawItem
Exemplo n.º 27
0
class TriggerTargetSchema(ma.ModelSchema):
    class Meta:
        model = TriggerTarget

    id = field_for(TriggerTarget, 'id', dump_only=True)
    snsSubscription = field_for(TriggerTarget,
                                'snsSubscription',
                                dump_only=True)
Exemplo n.º 28
0
class RelativeSchema(ModelSchema):
    class Meta:
        model = Relative
        sqla_session = db.session

    left_id = field_for(Relative, "left_id", required=True)
    #left_import_id = db.Column(db.Integer, db.ForeignKey('citizen.import_id'), primary_key=True)
    right_id = field_for(Relative, "right_id", required=True)
Exemplo n.º 29
0
class ProdFinishedItemSchema(ma.ModelSchema):
    id = field_for(ProdFinishedItem, 'id', dump_only=True)

    quantity = field_for(ProdFinishedItem, 'quantity', dump_only=True)
    finished_mat = ma.Nested(FinishedGoodsSchema, many=True)

    class meta:
        model = ProdFinishedItem
Exemplo n.º 30
0
class CitySchema(ma.ModelSchema):
    id = field_for(City, 'id', dump_only=True)
    name = field_for(City, 'name', dump_only=True)
    state = field_for(City, 'state', dump_only=True)
    country = field_for(City, 'country', dump_only=True)

    class meta:
        model = City