From 14d8c81b0d20d03f4a6cc4bfa67850c90a13300b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20=20MENAGER?= <herve.menager@pasteur.fr> Date: Thu, 18 May 2017 22:14:37 +0200 Subject: [PATCH] missing contents for commit 3689e89d66c29253cc6cc2e3e97e486cf7f820b6 --- ippisite/db.sqlite3 | Bin 569344 -> 569344 bytes .../management/commands/import_v1_data.py | 12 ++++++++---- ippisite/ippidb/models.py | 13 +++++++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/ippisite/db.sqlite3 b/ippisite/db.sqlite3 index e706f0b079239a64eeb573670db3d1ab0790f483..57542b95b741e72c1e7980fb7ecdb36ade6e1767 100644 GIT binary patch delta 8209 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 R-}J}u=+iTgK5dL@{{;XQZ^8fo delta 5958 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 X0M?++<C(gGQ<uhb#txqoS9|^gp^d=# diff --git a/ippisite/ippidb/management/commands/import_v1_data.py b/ippisite/ippidb/management/commands/import_v1_data.py index 4386708e..704eed48 100644 --- a/ippisite/ippidb/management/commands/import_v1_data.py +++ b/ippisite/ippidb/management/commands/import_v1_data.py @@ -2,7 +2,7 @@ from django.core.management import BaseCommand, CommandError import mysql.connector from ippidb.models import Bibliography, Protein, Taxonomy, MolecularFunction, \ - Domain, ProteinDomainBoundComplex, ProteinDomainPartnerComplex, Symmetry, Ppi, PpiComplex + Domain, ProteinDomainBoundComplex, ProteinDomainPartnerComplex, Symmetry, Ppi, PpiComplex, Disease class Command(BaseCommand): @@ -148,25 +148,29 @@ class Command(BaseCommand): 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) +select distinct protein.NumUniprot, domain.PfamNumAccession, complexe.NbCopy, cmpdAction.IDComplexeBound, bindingSiteEvidence.CodePDB, 'part1', ppi.IDPPI, disease.Disease 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) inner join disease on (disease.IDPPI=ppi.IDPPI) 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)''' +select distinct protein.NumUniprot, domain.PfamNumAccession , complexe.NbCopy, cmpdAction.IDComplexeBound, null, 'part2', ppi.IDPPI, disease.Disease 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) inner join disease on (disease.IDPPI=ppi.IDPPI)''' cursor.execute(sql_request_string) rows = cursor.fetchall() ProteinDomainBoundComplex.objects.all().delete() ProteinDomainPartnerComplex.objects.all().delete() + Disease.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')) + self.stdout.write(self.style.SUCCESS('Successfully flushed protein domain complex, PPI, and disease tables')) ppi_ids_mapping = {} for row in rows: try: # create or retrieve Ppi object if row[5]=='part1': ppi = Ppi() + disease, created = Disease.objects.get_or_create(name=row[7]) ppi.pdb_id = row[4] ppi.symmetry = Symmetry.objects.get(code='AS') ppi.save() + ppi.diseases.add(disease) + ppi.save() ppi_ids_mapping[row[6]]=ppi.id else: ppi = Ppi.objects.get(id=ppi_ids_mapping[row[6]]) diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py index f045b087..adbe32e6 100644 --- a/ippisite/ippidb/models.py +++ b/ippisite/ippidb/models.py @@ -149,9 +149,17 @@ class Symmetry(models.Model): def __str__(self): return '{} ({})'.format(self.code, self.description) + +class Disease(models.Model): + name = models.CharField('Disease', max_length=30, unique=True) # is there any database/nomenclature for diseases? + + def __str__(self): + return self.name + class Ppi(models.Model): pdb_id = models.CharField('PDB ID', max_length=4, null=True) symmetry = models.ForeignKey(Symmetry) + diseases = models.ManyToManyField(Disease) def __str__(self): return '{} PPI, PDB:{}'.format(self.symmetry.description, self.pdb_id or 'unknown') @@ -169,6 +177,7 @@ class Ppi(models.Model): #this is the less efficient query ever seen, FIXME return PpiComplex.objects.filter(ppi=self, complex__in=ProteinDomainBoundComplex.objects.all()) + class PpiComplex(models.Model): ppi = models.ForeignKey(Ppi) complex = models.ForeignKey(ProteinDomainComplex) @@ -180,10 +189,6 @@ class PpiComplex(models.Model): def __str__(self): return 'PPI {}, Complex {} ({})'.format(self.ppi, self.complex, self.cc_nb) -class Disease(models.Model): - ppi = models.ForeignKey(Ppi) - disease_name = models.CharField('Disease', max_length=30) # is there any database/nomenclature for diseases? - class Compound(models.Model): canonical_smile = models.CharField('Canonical Smile', unique=True, max_length=500) -- GitLab