diff --git a/ippisite/ippidb/management/commands/import_v1_data.py b/ippisite/ippidb/management/commands/import_v1_data.py index 11861016c345b4d89e79b9960b7ddb8fce10db9e..7de942bfb3338deea3efe79377b0147a6ab3eea3 100644 --- a/ippisite/ippidb/management/commands/import_v1_data.py +++ b/ippisite/ippidb/management/commands/import_v1_data.py @@ -1,7 +1,8 @@ from django.core.management import BaseCommand, CommandError import mysql.connector -from ippidb.models import Bibliography, Protein, Taxonomy, MolecularFunction, Domain +from ippidb.models import Bibliography, Protein, Taxonomy, MolecularFunction, \ + Domain, ProteinDomainBoundComplex, ProteinDomainPartnerComplex class Command(BaseCommand): @@ -29,6 +30,13 @@ class Command(BaseCommand): default=False, help='Flush and migrate domains', ) + parser.add_argument( + '--complexes', + action='store_true', + dest='complexes', + default=False, + help='Flush and migrate complexes', + ) parser.add_argument( '--stoponfail', action='store_true', @@ -102,4 +110,35 @@ class Command(BaseCommand): self.stdout.write(self.style.ERROR('Failed inserting {} {}'.format(row[1], row[2]))) else: self.stdout.write(self.style.SUCCESS('Successfully inserted {} {}'.format(row[1], row[2]))) - + if options['complexes']: + sql_request_string = ''' + select distinct protein.NumUniprot, domain.PfamNumAccession , complexe.NbCopy, cmpdAction.IDComplexeBound from bindingSite inner join ppi on (bindingSite.IDBindingSite=ppi.IDBindingSite1) inner join complexe on (ppi.IDComplexe1=complexe.IDComplexe) left outer join cmpdAction on (complexe.IDComplexe=cmpdAction.IDComplexeBound) inner join protein on (bindingSite.IDProtein=protein.IDProtein) inner join domain on (bindingSite.IDDomain=domain.IDDomain) union select distinct protein.NumUniprot, domain.PfamNumAccession , complexe.NbCopy, cmpdAction.IDComplexeBound from bindingSite inner join ppi on (bindingSite.IDBindingSite=ppi.IDBindingSite2) inner join complexe on (ppi.IDComplexe2=complexe.IDComplexe) left outer join cmpdAction on (complexe.IDComplexe=cmpdAction.IDComplexeBound) inner join protein on (bindingSite.IDProtein=protein.IDProtein) inner join domain on (bindingSite.IDDomain=domain.IDDomain)''' + cursor.execute(sql_request_string) + rows = cursor.fetchall() + ProteinDomainBoundComplex.objects.all().delete() + ProteinDomainPartnerComplex.objects.all().delete() + self.stdout.write(self.style.SUCCESS('Successfully flushed protein domain complex tables')) + for row in rows: + try: + if row[3]=="null": + c = ProteinDomainPartnerComplex() + else: + c = ProteinDomainBoundComplex() + protein = Protein.objects.get(uniprot_id=row[0]) + c.protein_id = protein + domain = Domain.objects.get(pfam_acc=row[1]) + c.domain_id = domain + c.ppc_copy_nb = row[2] + if isinstance(c, ProteinDomainBoundComplex): + c.ppp_copy_nb_per_p = 1 + c.pockets_nb = 1 + c.save() + except Exception as e: + if options['stoponfail']: + import traceback + self.stderr.write(traceback.format_exc()) + raise CommandError('Failed inserting {} {}'.format(row[0], row[1])) + else: + self.stdout.write(self.style.ERROR('Failed inserting {} {}'.format(row[0], row[1]))) + else: + self.stdout.write(self.style.SUCCESS('Successfully inserted {} {}'.format(row[0], row[1])))