Skip to content
Snippets Groups Projects
Commit b523d132 authored by Hervé  MENAGER's avatar Hervé MENAGER
Browse files

migrate Ppi and PpiComplex data

fixes #24
parent f65cfd03
No related branches found
No related tags found
No related merge requests found
No preview for this file type
...@@ -2,7 +2,7 @@ from django.core.management import BaseCommand, CommandError ...@@ -2,7 +2,7 @@ from django.core.management import BaseCommand, CommandError
import mysql.connector import mysql.connector
from ippidb.models import Bibliography, Protein, Taxonomy, MolecularFunction, \ from ippidb.models import Bibliography, Protein, Taxonomy, MolecularFunction, \
Domain, ProteinDomainBoundComplex, ProteinDomainPartnerComplex, Symmetry, Ppi Domain, ProteinDomainBoundComplex, ProteinDomainPartnerComplex, Symmetry, Ppi, PpiComplex
class Command(BaseCommand): class Command(BaseCommand):
...@@ -31,18 +31,18 @@ class Command(BaseCommand): ...@@ -31,18 +31,18 @@ class Command(BaseCommand):
help='Flush and migrate domains', help='Flush and migrate domains',
) )
parser.add_argument( parser.add_argument(
'--complexes', '--symmetries',
action='store_true', action='store_true',
dest='complexes', dest='symmetries',
default=False, default=False,
help='Flush and migrate complexes', help='Flush and create symmetries',
) )
parser.add_argument( parser.add_argument(
'--symmetries', '--ppi',
action='store_true', action='store_true',
dest='symmetries', dest='ppi',
default=False, default=False,
help='Flush and create symmetries', help='Flush and migrate ppis and complexes',
) )
parser.add_argument( parser.add_argument(
'--stoponfail', '--stoponfail',
...@@ -117,39 +117,6 @@ class Command(BaseCommand): ...@@ -117,39 +117,6 @@ class Command(BaseCommand):
self.stdout.write(self.style.ERROR('Failed inserting {} {}'.format(row[1], row[2]))) self.stdout.write(self.style.ERROR('Failed inserting {} {}'.format(row[1], row[2])))
else: else:
self.stdout.write(self.style.SUCCESS('Successfully inserted {} {}'.format(row[1], row[2]))) 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, bindingSiteEvidence.CodePDB 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) left outer join bindingSiteEvidence on (ppi.IDPPI=bindingSiteEvidence.IDPPI)'''
cursor.execute(sql_request_string)
rows = cursor.fetchall()
ProteinDomainBoundComplex.objects.all().delete()
ProteinDomainPartnerComplex.objects.all().delete()
Ppi.objects.all().delete()
self.stdout.write(self.style.SUCCESS('Successfully flushed protein domain complex tables and Ppi'))
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])))
if options['symmetries']: if options['symmetries']:
Symmetry.objects.all().delete() Symmetry.objects.all().delete()
self.stdout.write(self.style.SUCCESS('Successfully flushed symmetries table')) self.stdout.write(self.style.SUCCESS('Successfully flushed symmetries table'))
...@@ -179,4 +146,57 @@ class Command(BaseCommand): ...@@ -179,4 +146,57 @@ class Command(BaseCommand):
self.stdout.write(self.style.ERROR('Failed inserting {} {}'.format(row[0], row[1]))) self.stdout.write(self.style.ERROR('Failed inserting {} {}'.format(row[0], row[1])))
else: else:
self.stdout.write(self.style.SUCCESS('Successfully inserted {} {}'.format(row[0], row[1]))) self.stdout.write(self.style.SUCCESS('Successfully inserted {} {}'.format(row[0], row[1])))
if options['ppi']:
sql_request_string = '''
select distinct protein.NumUniprot, domain.PfamNumAccession, complexe.NbCopy, cmpdAction.IDComplexeBound, bindingSiteEvidence.CodePDB, 'part1', ppi.IDPPI 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) left outer join bindingSiteEvidence on (ppi.IDPPI=bindingSiteEvidence.IDPPI)
union
select distinct protein.NumUniprot, domain.PfamNumAccession , complexe.NbCopy, cmpdAction.IDComplexeBound, null, 'part2', ppi.IDPPI 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()
Ppi.objects.all().delete()
PpiComplex.objects.all().delete()
self.stdout.write(self.style.SUCCESS('Successfully flushed protein domain complex tables and Ppi'))
ppi_ids_mapping = {}
for row in rows:
try:
# create or retrieve Ppi object
if row[5]=='part1':
ppi = Ppi()
ppi.pdb_id = row[4]
ppi.symmetry = Symmetry.objects.get(code='AS')
ppi.save()
ppi_ids_mapping[row[6]]=ppi.id
else:
ppi = Ppi.objects.get(id=ppi_ids_mapping[row[6]])
# create a complex
if row[3]=="null":
c = ProteinDomainPartnerComplex()
else:
c = ProteinDomainBoundComplex()
protein = Protein.objects.get(uniprot_id=row[0])
c.protein = protein
domain = Domain.objects.get(pfam_acc=row[1])
c.domain = domain
c.ppc_copy_nb = row[2]
if isinstance(c, ProteinDomainBoundComplex):
c.ppp_copy_nb_per_p = 1
c.pockets_nb = 1
c.save()
# create the PpiComplex object
ppi_complex = PpiComplex()
ppi_complex.ppi = ppi
ppi_complex.complex = c
ppi_complex.cc_nb = 1
ppi_complex.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])))
# -*- coding: utf-8 -*-
# Generated by Django 1.11.1 on 2017-05-18 14:04
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ippidb', '0010_auto_20170518_1142'),
]
operations = [
migrations.AlterField(
model_name='ppi',
name='pdb_id',
field=models.CharField(max_length=4, null=True, verbose_name='PDB ID'),
),
]
...@@ -150,7 +150,7 @@ class Symmetry(models.Model): ...@@ -150,7 +150,7 @@ class Symmetry(models.Model):
return '{} ({})'.format(self.code, self.description) return '{} ({})'.format(self.code, self.description)
class Ppi(models.Model): class Ppi(models.Model):
pdb_id = models.CharField('PDB ID', max_length=4) pdb_id = models.CharField('PDB ID', max_length=4, null=True)
symmetry = models.ForeignKey(Symmetry) symmetry = models.ForeignKey(Symmetry)
class PpiComplex(models.Model): class PpiComplex(models.Model):
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment