From cf66a659ea7bf4aa79a5bc54339093289785ee20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20=20MENAGER?= <herve.menager@pasteur.fr> Date: Thu, 8 Mar 2018 22:46:36 +0100 Subject: [PATCH] migrate Compound activity results (fix #15) Former-commit-id: 5a5f698c25d82c03c96cb49900bd47282946fe9c --- .../management/commands/import_v1_data.py | 31 ++++++++++++++++++- ...undactivityresult_inhibition_percentage.py | 20 ++++++++++++ ippisite/ippidb/models.py | 4 +++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 ippisite/ippidb/migrations/0031_compoundactivityresult_inhibition_percentage.py diff --git a/ippisite/ippidb/management/commands/import_v1_data.py b/ippisite/ippidb/management/commands/import_v1_data.py index 42c45eb7..8800e291 100644 --- a/ippisite/ippidb/management/commands/import_v1_data.py +++ b/ippisite/ippidb/management/commands/import_v1_data.py @@ -7,7 +7,7 @@ import mysql.connector from ippidb.models import Bibliography, Protein, Taxonomy, MolecularFunction, \ Domain, ProteinDomainBoundComplex, ProteinDomainPartnerComplex, Symmetry, Ppi, PpiComplex, Disease, \ Compound, MDDRCompoundImport, MDDRActivityClass, TestActivityDescription, CellLine, RefCompoundBiblio, \ - CompoundAction, TestCytotoxDescription, TestPKDescription + CompoundAction, TestCytotoxDescription, TestPKDescription, CompoundActivityResult class MyConverter(mysql.connector.conversion.MySQLConverter): @@ -319,6 +319,7 @@ select distinct protein.NumUniprot, domain.PfamNumAccession , complexe.NbCopy, TestActivityDescription.objects.all().delete() self.stdout.write( self.style.SUCCESS('Successfully flushed test activity descriptions table')) + tad_id_mapping = {} for row in rows: try: tad = TestActivityDescription() @@ -342,6 +343,7 @@ select distinct protein.NumUniprot, domain.PfamNumAccession , complexe.NbCopy, tad.cell_line, created = CellLine.objects.get_or_create( name=row[16]) tad.save() + tad_id_mapping[row[0]] = tad.id except Exception as e: if options['stoponfail']: import traceback @@ -354,6 +356,33 @@ select distinct protein.NumUniprot, domain.PfamNumAccession , complexe.NbCopy, else: self.stdout.write( self.style.SUCCESS('Successfully inserted {}'.format(row[2]))) + cursor.execute("""select c.CanonicalSmile, r.IDTestActivity, r.ActivityType, r.Activity, r.PourcentInhib from cmpdActiveResult as r inner join compound as c on r.IDCompound = c.IDCompound;""") + rows = cursor.fetchall() + CompoundActivityResult.objects.all().delete() + self.stdout.write( + self.style.SUCCESS('Successfully flushed compound activity result table')) + for row in rows: + try: + car = CompoundActivityResult() + car.test_activity_description = TestActivityDescription.objects.get(id=tad_id_mapping[row[1]]) + car.compound = Compound.objects.get(canonical_smile=row[0]) + car.activity_type = row[2] + car.activity = row[3] + car.inhibition_percentage = row[4] + car.modulation_type = 'I' # because previous DB is only about inhibitors + car.save() + except Exception as e: + if options['stoponfail']: + import traceback + self.stderr.write(traceback.format_exc()) + raise CommandError( + 'Failed inserting {} {}'.format(row[1], row[2])) + else: + self.stdout.write( + self.style.ERROR('Failed inserting {} {}'.format(row[1], row[2]))) + else: + self.stdout.write( + self.style.SUCCESS('Successfully inserted {}'.format(str(car)))) cursor.execute("""SELECT * FROM testCytotoxDescription""") rows = cursor.fetchall() TestCytotoxDescription.objects.all().delete() diff --git a/ippisite/ippidb/migrations/0031_compoundactivityresult_inhibition_percentage.py b/ippisite/ippidb/migrations/0031_compoundactivityresult_inhibition_percentage.py new file mode 100644 index 00000000..00e3279a --- /dev/null +++ b/ippisite/ippidb/migrations/0031_compoundactivityresult_inhibition_percentage.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-03-08 21:12 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ippidb', '0030_testpkdescription_concentration'), + ] + + operations = [ + migrations.AddField( + model_name='compoundactivityresult', + name='inhibition_percentage', + field=models.DecimalField(decimal_places=0, max_digits=3, null=True, verbose_name='Inhibition percentage'), + ), + ] diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py index f9d77052..4b1ec02e 100644 --- a/ippisite/ippidb/models.py +++ b/ippisite/ippidb/models.py @@ -477,6 +477,8 @@ class CompoundActivityResult(models.Model): 'Activity type', max_length=5, choices=ACTIVITY_TYPES) activity = models.DecimalField( 'Activity', max_digits=12, decimal_places=10) + inhibition_percentage = models.DecimalField( + 'Inhibition percentage', max_digits=3, decimal_places=0, null=True) modulation_type = models.CharField( 'Modulation type', max_length=1, choices=MODULATION_TYPES) @@ -484,6 +486,8 @@ class CompoundActivityResult(models.Model): unique_together = ( ('compound', 'test_activity_description', 'activity_type'),) + def __str__(self): + return 'Compound activity result for {} test {} on {}'.format(self.activity_type, self.test_activity_description.id, self.compound.id) class TestCytotoxDescription(models.Model): biblio = models.ForeignKey(Bibliography, models.CASCADE) -- GitLab