コード例 #1
0
    def get(self, filter_params, after, limit):
        """
        Get all sequencing_centers
        ---
        description: Get all sequencing_centers
        template:
          path:
            get_list.yml
          properties:
            resource:
              SequencingCenter
        """
        # Get study id and remove from model filter params
        study_id = filter_params.pop('study_id', None)

        q = (SequencingCenter.query.filter_by(**filter_params))
        # Filter by study
        from dataservice.api.participant.models import Participant
        from dataservice.api.biospecimen.models import Biospecimen
        if study_id:
            q = (q.join(SequencingCenter.biospecimens).join(
                Biospecimen.participant).filter(
                    Participant.study_id == study_id))

        return (SequencingCenterSchema(many=True).jsonify(
            Pagination(q, after, limit)))
コード例 #2
0
    def get(self, filter_params, after, limit):
        """
        Get a paginated biospecimen_genomic_files
        ---
        template:
          path:
            get_list.yml
          properties:
            resource:
              BiospecimenGenomicFile
        """
        # Get study id and remove from model filter params
        study_id = filter_params.pop('study_id', None)

        q = BiospecimenGenomicFile.query.filter_by(**filter_params)

        # Filter by study
        from dataservice.api.participant.models import Participant
        from dataservice.api.biospecimen.models import Biospecimen

        if study_id:
            q = (q.join(BiospecimenGenomicFile.biospecimen).join(
                Biospecimen.participant).filter(
                    Participant.study_id == study_id))

        return (BiospecimenGenomicFileSchema(many=True).jsonify(
            Pagination(q, after, limit)))
コード例 #3
0
    def get(self, filter_params, after, limit):
        """
        Get all phenotypes
        ---
        description: Get all phenotypes
        template:
          path:
            get_list.yml
          properties:
            resource:
              Phenotype
        """
        # Get study id and remove from model filter params
        study_id = filter_params.pop('study_id', None)

        q = Phenotype.query.filter_by(**filter_params)

        # Filter by study
        from dataservice.api.participant.models import Participant
        if study_id:
            q = (q.join(Participant.phenotypes).filter(
                Participant.study_id == study_id))

        return (PhenotypeSchema(many=True).jsonify(Pagination(q, after,
                                                              limit)))
コード例 #4
0
    def get(self, filter_params, after, limit):
        """
        Get all family_relationships
        ---
        description: Get all family_relationships
        template:
          path:
            get_list.yml
          properties:
            resource:
              FamilyRelationship
        """
        # Get and remove special filter parameters - those which are not
        # part of model properties
        # Study id
        study_id = filter_params.pop('study_id', None)
        # Participant id
        participant_id = filter_params.pop('participant_id', None)

        # Get family relationships joined w participants
        q = FamilyRelationship.query_all_relationships(
            participant_kf_id=participant_id,
            model_filter_params=filter_params)

        # Filter by study
        if study_id:
            from dataservice.api.participant.models import Participant
            q = (q.filter(Participant.study_id == study_id))

        return (FamilyRelationshipSchema(many=True)
                .jsonify(Pagination(q, after, limit)))
コード例 #5
0
    def get(self, filter_params, after, limit):
        """
        Get all sequencing_experiments
        ---
        description: Get all sequencing_experiments
        template:
          path:
            get_list.yml
          properties:
            resource:
              SequencingExperiment
        """
        # Get study id and remove from model filter params
        study_id = filter_params.pop('study_id', None)

        q = (SequencingExperiment.query.filter_by(**filter_params))

        # Filter by study
        from dataservice.api.participant.models import Participant
        from dataservice.api.biospecimen.models import Biospecimen
        from dataservice.api.genomic_file.models import GenomicFile
        from dataservice.api.biospecimen_genomic_file.models import (
            BiospecimenGenomicFile)

        if study_id:
            q = (q.join(SequencingExperiment.genomic_files).join(
                GenomicFile.biospecimen_genomic_files).join(
                    BiospecimenGenomicFile.biospecimen).join(
                        Biospecimen.participant).filter(
                            Participant.study_id == study_id).group_by(
                                SequencingExperiment.kf_id))

        return (SequencingExperimentSchema(many=True).jsonify(
            Pagination(q, after, limit)))
コード例 #6
0
    def get(self, filter_params, after, limit):
        """
        Get all biospecimens
        ---
        description: Get all biospecimens
        template:
          path:
            get_list.yml
          properties:
            resource:
              Biospecimen
        """
        # Get study id, diagnosis_id and remove from model filter params
        study_id = filter_params.pop('study_id', None)
        diagnosis_id = filter_params.pop('diagnosis_id', None)

        # Apply filter params
        q = (Biospecimen.query
             .filter_by(**filter_params))

        # Apply study_id filter and diagnosis_id filter
        from dataservice.api.participant.models import Participant

        if study_id:
            q = (q.join(Participant.biospecimens)
                 .filter(Participant.study_id == study_id))
        if diagnosis_id:
            q = (q.join(BiospecimenDiagnosis)
                 .filter(BiospecimenDiagnosis.diagnosis_id == diagnosis_id))

        return (BiospecimenSchema(many=True)
                .jsonify(Pagination(q, after, limit)))
コード例 #7
0
    def get(self, filter_params, after, limit):
        """
        Get a paginated participants
        ---
        template:
          path:
            get_list.yml
          properties:
            resource:
              Participant
        """
        # Apply entity filter params
        q = (Participant.query.filter_by(**filter_params))

        return (ParticipantSchema(many=True).jsonify(
            Pagination(q, after, limit)))
コード例 #8
0
    def get(self, filter_params, after, limit):
        """
        Get all biospecimens
        ---
        description: Get all biospecimens
        template:
          path:
            get_list.yml
          properties:
            resource:
              Biospecimen
        """
        # Get and remove special filter params that are not attributes of model
        study_id = filter_params.pop('study_id', None)
        diagnosis_id = filter_params.pop('diagnosis_id', None)
        genomic_file_id = filter_params.pop('genomic_file_id', None)

        # Get and remove any list type filter params that need to be
        # handled differently than others
        duo_ids = filter_params.pop('duo_ids', None)

        # Apply filter params
        q = (Biospecimen.query.filter_by(**filter_params))

        # Apply duo_ids filter
        # Get specimens whose duo ids list includes all values in duo_ids
        if duo_ids:
            duo_ids = [id_.strip() for id_ in duo_ids[0].split(',')]
            q = q.filter(Biospecimen.duo_ids.contains(duo_ids))

        # Apply study_id filter and diagnosis_id filter
        from dataservice.api.participant.models import Participant

        if study_id:
            q = (q.join(Participant.biospecimens).filter(
                Participant.study_id == study_id))
        if diagnosis_id:
            q = (q.join(BiospecimenDiagnosis).filter(
                BiospecimenDiagnosis.diagnosis_id == diagnosis_id))
        if genomic_file_id:
            q = (q.join(BiospecimenGenomicFile).filter(
                BiospecimenGenomicFile.genomic_file_id == genomic_file_id))

        return (BiospecimenSchema(many=True).jsonify(
            Pagination(q, after, limit)))
コード例 #9
0
    def get(self, filter_params, after, limit):
        """
        Get all read_groups
        ---
        description: Get all read_groups
        template:
          path:
            get_list.yml
          properties:
            resource:
              ReadGroup
        """
        # Get study id and remove from model filter params
        study_id = filter_params.pop('study_id', None)

        # Get genomic file id and remove from model filter params
        genomic_file_id = filter_params.pop('genomic_file_id', None)

        # Apply model filter params
        q = ReadGroup.query.filter_by(**filter_params)

        # Filter by study
        from dataservice.api.participant.models import Participant
        from dataservice.api.biospecimen.models import Biospecimen
        from dataservice.api.genomic_file.models import GenomicFile
        from dataservice.api.biospecimen_genomic_file.models import (
            BiospecimenGenomicFile)
        if study_id:
            q = (q.join(ReadGroup.read_group_genomic_files).join(
                ReadGroupGenomicFile.genomic_file).join(
                    GenomicFile.biospecimen_genomic_files).join(
                        BiospecimenGenomicFile.biospecimen).join(
                            Biospecimen.participant).filter(
                                Participant.study_id == study_id).group_by(
                                    ReadGroup.kf_id))

        # Filter by genomic_file_id
        if genomic_file_id:
            q = (q.join(
                ReadGroupGenomicFile,
                ReadGroup.kf_id == ReadGroupGenomicFile.read_group_id).filter(
                    ReadGroupGenomicFile.genomic_file_id == genomic_file_id))

        return (ReadGroupSchema(many=True).jsonify(Pagination(q, after,
                                                              limit)))
コード例 #10
0
    def get(self, filter_params, after, limit):
        """
        Get a paginated studies
        ---
        template:
          path:
            get_list.yml
          properties:
            resource:
              Study
        """
        filter_params.pop('study_id', None)

        q = (Study.query
             .filter_by(**filter_params))

        return (StudySchema(many=True)
                .jsonify(Pagination(q, after, limit)))
コード例 #11
0
    def get(self, filter_params, after, limit):
        """
        Get a paginated cavatica_apps
        ---
        template:
          path:
            get_list.yml
          properties:
            resource:
              CavaticaApp
        """
        # Get study id and remove from model filter params
        study_id = filter_params.pop('study_id', None)

        q = (CavaticaApp.query.filter_by(**filter_params))

        # Filter by study
        from dataservice.api.participant.models import Participant
        from dataservice.api.biospecimen.models import Biospecimen
        from dataservice.api.genomic_file.models import GenomicFile
        from dataservice.api.cavatica_task.models import (
            CavaticaTask,
            CavaticaTaskGenomicFile
        )
        from dataservice.api.biospecimen_genomic_file.models import (
            BiospecimenGenomicFile
        )

        if study_id:
            q = (q.join(CavaticaApp.cavatica_tasks)
                 .join(CavaticaTask.cavatica_task_genomic_files)
                 .join(CavaticaTaskGenomicFile.genomic_file)
                 .join(GenomicFile.biospecimen_genomic_files)
                 .join(BiospecimenGenomicFile.biospecimen)
                 .join(Biospecimen.participant)
                 .filter(Participant.study_id == study_id)
                 .group_by(CavaticaApp.kf_id))

        return (CavaticaAppSchema(many=True)
                .jsonify(Pagination(q, after, limit)))
コード例 #12
0
    def get(self, filter_params, after, limit):
        """
        Get a paginated investigators
        ---
        template:
          path:
            get_list.yml
          properties:
            resource:
              Investigator
        """
        # Get study id and remove from model filter params
        study_id = filter_params.pop('study_id', None)

        q = (Investigator.query.filter_by(**filter_params))

        # Filter by study
        from dataservice.api.study.models import Study
        if study_id:
            q = (q.join(Investigator.studies).filter(Study.kf_id == study_id))

        return (InvestigatorSchema(many=True).jsonify(
            Pagination(q, after, limit)))
コード例 #13
0
    def get(self, filter_params, after, limit):
        """
        Get a paginated familys
        ---
        template:
          path:
            get_list.yml
          properties:
            resource:
              Family
        """
        # Get study id and remove from model filter params
        study_id = filter_params.pop('study_id', None)

        q = (Family.query.filter_by(**filter_params))

        # Filter by study
        from dataservice.api.participant.models import Participant
        if study_id:
            q = (q.join(Family.participants).filter(
                Participant.study_id == study_id).group_by(Family.kf_id))

        return (FamilySchema(many=True).jsonify(Pagination(q, after, limit)))
コード例 #14
0
    def get(self, filter_params, after, limit):
        """
        Get all diagnoses
        ---
        description: Get all diagnoses
        template:
          path:
            get_list.yml
          properties:
            resource:
              Diagnosis
        """
        # Get study id and remove from model filter params
        study_id = filter_params.pop('study_id', None)

        # Get biospecimen_id and remove from model filter params
        biospecimen_id = filter_params.pop('biospecimen_id', None)

        # Apply entity filter params
        q = Diagnosis.query.filter_by(**filter_params)

        # Apply study_id filter and biospecimen_id filter
        from dataservice.api.participant.models import Participant
        from dataservice.api.biospecimen.models import BiospecimenDiagnosis

        if study_id:
            q = (q.join(Participant.diagnoses)
                 .filter(Participant.study_id == study_id))

        if biospecimen_id:
            q = (q.join(BiospecimenDiagnosis)
                 .filter(
                 BiospecimenDiagnosis.biospecimen_id == biospecimen_id))

        return (DiagnosisSchema(many=True)
                .jsonify(Pagination(q, after, limit)))