diff --git a/ippisite/ippidb/management/commands/import_v1_data.py b/ippisite/ippidb/management/commands/import_v1_data.py index 42c45eb73b2de83feda8777e049bd0aa1cbf0246..8800e291863b70f5b901f7a696f43f6e2ce7bc0e 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 0000000000000000000000000000000000000000..00e3279a98dea166a7857238fed7942c04563dd2 --- /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 f9d77052c58549d6f55463ca89dc38fab2cb5e51..4b1ec02e2712b76339c264283cb8b7cf223193f9 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)