From a0f5ef19b0f9325e48cc1e78788b4e928ac5c3c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20=20MENAGER?= <herve.menager@pasteur.fr> Date: Tue, 28 Mar 2017 22:47:44 +0200 Subject: [PATCH] Domain corrections and migration correct Domain model, use PFAM service, add migration command and update database. --- ippisite/db.sqlite3 | Bin 512000 -> 520192 bytes .../management/commands/import_v1_data.py | 29 +++++++++++++++++- .../migrations/0007_auto_20170328_2045.py | 20 ++++++++++++ ippisite/ippidb/models.py | 10 ++++-- 4 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 ippisite/ippidb/migrations/0007_auto_20170328_2045.py diff --git a/ippisite/db.sqlite3 b/ippisite/db.sqlite3 index 89d5cf044b79d1546780d04ccc912a4742b52c8c..4322d387f7390adb118f06d2b776199986ca1340 100644 GIT binary patch delta 3057 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 PJU4zH$E9OUO!DKue3e$? delta 472 zcmZp8Am6Y+euA{1Gy?-eEf7Niqu@jxV@BzX2}}5yg}HquvkRzic2tn#-s~g2n?;+2 zFN%K;e;$7XpEth<e>>k3zJ9)4e1&|!_^$9N@!Rpw<^9R8$$OW#hj;g8!Gb8>$vwJH z7=<Sn>dj-EIaxrzTueZKS)C)Zpdd3PDLy4XH!(Ah{~`m+<hlC6jKa+y_1iz{Gj9K= z&m^!wo9iuu5W{B%u6)h}PF3FH93Jdv*k-XVXNlqW=9|jw#T~-U!E=J~GfxS_=gE!= z$Cq7ZV%#2bg(;kIyVG?hA;#_dZ!(=^VY3Wj6Zci0zVRB9{B)^$c2RDdCZ1q+admaZ z=J4t7YT4x(t*0Aiv58Jsu4CWKmX?^CnNvA^ejckBqvrIc`%HB#+zS|_CpwBxUv-UX z1`A&s!xf-q7p7fd3Yot8D%1bz9ru_H@$ka}4@hqhxxtjp$jG&sF@afOD+}|V`HLC^ z78L-I0+>WFHWjcaY-UOLBM)Q<w6jcL0b-#4Ca^t_;bDkj;M&IS%F@Ej!a0HCAd><^ o44VvV1P2qp0nmP%?J))H{@hH=?ZBw1WoEkxwtu@pJ^O_K00MlBuK)l5 diff --git a/ippisite/ippidb/management/commands/import_v1_data.py b/ippisite/ippidb/management/commands/import_v1_data.py index 5d6592cc..11861016 100644 --- a/ippisite/ippidb/management/commands/import_v1_data.py +++ b/ippisite/ippidb/management/commands/import_v1_data.py @@ -1,7 +1,7 @@ from django.core.management import BaseCommand, CommandError import mysql.connector -from ippidb.models import Bibliography, Protein, Taxonomy, MolecularFunction +from ippidb.models import Bibliography, Protein, Taxonomy, MolecularFunction, Domain class Command(BaseCommand): @@ -22,6 +22,13 @@ class Command(BaseCommand): default=False, help='Flush and migrate proteins', ) + parser.add_argument( + '--domains', + action='store_true', + dest='domains', + default=False, + help='Flush and migrate domains', + ) parser.add_argument( '--stoponfail', action='store_true', @@ -75,4 +82,24 @@ 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['domains']: + cursor.execute("""SELECT * FROM domain""") + rows = cursor.fetchall() + Domain.objects.all().delete() + self.stdout.write(self.style.SUCCESS('Successfully flushed domain table')) + for row in rows: + try: + p = Domain() + p.pfam_acc = row[2] + p.domain_family = row[4] + p.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(row[1], row[2]))) diff --git a/ippisite/ippidb/migrations/0007_auto_20170328_2045.py b/ippisite/ippidb/migrations/0007_auto_20170328_2045.py new file mode 100644 index 00000000..47a59cc6 --- /dev/null +++ b/ippisite/ippidb/migrations/0007_auto_20170328_2045.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2017-03-28 20:45 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('ippidb', '0006_auto_20170327_1439'), + ] + + operations = [ + migrations.RenameField( + model_name='domain', + old_name='domainfamily', + new_name='domain_family', + ), + ] diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py index 4ce93714..325a849e 100644 --- a/ippisite/ippidb/models.py +++ b/ippisite/ippidb/models.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals from django.db import models from django.forms import ModelForm -from .ws import get_pubmed_info, get_epo_info, get_uniprot_info, get_taxonomy_info, get_go_info +from .ws import get_pubmed_info, get_epo_info, get_uniprot_info, get_taxonomy_info, get_go_info, get_pfam_info class Bibliography(models.Model): """ @@ -111,7 +111,13 @@ class Domain(models.Model): pfam_acc = models.CharField('Pfam Accession', max_length=10, unique=True) pfam_id = models.CharField('Pfam Family Identifier', max_length=20) pfam_description = models.CharField('Pfam Description', max_length=100) - domainfamily = models.CharField('Domain family', max_length=25) #TODO: what is this field? check database contents + domain_family = models.CharField('Domain family', max_length=25) #TODO: what is this field? check database contents + + def save(self, *args, **kwargs): + info = get_pfam_info(self.pfam_acc) + self.pfam_id = info['id'] + self.pfam_description = info['description'] + super(Domain, self).save(*args, **kwargs) class ProteinDomainComplex(models.Model): protein_id = models.ForeignKey('Protein') -- GitLab