diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py index d2d8ddfc601472d70ff485072de37fc00e58da74..3f321df381fd5d605924ea4c373c6be41a29d18b 100644 --- a/ippisite/ippidb/models.py +++ b/ippisite/ippidb/models.py @@ -18,6 +18,8 @@ class AutoFillableModel(models.Model): def save(self, *args, **kwargs): if kwargs.get('autofill') is True: self.autofill() + if 'autofill' in kwargs: + del kwargs['autofill'] super(AutoFillableModel, self).save(*args, **kwargs) @@ -30,7 +32,7 @@ class Bibliography(AutoFillableModel): ('PT', 'Patent'), ('DO', 'DOI ID') ) - source = models.CharField('Bibliographic type', max_length=2, choices=SOURCES) + source = models.CharField('Bibliographic type', max_length=2, choices=SOURCES, default='PM') id_source = models.CharField('Bibliographic ID', max_length=25) title = models.CharField('Title', max_length=300) journal_name = models.CharField('Journal name', max_length=50, null=True) @@ -107,7 +109,7 @@ class Protein(AutoFillableModel): taxonomy.taxonomy_id = info['organism'] taxonomy.save(autofill=True) self.organism = taxonomy - #super(Protein, self).save(*args, **kwargs) + super(Protein, self).save() for go_id in info['molecular_functions']: try: mol_function = MolecularFunction.objects.get(go_id=go_id) diff --git a/ippisite/ippidb/views.py b/ippisite/ippidb/views.py index b6d1e782ad61501bd7f7b40cb2a0a22c6200652e..e0c0172a534d674b60b42fe60e47210789976d47 100644 --- a/ippisite/ippidb/views.py +++ b/ippisite/ippidb/views.py @@ -2,7 +2,10 @@ import ippidb from django.shortcuts import render from django.http import HttpResponseRedirect from formtools.wizard.views import SessionWizardView,NamedUrlSessionWizardView + from .forms import IdForm, BibliographyForm, PDBForm, ProteinForm, ProteinDomainComplexTypeForm, ProteinDomainComplexForm, PpiForm, ProteinFormSet +from .models import Protein +from .ws import get_pdb_uniprot_mapping def index(request): return render(request, 'index.html') @@ -48,6 +51,19 @@ class IppiWizard(SessionWizardView): if self.steps.current=='IdForm': form.instance.autofill() self.instance_dict['BibliographyForm'] = form.instance + elif self.steps.current=='PDBForm': + uniprot_ids = get_pdb_uniprot_mapping(form.cleaned_data['pdb_id']) + proteins = [] + for uniprot_id in uniprot_ids: + try: + p = Protein.objects.get(uniprot_id=uniprot_id) + except Protein.DoesNotExist: + p = Protein() + p.uniprot_id = uniprot_ids[0] + p.autofill() + proteins.append(p) + #TODO replace p with proteins as the instance_dict + self.instance_dict['ProteinForm'] = p return self.get_form_step_data(form) def done(self, form_list, **kwargs): diff --git a/ippisite/ippidb/ws.py b/ippisite/ippidb/ws.py index 2c178fc1e80ca0bdb39e41d30571bde6756a9797..7a272f2a30e659ae65b408f4825b2085c2c3a9d4 100644 --- a/ippisite/ippidb/ws.py +++ b/ippisite/ippidb/ws.py @@ -78,3 +78,8 @@ def get_pfam_info(pfam_acc): domain_family = '' return {'id': pfam_id, 'description': description} + +def get_pdb_uniprot_mapping(pdb_id): + resp = requests.get('https://www.ebi.ac.uk/pdbe/api/mappings/uniprot/{}'.format(pdb_id)) + uniprot_ids = list(resp.json()[pdb_id]['UniProt'].keys()) + return uniprot_ids