def test_migrate_interpretation_request_rd(self):

        # tests with all nullable fields being filled
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.InterpretationRequestRD, VERSION_400, fill_nullables=True
        ).create()
        if old_instance.pedigree.members:
            for member in old_instance.pedigree.members:
                if member.disorderList:
                    for disorder in member.disorderList:
                        disorder.ageOfOnset = "1.5"
        self._validate(old_instance)
        self._check_non_empty_fields(old_instance)

        migrated_instance = MigrateReports400To500().migrate_interpretation_request_rd(
            old_instance=old_instance, assembly='GRCh38'
        )
        self._validate(migrated_instance)
        for other_file in migrated_instance.otherFiles.values():
            self.assertIsInstance(other_file, self.new_model.File)

        # test with all nullable fields being null
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.InterpretationRequestRD, VERSION_400, fill_nullables=False
        ).create()
        self._validate(old_instance)

        migrated_instance = MigrateReports400To500().migrate_interpretation_request_rd(
            old_instance=old_instance, assembly='GRCh38'
        )
        self._validate(migrated_instance)
        if migrated_instance.otherFiles is not None:
            for other_file in migrated_instance.otherFiles.values():
                self.assertIsInstance(other_file, self.new_model.File)
    def test_migrate_cancer_interpretation_request(self):
        """
        Test passing with ILMN-8308-1 cancer IR
        """
        # tests with all nullable fields being filled
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.CancerInterpretationRequest, VERSION_400, fill_nullables=True
        ).create()  # we need to enforce that it can be cast to int
        valid_cancer_origins = ['germline_variant', 'somatic_variant']
        for tiered_variant in old_instance.tieredVariants:
            if tiered_variant.alleleOrigins[0] not in valid_cancer_origins:
                tiered_variant.alleleOrigins[0] = random.choice(valid_cancer_origins)
        self._validate(old_instance)
        self._check_non_empty_fields(old_instance)
        migrated_instance = MigrateReports400To500().migrate_cancer_interpretation_request(
            old_instance=old_instance, assembly='GRCh38'
        )
        self._validate(migrated_instance)

        # test with all nullable fields being null
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.CancerInterpretationRequest, VERSION_400, fill_nullables=False
        ).create()  # we need to enforce that it can be cast to int
        for tiered_variant in old_instance.tieredVariants:
            if tiered_variant.alleleOrigins[0] not in valid_cancer_origins:
                tiered_variant.alleleOrigins[0] = random.choice(valid_cancer_origins)
        old_instance.cancerParticipant.LDPCode = "needs to be filled"
        self._validate(old_instance)
        migrated_instance = MigrateReports400To500().migrate_cancer_interpretation_request(
            old_instance=old_instance, assembly='GRCh38'
        )
        self._validate(migrated_instance)
    def test_migrate_cancer_interpretation_request(self):
        """
        Test passing with ILMN-8308-1 cancer IR
        """
        # tests with all nullable fields being filled
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.CancerInterpretationRequest,
            VERSION_400,
            fill_nullables=True).create(
            )  # we need to enforce that it can be cast to int
        self._validate(old_instance)
        self._check_non_empty_fields(old_instance)
        migrated_instance = MigrateReports400To500(
        ).migrate_cancer_interpretation_request(old_instance=old_instance,
                                                assembly='GRCh38')
        self._validate(migrated_instance)

        # test with all nullable fields being null
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.CancerInterpretationRequest,
            VERSION_400,
            fill_nullables=False).create(
            )  # we need to enforce that it can be cast to int
        old_instance.cancerParticipant.LDPCode = "needs to be filled"
        self._validate(old_instance)
        migrated_instance = MigrateReports400To500(
        ).migrate_cancer_interpretation_request(old_instance=old_instance,
                                                assembly='GRCh38')
        self._validate(migrated_instance)
    def test_migrate_cancer_clinical_report(self):

        # creates a random clinical report cancer for testing filling null values
        cr_c_400 = GenericFactoryAvro.get_factory_avro(
            self.old_model.ClinicalReportCancer, VERSION_400, fill_nullables=True
        ).create(interpretationRequestVersion='1')  # we need to enforce that it can be cast to int
        valid_cancer_origins = ['germline_variant', 'somatic_variant']
        if cr_c_400.candidateVariants:
            for candidate_variant in cr_c_400.candidateVariants:
                if candidate_variant.alleleOrigins[0] not in valid_cancer_origins:
                    candidate_variant.alleleOrigins[0] = random.choice(valid_cancer_origins)
        self._validate(cr_c_400)
        self._check_non_empty_fields(cr_c_400)

        assembly = 'grch38'
        participant_id = "no_one"
        sample_ids = {
            'germline_variant': 'germline1',
            'somatic_variant': 'somatic1'
        }
        migrated_cir_500 = MigrateReports400To500().migrate_cancer_clinical_report(
            cr_c_400, assembly=assembly, participant_id=participant_id, sample_ids=sample_ids
        )
        self._validate(migrated_cir_500)
        self._check_non_empty_fields(migrated_cir_500,
                                     exclusions=["genomicChanges", "references", "actionType", "otherIds",
                                                 "groupOfVariants", "score", "vendorSpecificScores",
                                                 "variantClassification", "fdp50", "recurrentlyReported", "others",
                                                 "phaseSet"])

        self._check_variant_coordinates(
            [variant.reportedVariantCancer for variant in cr_c_400.candidateVariants],
            migrated_cir_500.variants,
            reports_5_0_0.Assembly.GRCh38
        )

        # creates a random clinical report cancer for testing not filling null values
        cr_c_400 = GenericFactoryAvro.get_factory_avro(
            self.old_model.ClinicalReportCancer, VERSION_400, fill_nullables=False
        ).create(interpretationRequestVersion='1')
        if cr_c_400.candidateVariants:
            for candidate_variant in cr_c_400.candidateVariants:
                if candidate_variant.alleleOrigins[0] not in valid_cancer_origins:
                    candidate_variant.alleleOrigins[0] = random.choice(valid_cancer_origins)
        self._validate(cr_c_400)

        assembly = 'hg19'
        participant_id = "no_one"
        sample_ids = {
            'germline_variant': 'germline1',
            'somatic_variant': 'somatic1'
        }
        migrated_cir_500 = MigrateReports400To500().migrate_cancer_clinical_report(
            cr_c_400, assembly=assembly, participant_id=participant_id, sample_ids=sample_ids
        )
        self._validate(migrated_cir_500)

        self.assertTrue(cr_c_400.candidateVariants is None)
        self.assertTrue(migrated_cir_500.variants is None)
    def test_migrate_interpretation_request_rd_to_interpreted_genome_rd(self):

        # creates a random clinical report cancer for testing filling null values
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.InterpretationRequestRD, VERSION_400, fill_nullables=True
        ).create()  # we need to enforce that it can be cast to int
        self._validate(old_instance)
        self._check_non_empty_fields(old_instance)

        assembly = 'grch38'
        interpretation_service = "testing"
        new_instance = MigrateReports400To500().migrate_interpretation_request_rd_to_interpreted_genome_rd(
            old_instance, assembly=assembly, interpretation_service=interpretation_service,
            reference_database_versions={'dbSnp': 'rs12345'},
            software_versions={'intogen': '1.5'},
            report_url="blablabla.blah",
            comments=["bla", "bla!", "bla?"]
        )
        self._validate(new_instance)
        self._check_non_empty_fields(new_instance,
                                     exclusions=["alleleFrequencies", "genomicChanges", "proteinChanges",
                                                 "cdnaChanges", "dbSnpId", "cosmicIds", "clinVarIds",
                                                 "variantConsequences", "drugResponseClassification",
                                                 "functionalEffect", "traitAssociation", "tumorigenesisClassification",
                                                 "clinicalSignificance", "variantAttributes", "vaf"])
        self._check_variant_coordinates(
            old_instance.tieredVariants,
            new_instance.variants,
            reports_5_0_0.Assembly.GRCh38
        )
        self.assertEqual(old_instance.tieringVersion, new_instance.softwareVersions['tiering'])

        # creates a random clinical report cancer for testing not filling null values
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.InterpretationRequestRD, VERSION_400, fill_nullables=False
        ).create()
        self._validate(old_instance)

        assembly = 'hg19'
        new_instance = MigrateReports400To500().migrate_interpretation_request_rd_to_interpreted_genome_rd(
            old_instance, assembly=assembly, interpretation_service=interpretation_service,
            reference_database_versions={'dbSnp': 'rs12345'},
            software_versions={'intogen': '1.5'},
            report_url="blablabla.blah",
            comments=["bla", "bla!", "bla?"]
        )
        self._validate(new_instance)

        self._check_variant_coordinates(
            old_instance.tieredVariants,
            new_instance.variants,
            reports_5_0_0.Assembly.GRCh37
        )
Exemple #6
0
    def migrate_clinical_report_cancer_to_v6(json_dict,
                                             sample_id=None,
                                             assembly=None,
                                             participant_id=None):
        """
        Migration from reports 3.0.0 is not supported as we have no data in that version
        :type json_dict: dict
        :type sample_id: str
        :type assembly: Assembly
        :type participant_id: str
        :rtype: ClinicalReport_6_0_0
        """
        types = [
            ClinicalReport_6_0_0, ClinicalReportCancer_5_0_0,
            ClinicalReportCancer_4_0_0
        ]
        migrations = [
            lambda x: x,
            MigrateReports500To600().migrate_cancer_clinical_report,
            lambda x: MigrateReports400To500().migrate_cancer_clinical_report(
                old_instance=x,
                assembly=assembly,
                participant_id=participant_id,
                sample_id=sample_id)
        ]

        return MigrationHelpers.migrate(json_dict, types, migrations)
Exemple #7
0
    def migrate_interpretation_request_rd_to_interpreted_genome_v6(
            json_dict, assembly):
        """
        :type json_dict: dict
        :type assembly: Assembly
        :rtype: InterpretedGenomeRD_6_0_0
        """
        types = [
            InterpretationRequestRD_6_0_0, InterpretationRequestRD_5_0_0,
            InterpretationRequestRD_4_0_0, InterpretationRequestRD_3_0_0,
            InterpretationRequestRD_2_1_0
        ]
        migrations = [
            lambda x: x,
            MigrateReports500To600().migrate_interpreted_genome_rd,
            lambda x: MigrateReports400To500(
            ).migrate_interpretation_request_rd_to_interpreted_genome_rd(
                old_instance=x,
                assembly=assembly,
                interpretation_service="tiering",
                reference_database_versions={},
                software_versions={}),
            MigrateReports3To4().migrate_interpretation_request_rd,
            Migration21To3().migrate_interpretation_request
        ]

        return MigrationHelpers.migrate(json_dict, types, migrations)
Exemple #8
0
    def migrate_interpreted_genome_cancer_to_v6(
            json_dict,
            assembly=None,
            participant_id=None,
            sample_id=None,
            interpretation_request_version=None,
            interpretation_service=None):
        """
        Migration from reports 3.0.0 is not supported as we have no data in that version
        :type json_dict: dict
        :type assembly: Assembly
        :type participant_id: str
        :type sample_id: str
        :type interpretation_request_version: int
        :type interpretation_service: str
        :rtype: InterpretedGenome_6_0_0
        """
        types = [
            InterpretedGenome_6_0_0, CancerInterpretedGenome_5_0_0,
            CancerInterpretedGenome_4_0_0
        ]
        migrations = [
            lambda x: x,
            MigrateReports500To600().migrate_cancer_interpreted_genome, lambda
            x: MigrateReports400To500().migrate_cancer_interpreted_genome(
                old_instance=x,
                assembly=assembly,
                participant_id=participant_id,
                sample_id=sample_id,
                interpretation_request_version=interpretation_request_version,
                interpretation_service=interpretation_service)
        ]

        return MigrationHelpers.migrate(json_dict, types, migrations)
Exemple #9
0
    def migrate_interpreted_genome_rd_to_v6(
            json_dict,
            assembly=None,
            interpretation_request_version=None,
            panel_source='panelapp'):
        """
        :type json_dict: dict
        :type assembly: Assembly
        :type interpretation_request_version: int
        :type panel_source: str
        :rtype: InterpretedGenome_6_0_0
        """
        types = [
            InterpretedGenome_6_0_0, InterpretedGenomeRD_5_0_0,
            InterpretedGenomeRD_4_0_0, InterpretedGenomeRD_3_0_0,
            InterpretedGenomeRD_2_1_0
        ]
        migrations = [
            lambda x: x, lambda x: MigrateReports500To600(
            ).migrate_interpreted_genome_rd(x, panel_source=panel_source),
            lambda x: MigrateReports400To500().migrate_interpreted_genome_rd(
                x,
                assembly=assembly,
                interpretation_request_version=interpretation_request_version),
            MigrateReports3To4().migrate_interpreted_genome_rd,
            Migration21To3().migrate_interpreted_genome
        ]

        return MigrationHelpers.migrate(json_dict, types, migrations)
    def test_migrate_reported_variants(self):

        old_ig = GenericFactoryAvro.get_factory_avro(
            self.old_model.InterpretedGenomeRD, VERSION_400, fill_nullables=True
        ).create()
        self._validate(old_ig)

        reported_variants_5 = MigrateReports400To500().convert_collection(
            old_ig.reportedVariants, MigrateReports400To500()._migrate_reported_variant, assembly="GRCh37"
        )

        old_hgnc_symbols = [re.genomicFeature.hgnc for rv in old_ig.reportedVariants for re in rv.reportEvents]
        new_hgnc_symbols = [ge.geneSymbol for rv in reported_variants_5 for re in rv.reportEvents for ge in re.genomicEntities]
        [self.assertIsNotNone(symbol) for symbol in old_hgnc_symbols]
        [self.assertIsNotNone(symbol) for symbol in new_hgnc_symbols]
        self.assertEqual(old_hgnc_symbols, new_hgnc_symbols)
    def migrate_interpretation_request_cancer_to_interpreted_genome_v6(
            json_dict, assembly, interpretation_service, reference_database_versions, software_versions,
            report_url, comments):
        """
        :type json_dict: dict
        :type assembly: Assembly
        :type interpretation_service: str
        :type reference_database_versions: dict
        :type software_versions: dict
        :type report_url: str
        :type comments: list
        :rtype: CancerInterpretationRequest_6_0_0
        """
        if CancerInterpretationRequest_5_0_0.validate(CancerInterpretationRequest_5_0_0.fromJsonDict(json_dict)):
            raise MigrationError(
                "Cannot transform a cancer interpretation request in version 5.0.0 into an interpreted genome")
        if CancerInterpretationRequest_6_0_0.validate(CancerInterpretationRequest_6_0_0.fromJsonDict(json_dict)):
            raise MigrationError(
                "Cannot transform a cancer interpretation request in version 6.0.0 into an interpreted genome")

        types = [
            InterpretedGenome_6_0_0,
            CancerInterpretedGenome_5_0_0,
            CancerInterpretationRequest_4_0_0
        ]
        migrations = [
            lambda x: x,
            MigrateReports500To600().migrate_cancer_interpreted_genome,
            lambda x: MigrateReports400To500().migrate_cancer_interpretation_request_to_cancer_interpreted_genome(
                old_instance=x, assembly=assembly, interpretation_service=interpretation_service,
                reference_database_versions=reference_database_versions, software_versions=software_versions,
                report_url=report_url, comments=comments)
        ]

        return MigrationHelpers.migrate(json_dict, types, migrations)
    def test_migrate_rd_interpreted_genome(self):

        # creates a random clinical report cancer for testing filling null values
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.InterpretedGenomeRD,
            VERSION_400,
            fill_nullables=True).create(
            )  # we need to enforce that it can be cast to int
        self._validate(old_instance)
        self._check_non_empty_fields(old_instance)

        assembly = 'grch38'
        new_instance = MigrateReports400To500().migrate_interpreted_genome_rd(
            old_instance, assembly=assembly, interpretation_request_version=1)
        self._validate(new_instance)
        self._check_non_empty_fields(
            new_instance,
            exclusions=[
                "alleleFrequencies", "genomicChanges", "proteinChanges",
                "cdnaChanges", "dbSnpId", "cosmicIds", "clinVarIds",
                "variantConsequences", "drugResponseClassification",
                "functionalEffect", "traitAssociation",
                "tumorigenesisClassification", "clinicalSignificance",
                "variantAttributes", "vaf"
            ])
        self._check_variant_coordinates(old_instance.reportedVariants,
                                        new_instance.variants,
                                        reports_5_0_0.Assembly.GRCh38)

        # creates a random clinical report cancer for testing not filling null values
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.InterpretedGenomeRD,
            VERSION_400,
            fill_nullables=False).create()
        self._validate(old_instance)

        assembly = 'hg19'
        new_instance = MigrateReports400To500().migrate_interpreted_genome_rd(
            old_instance, assembly=assembly, interpretation_request_version=1)
        self._validate(new_instance)

        self._check_variant_coordinates(old_instance.reportedVariants,
                                        new_instance.variants,
                                        reports_5_0_0.Assembly.GRCh37)
    def migrate_interpretation_request_cancer_to_v6(json_dict, assembly):
        """
        :type json_dict: dict
        :type assembly: Assembly
        :rtype: CancerInterpretationRequest_6_0_0
        """
        types = [
            CancerInterpretationRequest_6_0_0,
            CancerInterpretationRequest_5_0_0,
            CancerInterpretationRequest_4_0_0
        ]
        migrations = [
            MigrationHelpers.set_version_to_6_0_0,
            MigrateReports500To600().migrate_interpretation_request_cancer,
            lambda x: MigrateReports400To500().migrate_cancer_interpretation_request(old_instance=x, assembly=assembly)
        ]

        return MigrationHelpers.migrate(json_dict, types, migrations)
Exemple #14
0
    def migrate_clinical_report_rd_to_v6(json_dict, assembly=None):
        """
        :type json_dict: dict
        :type assembly: Assembly
        :rtype: ClinicalReportRD_6_0_0
        """
        types = [
            ClinicalReport_6_0_0, ClinicalReportRD_5_0_0,
            ClinicalReportRD_4_0_0, ClinicalReportRD_3_0_0,
            ClinicalReportRD_2_1_0
        ]
        migrations = [
            lambda x: x,
            MigrateReports500To600().migrate_clinical_report_rd,
            lambda x: MigrateReports400To500().migrate_clinical_report_rd(
                old_instance=x, assembly=assembly),
            MigrateReports3To4().migrate_clinical_report_rd,
            Migration21To3().migrate_clinical_report
        ]

        return MigrationHelpers.migrate(json_dict, types, migrations)
 def migrate_interpretation_request_rd_to_v6(json_dict, assembly=None):
     """
     :type json_dict: dict
     :type assembly: Assembly
     :rtype: InterpretationRequestRD_6_0_0
     """
     types = [
         InterpretationRequestRD_6_0_0,
         InterpretationRequestRD_5_0_0,
         InterpretationRequestRD_4_0_0,
         InterpretationRequestRD_3_0_0,
         InterpretationRequestRD_2_1_0
     ]
     migrations = [
         MigrationHelpers.set_version_to_6_0_0,  # needed because 5 is valid as 6
         MigrateReports500To600().migrate_interpretation_request_rd,
         lambda x: MigrateReports400To500().migrate_interpretation_request_rd(old_instance=x, assembly=assembly),
         MigrateReports3To4().migrate_interpretation_request_rd,
         Migration21To3().migrate_interpretation_request
     ]
     return MigrationHelpers.migrate(json_dict, types, migrations)
    def test_migrate_cancer_interpretation_request_to_cancer_interpreted_genome(
            self):

        # creates a random clinical report cancer for testing filling null values
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.CancerInterpretationRequest,
            VERSION_400,
            fill_nullables=True).create()
        old_instance.cancerParticipant.tumourSamples = [
            old_instance.cancerParticipant.tumourSamples[0]
        ]
        self._validate(old_instance)
        self._check_non_empty_fields(old_instance)

        assembly = 'grch38'
        interpretation_service = 'testing'
        new_instance = MigrateReports400To500(
        ).migrate_cancer_interpretation_request_to_cancer_interpreted_genome(
            old_instance,
            assembly=assembly,
            interpretation_service=interpretation_service,
            reference_database_versions={'dbSnp': 'rs12345'},
            software_versions={'intogen': '1.5'},
            report_url="blablabla.blah",
            comments=["bla", "bla!", "bla?"])
        self._validate(new_instance)
        self._check_non_empty_fields(
            new_instance,
            exclusions=[
                "genomicChanges", "references", "actionType", "otherIds",
                "groupOfVariants", "score", "vendorSpecificScores",
                "variantClassification", "fdp50", "recurrentlyReported",
                "others", "phaseSet"
            ])

        self._check_variant_coordinates([
            variant.reportedVariantCancer
            for variant in old_instance.tieredVariants
        ], new_instance.variants, reports_5_0_0.Assembly.GRCh38)

        # creates a random clinical report cancer for testing not filling null values
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.CancerInterpretationRequest,
            VERSION_400,
            fill_nullables=False).create()
        old_instance.cancerParticipant.tumourSamples = [
            old_instance.cancerParticipant.tumourSamples[0]
        ]
        self._validate(old_instance)

        assembly = 'grCH37'
        interpretation_service = 'testing'
        new_instance = MigrateReports400To500(
        ).migrate_cancer_interpretation_request_to_cancer_interpreted_genome(
            old_instance,
            assembly=assembly,
            interpretation_service=interpretation_service,
            reference_database_versions={},
            software_versions={})
        self._validate(new_instance)
        self._check_variant_coordinates([
            variant.reportedVariantCancer
            for variant in old_instance.tieredVariants
        ], new_instance.variants, reports_5_0_0.Assembly.GRCh37)
    def test_migrate_cancer_interpreted_genome(self):

        # creates a random clinical report cancer for testing filling null values
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.CancerInterpretedGenome,
            VERSION_400,
            fill_nullables=True).create()
        self._validate(old_instance)
        self._check_non_empty_fields(old_instance)

        assembly = 'grch38'
        participant_id = "no_one"
        sample_id = 'some'
        interpretation_request_version = 1
        interpretation_service = 'testing'
        new_instance = MigrateReports400To500(
        ).migrate_cancer_interpreted_genome(
            old_instance,
            assembly=assembly,
            participant_id=participant_id,
            sample_id=sample_id,
            interpretation_request_version=interpretation_request_version,
            interpretation_service=interpretation_service)
        self._validate(new_instance)
        self._check_non_empty_fields(
            new_instance,
            exclusions=[
                "genomicChanges", "references", "actionType", "otherIds",
                "groupOfVariants", "score", "vendorSpecificScores",
                "variantClassification", "fdp50", "recurrentlyReported",
                "others", "phaseSet"
            ])

        self._check_variant_coordinates([
            variant.reportedVariantCancer
            for variant in old_instance.reportedVariants
        ], new_instance.variants, reports_5_0_0.Assembly.GRCh38)

        # creates a random clinical report cancer for testing not filling null values
        old_instance = GenericFactoryAvro.get_factory_avro(
            self.old_model.CancerInterpretedGenome,
            VERSION_400,
            fill_nullables=False).create()
        self._validate(old_instance)

        assembly = 'hg19'
        participant_id = "no_one"
        sample_id = 'some'
        interpretation_request_version = 1
        interpretation_service = 'testing'
        new_instance = MigrateReports400To500(
        ).migrate_cancer_interpreted_genome(
            old_instance,
            assembly=assembly,
            participant_id=participant_id,
            sample_id=sample_id,
            interpretation_request_version=interpretation_request_version,
            interpretation_service=interpretation_service)
        self._validate(new_instance)
        self._check_variant_coordinates([
            variant.reportedVariantCancer
            for variant in old_instance.reportedVariants
        ], new_instance.variants, reports_5_0_0.Assembly.GRCh37)