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>') })
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>') })
class CavaticaTaskSchema(BaseSchema): cavatica_app_id = field_for(CavaticaTask, 'cavatica_app_id', load_only=True, required=False, example='CA_ABB2C104') class Meta(BaseSchema.Meta): model = CavaticaTask resource_url = 'api.cavatica_tasks' collection_url = 'api.cavatica_tasks_list' exclude = (BaseSchema.Meta.exclude + ('cavatica_app', ) + ('cavatica_task_genomic_files', )) _links = ma.Hyperlinks({ 'self': ma.URLFor(Meta.resource_url, kf_id='<kf_id>'), 'collection': ma.URLFor(Meta.collection_url), 'cavatica_app': PatchedURLFor('api.cavatica_apps', kf_id='<cavatica_app_id>'), 'cavatica_task_genomic_files': ma.URLFor('api.cavatica_task_genomic_files_list', cavatica_task_id='<kf_id>') })
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>') })
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>') })
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>') })
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>') })
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>') })
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>') })
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')
class InvestigatorSchema(BaseSchema): class Meta(BaseSchema.Meta): model = Investigator resource_url = 'api.investigators' collection_url = 'api.investigators_list' exclude = BaseSchema.Meta.exclude + ('studies', ) _links = ma.Hyperlinks({ 'self': ma.URLFor(Meta.resource_url, kf_id='<kf_id>'), 'collection': ma.URLFor(Meta.collection_url), 'studies': ma.URLFor('api.studies_list', investigator_id='<kf_id>') })
class CavaticaAppSchema(BaseSchema): revision = field_for(CavaticaApp, 'revision', validate=validate_positive_number) github_commit_url = field_for(CavaticaApp, 'github_commit_url', validate=URL()) class Meta(BaseSchema.Meta): model = CavaticaApp resource_url = 'api.cavatica_apps' collection_url = 'api.cavatica_apps_list' exclude = BaseSchema.Meta.exclude + ('tasks', ) _links = ma.Hyperlinks({ 'self': ma.URLFor(Meta.resource_url, kf_id='<kf_id>'), 'collection': ma.URLFor(Meta.collection_url), 'tasks': ma.URLFor('api.tasks_list', cavatica_app_id='<kf_id>') })
class FamilySchema(BaseSchema): family_type = field_for( Family, 'family_type', validate=enum_validation_generator(FAMILY_TYPE_ENUM)) class Meta(BaseSchema.Meta): model = Family resource_url = 'api.families' collection_url = 'api.families_list' exclude = BaseSchema.Meta.exclude + ('participants', ) _links = ma.Hyperlinks({ 'self': ma.URLFor(Meta.resource_url, kf_id='<kf_id>'), 'collection': ma.URLFor(Meta.collection_url), 'participants': ma.URLFor('api.participants_list', family_id='<kf_id>') })
class PhenotypeSchema(BaseSchema): participant_id = field_for(Phenotype, 'participant_id', required=True, load_only=True, example='PT_DZB048J5') age_at_event_days = field_for(Phenotype, 'age_at_event_days', validate=validate_age, example=232) observed = field_for(Phenotype, 'observed', validate=enum_validation_generator( OBSERVED_ENUM)) class Meta(BaseSchema.Meta): model = Phenotype resource_url = 'api.phenotypes' collection_url = 'api.phenotypes_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>') })
class ReadGroupGenomicFileSchema(BaseSchema): read_group_id = field_for(ReadGroupGenomicFile, 'read_group_id', required=True, load_only=True, example='RF_ABB2C104') genomic_file_id = field_for(ReadGroupGenomicFile, 'genomic_file_id', required=True, load_only=True, example='GF_ABB2C104') class Meta(BaseSchema.Meta): model = ReadGroupGenomicFile resource_url = 'api.read_group_genomic_files' collection_url = 'api.read_group_genomic_files_list' exclude = BaseSchema.Meta.exclude + ('read_group', 'genomic_file') _links = ma.Hyperlinks({ 'self': ma.URLFor(Meta.resource_url, kf_id='<kf_id>'), 'collection': ma.URLFor(Meta.collection_url), 'read_group': ma.URLFor('api.read_groups', kf_id='<read_group_id>'), 'genomic_file': ma.URLFor('api.genomic_files', kf_id='<genomic_file_id>') })
class SequencingCenterSchema(BaseSchema): class Meta(BaseSchema.Meta): resource_url = 'api.sequencing_centers' collection_url = 'api.sequencing_centers_list' model = SequencingCenter exclude = BaseSchema.Meta.exclude + ( 'biospecimens', 'sequencing_experiments', ) _links = ma.Hyperlinks( { 'self': ma.URLFor(Meta.resource_url, kf_id='<kf_id>'), 'collection': ma.URLFor(Meta.collection_url), 'biospecimens': ma.URLFor('api.biospecimens_list', sequencing_center_id='<kf_id>'), 'sequencing_experiments': ma.URLFor('api.sequencing_experiments_list', sequencing_center_id='<kf_id>') }, description='Resource links and pagination')
class ReadGroupSchema(BaseSchema): lane_number = field_for(ReadGroup, 'lane_number', validate=validate_positive_number) quality_scale = field_for(ReadGroup, 'quality_scale', validate=enum_validation_generator( QUALITY_SCALE_ENUM, common=True)) class Meta(BaseSchema.Meta): resource_url = 'api.read_groups' collection_url = 'api.read_groups_list' model = ReadGroup exclude = BaseSchema.Meta.exclude _links = ma.Hyperlinks({ 'self': ma.URLFor(Meta.resource_url, kf_id='<kf_id>'), 'collection': ma.URLFor(Meta.collection_url), 'read_group_genomic_files': ma.URLFor( 'api.read_group_genomic_files_list', read_group_id='<kf_id>'), 'genomic_files': ma.URLFor('api.genomic_files_list', read_group_id='<kf_id>') }, description='Resource links and pagination')
class StudySchema(BaseSchema): investigator_id = field_for(Study, 'investigator_id', required=False, load_only=True, example='IG_ABB2C104') release_status = field_for(Study, 'release_status', validate=enum_validation_generator( RELEASE_STATUS_ENUM)) class Meta(BaseSchema.Meta): model = Study resource_url = 'api.studies' collection_url = 'api.studies_list' exclude = BaseSchema.Meta.exclude + ('participants', 'study_files') _links = ma.Hyperlinks({ 'self': ma.URLFor(Meta.resource_url, kf_id='<kf_id>'), 'collection': ma.URLFor(Meta.collection_url), 'investigator': PatchedURLFor('api.investigators', kf_id='<investigator_id>'), 'participants': ma.URLFor('api.participants_list', study_id='<kf_id>'), 'study_files': ma.URLFor('api.study_files_list', study_id='<kf_id>') })
class ParticipantSchema(BaseSchema): study_id = field_for(Participant, 'study_id', required=True, load_only=True) family_id = field_for(Participant, 'family_id', load_only=True, required=False, example='FM_ABB2C104') gender = field_for(Participant, 'gender', validate=enum_validation_generator( GENDER_ENUM)) ethnicity = field_for(Participant, 'ethnicity', validate=enum_validation_generator( ETHNICITY_ENUM)) race = field_for(Participant, 'race', validate=enum_validation_generator( RACE_ENUM)) diagnosis_category = field_for(Participant, 'diagnosis_category', validate=enum_validation_generator( DIAGNOSIS_CATEGORY_ENUM)) species = field_for(Participant, 'species', validate=enum_validation_generator( SPECIES_ENUM)) class Meta(BaseSchema.Meta): model = Participant resource_url = 'api.participants' collection_url = 'api.participants_list' exclude = (BaseSchema.Meta.exclude + ('study', 'family') + ('diagnoses', 'phenotypes', 'outcomes', 'biospecimens')) _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>'), 'family': PatchedURLFor('api.families', kf_id='<family_id>'), 'diagnoses': ma.URLFor('api.diagnoses_list', participant_id='<kf_id>'), 'phenotypes': ma.URLFor('api.phenotypes_list', participant_id='<kf_id>'), 'outcomes': ma.URLFor('api.outcomes_list', participant_id='<kf_id>'), 'biospecimens': ma.URLFor('api.biospecimens_list', participant_id='<kf_id>'), 'family_relationships': ma.URLFor('api.family_relationships_list', participant_id='<kf_id>') })
class SequencingExperimentSchema(BaseSchema): sequencing_center_id = field_for(SequencingExperiment, 'sequencing_center_id', required=True, load_only=True) experiment_strategy = field_for( SequencingExperiment, 'experiment_strategy', validate=enum_validation_generator(EXPERIMENT_STRATEGY_ENUM)) platform = field_for(SequencingExperiment, 'platform', validate=enum_validation_generator(PLATFORM_ENUM)) library_strand = field_for( SequencingExperiment, 'library_strand', validate=enum_validation_generator(LIBRARY_STRAND_ENUM)) library_selection = field_for( SequencingExperiment, 'library_selection', validate=enum_validation_generator(LIBRARY_SELECTION_ENUM)) library_prep = field_for( SequencingExperiment, 'library_prep', validate=enum_validation_generator(LIBRARY_PREP_ENUM)) class Meta(BaseSchema.Meta): resource_url = 'api.sequencing_experiments' collection_url = 'api.sequencing_experiments_list' model = SequencingExperiment exclude = (BaseSchema.Meta.exclude + ('sequencing_center', ) + ('genomic_files', )) max_insert_size = field_for(SequencingExperiment, 'max_insert_size', validate=validate_positive_number) mean_insert_size = field_for(SequencingExperiment, 'mean_insert_size', validate=validate_positive_number) mean_depth = field_for(SequencingExperiment, 'mean_depth', validate=validate_positive_number) total_reads = field_for(SequencingExperiment, 'total_reads', validate=validate_positive_number) mean_read_length = field_for(SequencingExperiment, 'mean_read_length', validate=validate_positive_number) experiment_date = field_for(SequencingExperiment, 'experiment_date', field_class=DateOrDatetime) _links = ma.Hyperlinks( { 'self': ma.URLFor(Meta.resource_url, kf_id='<kf_id>'), 'collection': ma.URLFor(Meta.collection_url), 'sequencing_center': ma.URLFor('api.sequencing_centers', kf_id='<sequencing_center_id>'), 'sequencing_experiment_genomic_files': ma.URLFor('api.sequencing_experiment_genomic_files_list', sequencing_experiment_id='<kf_id>'), 'genomic_files': ma.URLFor('api.genomic_files_list', sequencing_experiment_id='<kf_id>') }, description='Resource links and pagination')
class BiospecimenSchema(BaseSchema): participant_id = field_for(Biospecimen, 'participant_id', required=True, load_only=True) sequencing_center_id = field_for(Biospecimen, 'sequencing_center_id', required=True, load_only=True) age_at_event_days = field_for(Biospecimen, 'age_at_event_days', validate=validate_age) concentration_mg_per_ml = field_for(Biospecimen, 'concentration_mg_per_ml', validate=validate_positive_number) volume_ul = field_for(Biospecimen, 'volume_ul', validate=validate_positive_number) shipment_date = field_for(Biospecimen, 'shipment_date', field_class=DateOrDatetime) analyte_type = field_for( Biospecimen, 'analyte_type', validate=enum_validation_generator(ANALYTE_TYPE_ENUM)) method_of_sample_procurement = field_for( Biospecimen, 'method_of_sample_procurement', validate=enum_validation_generator(SAMPLE_PROCUREMENT_ENUM)) duo_ids = field_for(Biospecimen, 'duo_ids', validate=list_validation_generator( DUO_ID_BIOSPECIMEN_ENUM, items_name='DUO IDs')) class Meta(BaseSchema.Meta): model = Biospecimen resource_url = 'api.biospecimens' collection_url = 'api.biospecimens_list' exclude = (BaseSchema.Meta.exclude + ('participant', 'sequencing_center') + ('biospecimen_genomic_files', 'biospecimen_diagnoses')) _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>'), 'sequencing_center': ma.URLFor('api.sequencing_centers', kf_id='<sequencing_center_id>'), 'biospecimen_genomic_files': ma.URLFor('api.biospecimen_genomic_files_list', biospecimen_id='<kf_id>'), 'biospecimen_diagnoses': ma.URLFor('api.biospecimen_diagnoses_list', biospecimen_id='<kf_id>'), 'diagnoses': ma.URLFor('api.diagnoses_list', biospecimen_id='<kf_id>'), 'genomic_files': ma.URLFor('api.genomic_files_list', biospecimen_id='<kf_id>') })