Example #1
0
    def test_import_panel_sources(self):
        gene = GeneFactory(gene_symbol="ABCC5-AS1")
        A1CF = GeneFactory(gene_symbol="A1CF")
        GeneFactory(gene_symbol="STR_1")

        gps = GenePanelSnapshotFactory()
        gps.panel.name = "Panel One"
        gps.level4title.name = gps.panel.name
        gps.level4title.save()
        gps.panel.save()
        evidence = EvidenceFactory.create(name="Expert Review Amber")
        GenePanelEntrySnapshotFactory.create(gene_core=gene,
                                             panel=gps,
                                             evaluation=(None, ),
                                             evidence=(evidence, ))
        self.assertEqual(
            gps.get_gene(gene.gene_symbol).evidence.first().name,
            "Expert Review Amber")

        file_path = os.path.join(os.path.dirname(__file__),
                                 'import_panel_data.tsv')
        test_panel_file = os.path.abspath(file_path)

        with open(test_panel_file) as f:
            url = reverse_lazy('panels:upload_panels')
            self.client.post(url, {'panel_list': f})

        ap = GenePanel.objects.get(name="Panel One").active_panel
        self.assertEqual(
            ap.get_gene(gene.gene_symbol).evidence.first().name,
            "Expert Review Green")
        self.assertEqual(ap.get_gene(gene.gene_symbol).evidence.count(), 1)
        self.assertEqual(sorted(ap.get_gene('A1CF').phenotypes),
                         sorted(['57h', 'wef']))
Example #2
0
    def test_get_internal_panels_for_a_gene(self):
        gene = GeneFactory()

        gps = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.public)
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps)  # random genes
        GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps)

        gps2 = GenePanelSnapshotFactory(
            panel__status=GenePanel.STATUS.internal)
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps2)  # random genes
        GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps2)

        gps3 = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.public)
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps3)  # random genes

        self.assertEqual(
            GenePanelEntrySnapshot.objects.get_gene_panels(
                gene.gene_symbol).count(), 2)
        self.assertEqual(
            GenePanelSnapshot.objects.get_gene_panels(
                gene.gene_symbol).count(), 1)
        self.assertEqual(
            GenePanelSnapshot.objects.get_gene_panels(gene.gene_symbol,
                                                      all=True,
                                                      internal=True).count(),
            2)

        url = reverse_lazy('panels:entity_detail',
                           kwargs={'slug': gene.gene_symbol})
        res = self.client.get(url)
        self.assertEqual(len(res.context_data['entries']), 2)
Example #3
0
    def prepare_compare(self):
        gene = GeneFactory()

        gps = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.internal)
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps)  # random genes
        GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps)

        gps2 = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.public)
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps2)  # random genes
        GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps2)

        STRFactory(panel=gps, position_37=None)

        return gene, gps, gps2
Example #4
0
    def test_download_panel(self):
        gene, gps, gps2 = self.prepare_compare()
        grey_gene = 'gene2'
        gene2 = GeneFactory(gene_symbol=grey_gene)
        gpes = GenePanelEntrySnapshotFactory.create(gene_core=gene2, panel=gps)
        gpes.saved_gel_status = 0

        res = self.client.get(
            reverse_lazy('panels:download_panel_tsv',
                         args=(gps.panel.pk, '01234')))
        self.assertEqual(res.status_code, 200)
        self.assertEqual(res.content.find(grey_gene.encode()), -1)
Example #5
0
    def test_import_reviews(self):
        gene = GeneFactory(gene_symbol="ABCC5-AS1")
        gps = GenePanelSnapshotFactory()
        current_version = gps.version
        gps.panel.name = "Panel One"
        gps.panel.save()
        GenePanelEntrySnapshotFactory.create(gene_core=gene,
                                             panel=gps,
                                             evaluation=(None, ))

        file_path = os.path.join(os.path.dirname(__file__),
                                 'import_reviews_data.tsv')
        test_reviews_file = os.path.abspath(file_path)

        with open(test_reviews_file) as f:
            url = reverse_lazy('panels:upload_reviews')
            self.client.post(url, {'review_list': f})

        ap = GenePanel.objects.get(name="Panel One").active_panel
        assert ap.get_gene(gene.gene_symbol).evaluation.count() == 1
        assert current_version != ap.version
Example #6
0
    def test_get_panels_for_a_gene(self):
        gene = GeneFactory()

        gps = GenePanelSnapshotFactory()
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps)  # random genes
        GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps)

        gps = GenePanelSnapshotFactory()
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps)  # random genes
        GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps)

        gps3 = GenePanelSnapshotFactory()
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps3)  # random genes
        GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps3)

        gps4 = GenePanelSnapshotFactory()
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps4)  # random genes

        assert GenePanelEntrySnapshot.objects.get_gene_panels(
            gene.gene_symbol).count() == 3

        url = reverse_lazy('panels:entity_detail',
                           kwargs={'slug': gene.gene_symbol})
        res = self.client.get(url)
        assert len(res.context_data['entries']) == 3
Example #7
0
    def test_update_gene_collection(self):
        gene_to_update = GeneFactory()
        gene_to_delete = GeneFactory()
        gene_to_update_symbol = GeneFactory()

        gps = GenePanelSnapshotFactory()
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps)  # random genes
        GenePanelEntrySnapshotFactory.create(gene_core=gene_to_update,
                                             panel=gps)
        STRFactory.create_batch(2, panel=gps)  # random STRs
        STRFactory.create(gene_core=gene_to_update, panel=gps)
        RegionFactory.create_batch(2, panel=gps)  # random STRs
        RegionFactory.create(gene_core=gene_to_update, panel=gps)

        gps = GenePanelSnapshotFactory()
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps)  # random genes
        STRFactory.create_batch(2, panel=gps)  # random STRs
        GenePanelEntrySnapshotFactory.create(gene_core=gene_to_update_symbol,
                                             panel=gps)
        STRFactory.create(gene_core=gene_to_update_symbol, panel=gps)
        RegionFactory.create_batch(2, panel=gps)  # random STRs
        RegionFactory.create(gene_core=gene_to_update_symbol, panel=gps)

        to_insert = [
            Gene(gene_symbol='A', ensembl_genes={
                'inserted': True
            }).dict_tr(),
            Gene(gene_symbol='B', ensembl_genes={
                'inserted': True
            }).dict_tr(),
        ]

        to_update = [
            Gene(gene_symbol=gene_to_update.gene_symbol,
                 ensembl_genes={
                     'updated': True
                 }).dict_tr()
        ]

        to_update_symbol = [(Gene(gene_symbol='C',
                                  ensembl_genes={
                                      'updated': True
                                  }).dict_tr(),
                             gene_to_update_symbol.gene_symbol)]

        to_delete = [gene_to_delete.gene_symbol]

        migration = {
            'insert': to_insert,
            'update': to_update,
            'delete': to_delete,
            'update_symbol': to_update_symbol
        }

        update_gene_collection(migration)

        self.assertTrue(GenePanelEntrySnapshot.objects.get_active().get(
            gene_core__gene_symbol=gene_to_update.gene_symbol).gene.get(
                'ensembl_genes')['updated'])

        self.assertTrue(STR.objects.get_active().get(
            gene_core__gene_symbol=gene_to_update.gene_symbol).gene.get(
                'ensembl_genes')['updated'])

        self.assertTrue(Region.objects.get_active().get(
            gene_core__gene_symbol=gene_to_update.gene_symbol).gene.get(
                'ensembl_genes')['updated'])

        updated_not_updated = [
            gpes.gene['ensembl_genes']
            for gpes in GenePanelEntrySnapshot.objects.filter(
                gene_core__gene_symbol=gene_to_update.gene_symbol)
        ]
        self.assertNotEqual(updated_not_updated[0], updated_not_updated[1])

        updated_not_updated = [
            str_item.gene['ensembl_genes'] for str_item in STR.objects.filter(
                gene_core__gene_symbol=gene_to_update.gene_symbol)
        ]
        self.assertNotEqual(updated_not_updated[0], updated_not_updated[1])

        updated_not_updated = [
            region_item.gene['ensembl_genes']
            for region_item in Region.objects.filter(
                gene_core__gene_symbol=gene_to_update.gene_symbol)
        ]
        self.assertNotEqual(updated_not_updated[0], updated_not_updated[1])

        self.assertFalse(
            GenePanelEntrySnapshot.objects.get(
                gene_core__gene_symbol=gene_to_update_symbol.gene_symbol).
            gene_core.active)

        self.assertFalse(
            STR.objects.get(gene_core__gene_symbol=gene_to_update_symbol.
                            gene_symbol).gene_core.active)

        self.assertFalse(
            Region.objects.get(gene_core__gene_symbol=gene_to_update_symbol.
                               gene_symbol).gene_core.active)

        self.assertFalse(
            Gene.objects.get(
                gene_symbol=gene_to_update_symbol.gene_symbol).active)
        self.assertFalse(
            Gene.objects.get(gene_symbol=gene_to_delete.gene_symbol).active)
        self.assertTrue(Gene.objects.get(gene_symbol='A').active)

        self.assertTrue(
            GenePanelEntrySnapshot.objects.get(gene_core__gene_symbol='C').
            gene.get('ensembl_genes')['updated'])

        self.assertTrue(
            STR.objects.get(gene_core__gene_symbol='C').gene.get(
                'ensembl_genes')['updated'])

        self.assertTrue(
            Region.objects.get(gene_core__gene_symbol='C').gene.get(
                'ensembl_genes')['updated'])
    def test_update_ensembl(self):
        gene_symbol = 'FAM58A'
        gene_to_update = GeneFactory(gene_symbol=gene_symbol)
        ensembl_data = {
            "GRch37": {
                "82": {
                    "ensembl_id": "ENSG00000147382",
                    "location": "X:152853377-152865500"
                }
            },
            "GRch38": {
                "90": {
                    "ensembl_id": "ENSG00000262919",
                    "location": "X:153587919-153600045"
                }
            }
        }
        json_data = {gene_symbol: ensembl_data}

        gps = GenePanelSnapshotFactory()
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps)  # random genes
        GenePanelEntrySnapshotFactory.create(gene_core=gene_to_update,
                                             panel=gps)
        STRFactory.create_batch(2, panel=gps)  # random STRs
        STRFactory.create(gene_core=gene_to_update, panel=gps)
        RegionFactory.create_batch(2, panel=gps)  # random STRs
        RegionFactory.create(gene_core=gene_to_update, panel=gps)

        gps_2 = GenePanelSnapshotFactory()
        GenePanelEntrySnapshotFactory.create_batch(2,
                                                   panel=gps_2)  # random genes
        STRFactory.create_batch(2, panel=gps_2)  # random STRs
        RegionFactory.create_batch(2, panel=gps_2)  # random STRs
        RegionFactory.create(gene_core=gene_to_update, panel=gps_2)

        # make sure ensembl data doesn't match
        for gene in GenePanelEntrySnapshot.objects.filter(
                gene__gene_symbol=gene_symbol):
            self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data)

        for str in STR.objects.filter(gene__gene_symbol=gene_symbol):
            self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data)

        for region in Region.objects.filter(gene__gene_symbol=gene_symbol):
            self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data)

        gps_pk = gps.pk
        gps_version = gps.version
        gps_2_version = gps_2.version

        process(json_data)

        # make sure previous data didn't change
        for gene in GenePanelEntrySnapshot.objects.filter(
                gene__gene_symbol=gene_symbol, panel_id=gps_pk):
            self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data)

        for str in STR.objects.filter(gene__gene_symbol=gene_symbol,
                                      panel_id=gps_pk):
            self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data)

        for region in Region.objects.filter(gene__gene_symbol=gene_symbol,
                                            panel_id=gps_pk):
            self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data)

        gps = gps.panel.active_panel
        gps_2 = gps_2.panel.active_panel

        self.assertNotEqual(gps_version, gps.version)
        self.assertNotEqual(gps_2_version, gps_2.version)

        # make sure new data has changed
        for gene in GenePanelEntrySnapshot.objects.filter(
                gene__gene_symbol=gene_symbol, panel=gps):
            self.assertEqual(gene.gene.get('ensembl_genes'), ensembl_data)

        for str in STR.objects.filter(gene__gene_symbol=gene_symbol,
                                      panel=gps):
            self.assertEqual(gene.gene.get('ensembl_genes'), ensembl_data)

        for region in Region.objects.filter(gene__gene_symbol=gene_symbol,
                                            panel=gps):
            self.assertEqual(gene.gene.get('ensembl_genes'), ensembl_data)