diff --git a/ippisite/ippidb/forms.py b/ippisite/ippidb/forms.py index ce7511d45cf395682e8795a6493d0f264fe0ab98..12e9955684d1fcf9aeb97bfd3aad5ebb72355aaf 100644 --- a/ippisite/ippidb/forms.py +++ b/ippisite/ippidb/forms.py @@ -8,25 +8,16 @@ from .models import Bibliography, Protein, ProteinDomainComplex, Ppi, PpiComplex from .ws import pdb_entry_exists -class IdForm(ModelForm): +class BibliographyForm(ModelForm): class Meta: model = Bibliography - fields = ['source', 'id_source'] + fields = ['source', 'id_source', 'cytotox', 'in_silico', 'in_vitro', 'in_vivo', 'in_cellulo', 'pharmacokinetic', 'xray'] widgets = { 'source': forms.RadioSelect, 'id_source': forms.TextInput(attrs={'placeholder': 'ID'}), } - -class BibliographyForm(ModelForm): - - class Meta: - model = Bibliography - fields = ['cytotox', 'in_silico', 'in_vitro', 'in_vivo', 'in_cellulo', 'pharmacokinetic', 'xray'] - - - def validate_pdb_exists(value): if not(pdb_entry_exists(value)): raise ValidationError( @@ -85,12 +76,16 @@ class ProteinDomainComplexTypeForm(forms.Form): complexType=forms.CharField(widget=forms.RadioSelect(choices=TYPE_CHOICES)) - class ProteinDomainComplexForm(ModelForm): class Meta: model = ProteinDomainComplex - fields = ['protein', 'domain', 'ppc_copy_nb'] + fields = ['protein','domain'] + + def __init__(self, *args, **kwargs): + super(ProteinDomainComplexForm, self).__init__(*args, **kwargs) + self.fields['protein'].queryset = ProteinDomainComplex.objects.filter(id='953') + self.fields['domain'].queryset = ProteinDomainComplex.objects.filter(id='953') class PpiForm(ModelForm): diff --git a/ippisite/ippidb/management/commands/import_v1_data.py b/ippisite/ippidb/management/commands/import_v1_data.py index 533a9d6dd8140c86081619cbd63de8571b93b3c8..df53a3ea9933d445d35960694b12d6a97919af3b 100644 --- a/ippisite/ippidb/management/commands/import_v1_data.py +++ b/ippisite/ippidb/management/commands/import_v1_data.py @@ -3,11 +3,10 @@ import glob from django.utils import timezone from django.core.management import BaseCommand, CommandError import mysql.connector -from pybel import readfile from ippidb.models import Bibliography, Protein, Taxonomy, MolecularFunction, \ Domain, ProteinDomainBoundComplex, ProteinDomainPartnerComplex, Symmetry, Ppi, PpiComplex, Disease, \ - Compound, MDDRCompoundImport, MDDRActivityClass, TestActivityDescription, CellLine + Compound, MDDRCompoundImport, MDDRActivityClass, TestActivityDescription, CellLine, RefCompoundBiblio class MyConverter(mysql.connector.conversion.MySQLConverter): @@ -77,6 +76,13 @@ class Command(BaseCommand): default=False, help='Flush and migrate compounds', ) + parser.add_argument( + '--compound-biblio', + action='store_true', + dest='compoundbiblio', + default=False, + help='Flush and migrate compounds-bibliography', + ) parser.add_argument( '--test-activity-description', action='store_true', @@ -301,6 +307,7 @@ select distinct protein.NumUniprot, domain.PfamNumAccession , complexe.NbCopy, self.stdout.write( self.style.SUCCESS('Successfully inserted {}'.format(row[2]))) if options['mddr']: + from pybel import readfile MDDRCompoundImport.objects.all().delete() MDDRActivityClass.objects.all().delete() self.stdout.write( @@ -409,3 +416,30 @@ select distinct protein.NumUniprot, domain.PfamNumAccession , complexe.NbCopy, else: self.stdout.write( self.style.SUCCESS('Successfully inserted {} {}'.format(row[1], row[2]))) + if options['compoundbiblio']: + cursor.execute("""select r.CmpdNameInBiblio, c.CanonicalSmile, b.IDSource from refCmpdBiblio as r inner join compound as c on r.IDCompound=c.IDCompound inner join biblio as b on r.IDBiblio=b.IDBiblio;""") + rows = cursor.fetchall() + RefCompoundBiblio.objects.all().delete() + self.stdout.write( + self.style.SUCCESS('Successfully flushed compound-biblio table')) + for row in rows: + try: + c = Compound.objects.get(canonical_smile=row[1]) + b = Bibliography.objects.get(id_source=row[2]) + r = RefCompoundBiblio() + r.compound_id = c.id + r.bibliography_id = b.id + r.compound_name = row[0] + r.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/static/css/ippidb.css b/ippisite/ippidb/static/css/ippidb.css index ce86281464e43917335058239b00168139a375aa..794a9f7c0330f1280320d8e4a772c4565e0dae68 100644 --- a/ippisite/ippidb/static/css/ippidb.css +++ b/ippisite/ippidb/static/css/ippidb.css @@ -92,9 +92,6 @@ html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pr font-size:100%; vertical-align:baseline; background:transparent; - margin-left:auto; - margin-right:auto; - max-width: 1300px; font-family:"BrandonGrotesqueReg"; font-size: 18px; } @@ -633,7 +630,6 @@ display:block; .box { margin-top: 50px; position: relative; - min-height: 500px; } .box__inner { @@ -760,6 +756,15 @@ body { display:inline-block; } +.PperPocket { + width: 150px; + border-bottom: 1px solid #2d96fa; + border-top: 1px solid #E3E9EB; + border-left: 1px solid #E3E9EB; + border-right: 1px solid #E3E9EB; + text-align: center; +} + /* BUTTONS */ /* IdForm*/ @@ -813,7 +818,7 @@ body { } #ck-button label { - width: 80%; + width: 400px; } #ck-button label span { @@ -1465,7 +1470,7 @@ button, input, select, textarea { } #step li a, #step li a:hover, #step li a:focus { - width: 156.656px; + width: 188.8px; background-color: #E3E9EB; color:#8D8888; font-family: "PlayfairDisplayReg"; diff --git a/ippisite/ippidb/static/js/ippidb.js b/ippisite/ippidb/static/js/ippidb.js index 689d64ea4b4715ddd93dc4bc3489ef6bd4c53aec..3eb4bf470e1c1e216959ad2afb707018900eb117 100644 --- a/ippisite/ippidb/static/js/ippidb.js +++ b/ippisite/ippidb/static/js/ippidb.js @@ -1,23 +1,7 @@ -$(document).ready(function() { - var max_fields = 10; //maximum input boxes allowed - var wrapper = $(".input_fields_wrap"); //Fields wrapper - var add_button = $(".add_field_button"); //Add button ID - - var x = 1; //initlal text box count - $(add_button).click(function(e){ //on add input button click - e.preventDefault(); - if(x < max_fields){ //max input box allowed - x++; //text box increment - $(wrapper).append('<div class="input_size"><input type="text" name="PDBForm-pdb_id"/><div class="remove_field"><img class="small_icon" src="/static/images/Other/Remove.png"></div></div>'); //add input box - } - }); - - $(wrapper).on("click",".remove_field", function(e){ //user click on remove text - e.preventDefault(); $(this).parent('div').remove(); x--; - }) -}); +// Function to hide/show infos contain in a div +// Function to hide/show architectures according to the chosen type of complex $(document).ready(function(){ $("select").change(function(){ $(this).find("option:selected").each(function(){ @@ -34,6 +18,7 @@ $("select").change(function(){ }).change(); }); +// Function to enlarge some part of the main page $(document).ready(function(){ $('.box').on('click','.box__inner',function() { $(this).closest('.box').find('.box--active').removeClass('box--active'); diff --git a/ippisite/ippidb/templates/BibliographyForm.html b/ippisite/ippidb/templates/BibliographyForm.html index 6b7274119930938a2e487756141cc3ad7536737e..6fcb804c5871a2296581bb91ad632932b7c997cf 100644 --- a/ippisite/ippidb/templates/BibliographyForm.html +++ b/ippisite/ippidb/templates/BibliographyForm.html @@ -4,65 +4,70 @@ {% block form %} <div id="step"> <ul> - <li><a href='/admin-session/add/IdForm/'>{% trans "ID" %}</a></li> <li><a class="active" href='/admin-session/add/BibliographyForm/'>{% trans "Bibliography" %}</a></li> <li><a href='/admin-session/add/PDBForm/'>{% trans "PDB id" %}</a></li> - <li><a href='/admin-session/add/ProteinForm/'>{% trans "Proteins" %}</a></li> <li><a href='/admin-session/add/ProteinDomainComplexTypeForm/'>{% trans "Architecture" %}</a></li> + <li><a href='/admin-session/add/ProteinDomainComplexForm/'>{% trans "Composition" %}</a></li> <li><a href='/admin-session/add/PPIForm/'>{% trans "PPI" %}</a></li> </ul> </div> <div id="Form"> <div class="step_desc"> - <p>Based on the ID you have provided, we have identified the following information concerning your bibliographic source. - Please check that the information below is correct (Title, Authors etc. ) and answer the few questions about the content of your bibliographic source.</p> - </div> - <div class="publi_info"> - <!--{% for info in infos_publi %} - {% if info.id_source == "8703835" %} - <span>{{ info.title }}</span> - {% endif %} - {% endfor %}--> + <p> Please provide a valid ID for your bibliographic source, either a PubMed ID or WIPO ID. This ID should correspond to a bibliographic source in its final format. Therefore, PubMed articles in « Just Accepted » format should not be used as a source of data as they are not considered the official version of record. </p> </div> <form action="" method="post"> {% csrf_token %} <table> - {{ wizard.management_form }} - {{ wizard.form.errors}} - {{ wizard.form.non_field_errors}} - {% block custom_form %}{% endblock %} - - {% if wizard.form.forms %} - {{ wizard.form.management_form }} - {% for form in wizard.form.forms %} - {{ form }} - {% endfor %} - {% else %} - <p> This publication contains :<br/></p> - <div id="ck-button"> - <label> - <input type="checkbox"><span>{{ wizard.form.cytotox.label }}</span> - </label> - <label> - <input type="checkbox"><span>{{ wizard.form.in_silico.label }}</span> - </label> - <label> - <input type="checkbox"><span>{{ wizard.form.in_vitro.label }}</span> - </label> - <label> - <input type="checkbox"><span>{{ wizard.form.in_vivo.label }}</span> - </label> - <label> - <input type="checkbox"><span>{{ wizard.form.in_cellulo.label }}</span> - </label> - <label> - <input type="checkbox"><span>{{ wizard.form.pharmacokinetic.label }}</span> - </label> - <label> - <input type="checkbox"><span>{{ wizard.form.xray.label }}</span> - </label> + {{ wizard.management_form }} + {{ wizard.form.errors}} + {{ wizard.form.non_field_errors}} + {% block custom_form %}{% endblock %} + + {% if wizard.form.forms %} + {{ wizard.form.management_form }} + {% for form in wizard.form.forms %} + {{ form }} + {% endfor %} + {% else %} + <div> + <div id="id_IdForm-source"> + {% for radio in wizard.form.source %} + {{ radio.tag }} + <label for="{{ radio.id_for_label }}"> + <span>{{ radio.choice_label }}</span> + </label> + {% endfor %} + </div> + {{ wizard.form.id_source}} + </div> + <a> Get infos </a> + <div id="publi_infos"> blablabla publi + <p> This publication contains :<br/></p> + <div id="ck-button"> + <label> + <input type="checkbox"><span>{{ wizard.form.cytotox.label }}</span> + </label> + <label> + <input type="checkbox"><span>{{ wizard.form.in_silico.label }}</span> + </label> + <label> + <input type="checkbox"><span>{{ wizard.form.in_vitro.label }}</span> + </label> + <label> + <input type="checkbox"><span>{{ wizard.form.in_vivo.label }}</span> + </label> + <label> + <input type="checkbox"><span>{{ wizard.form.in_cellulo.label }}</span> + </label> + <label> + <input type="checkbox"><span>{{ wizard.form.pharmacokinetic.label }}</span> + </label> + <label> + <input type="checkbox"><span>{{ wizard.form.xray.label }}</span> + </label> + </div> </div> - {% endif %} + {% endif %} </table> <input type="submit" value="{% trans "Next step" %}"/> </form> diff --git a/ippisite/ippidb/templates/IdForm.html b/ippisite/ippidb/templates/IdForm.html deleted file mode 100644 index 977a4fc3d4ff4963b7a6949a3e7b425db4e7cec6..0000000000000000000000000000000000000000 --- a/ippisite/ippidb/templates/IdForm.html +++ /dev/null @@ -1,47 +0,0 @@ -{% extends "add.html" %} -{% load i18n %} - -{% block form %} -<div id="step"> - <ul> - <li><a class="active" href='/admin-session/add/IdForm/'>{% trans "ID" %}</a></li> - <li><a href='/admin-session/add/BibliographyForm/'>{% trans "Bibliography" %}</a></li> - <li><a href='/admin-session/add/PDBForm/'>{% trans "PDB id" %}</a></li> - <li><a href='/admin-session/add/ProteinForm/'>{% trans "Proteins" %}</a></li> - <li><a href='/admin-session/add/ProteinDomainComplexTypeForm/'>{% trans "Architecture" %}</a></li> - <li><a href='/admin-session/add/PPIForm/'>{% trans "PPI" %}</a></li> - </ul> -</div> -<div id="Form"> - <div class="step_desc"> - <p> Please provide a valid ID for your bibliographic source, either a PubMed ID or WIPO ID. This ID should correspond to a bibliographic source in its final format. Therefore, PubMed articles in « Just Accepted » format should not be used as a source of data as they are not considered the official version of record. </p> - </div> - <form action="" method="post"> - {% csrf_token %} - <table> - {{ wizard.management_form }} - {{ wizard.form.errors}} - {{ wizard.form.non_field_errors}} - {% block custom_form %}{% endblock %} - - {% if wizard.form.forms %} - {{ wizard.form.management_form }} - {% for form in wizard.form.forms %} - {{ form }} - {% endfor %} - {% else %} - <div id="id_IdForm-source"> - {% for radio in wizard.form.source %} - {{ radio.tag }} - <label for="{{ radio.id_for_label }}"> - <span>{{ radio.choice_label }}</span> - </label> - {% endfor %} - </div> - {{ wizard.form.id_source}} - {% endif %} - </table> - <input type="submit" value="{% trans "Next step" %}"/> - </form> -</div> -{% endblock %} \ No newline at end of file diff --git a/ippisite/ippidb/templates/PDBForm.html b/ippisite/ippidb/templates/PDBForm.html index bfac10f460cbc25b5d61db9dfb7d70341ac3001f..69d40bf9c6adbfbe41376bcb2dd1caea89d30807 100644 --- a/ippisite/ippidb/templates/PDBForm.html +++ b/ippisite/ippidb/templates/PDBForm.html @@ -4,11 +4,10 @@ {% block form %} <div id="step"> <ul> - <li><a href='/admin-session/add/IdForm/'>{% trans "ID" %}</a></li> <li><a href='/admin-session/add/BibliographyForm/'>{% trans "Bibliography" %}</a></li> <li><a class="active" href='/admin-session/add/PDBForm/'>{% trans "PDB id" %}</a></li> - <li><a href='/admin-session/add/ProteinForm/'>{% trans "Proteins" %}</a></li> <li><a href='/admin-session/add/ProteinDomainComplexTypeForm/'>{% trans "Architecture" %}</a></li> + <li><a href='/admin-session/add/ProteinDomainComplexForm/'>{% trans "Composition" %}</a></li> <li><a href='/admin-session/add/PPIForm/'>{% trans "PPI" %}</a></li> </ul> </div> diff --git a/ippisite/ippidb/templates/PpiForm.html b/ippisite/ippidb/templates/PpiForm.html index bf191d54738a2d7662ea07f749f489b374f28b58..243a2393865db96cca83470089f2430f04a3e982 100644 --- a/ippisite/ippidb/templates/PpiForm.html +++ b/ippisite/ippidb/templates/PpiForm.html @@ -4,17 +4,17 @@ {% block form %} <div id="step"> <ul> - <li><a href='/admin-session/add/IdForm/'>{% trans "ID" %}</a></li> <li><a href='/admin-session/add/BibliographyForm/'>{% trans "Bibliography" %}</a></li> <li><a href='/admin-session/add/PDBForm/'>{% trans "PDB id" %}</a></li> - <li><a href='/admin-session/add/ProteinForm/'>{% trans "Proteins" %}</a></li> <li><a href='/admin-session/add/ProteinDomainComplexTypeForm/'>{% trans "Architecture" %}</a></li> + <li><a href='/admin-session/add/ProteinDomainComplexForm/'>{% trans "Composition" %}</a></li> <li><a class="active" href='/admin-session/add/PPIForm/'>{% trans "PPI" %}</a></li> </ul> </div> <div id="Form"> <div class="step_desc"> - <p>Now that you have created ALL complexes that participate to the formation of the PPI, you need to constuct your PPI by selecting your complex bound and if necessary you partner complex along with their stoichiometry in the PPI.</p> + <p>You have selected a <span style="color:#2d96fa;">{{ complex_type }}</span> that is <span style="color:#2d96fa;">{{ complex_choice }}</span> by the binding of PPI modulator. <br/> + Now that you have created a complexe that participate to the formation of the PPI, please choose the stoichiometry of the PPI.</p> </div> <form action="" method="post"> {% csrf_token %} @@ -30,7 +30,11 @@ {{ form }} {% endfor %} {% else %} - {{ wizard.form }} + <div class="inline_box_complex"> + <div class="inline_label"> Symmetry: </div> + <div class="PperPocket">{{ pdb_id }}</div> + <div class="inline_field"> {{ form.symmetry }}</div> + </div> {% endif %} </table> <input type="submit" value="{% trans "submit" %}"/> diff --git a/ippisite/ippidb/templates/ProteinDomainComplexForm.html b/ippisite/ippidb/templates/ProteinDomainComplexForm.html index cb05b79415ca22d18aedd142acd29c02d701cb5d..9284a87ec3658cc84a3d0623d7bfab52d0190c8e 100644 --- a/ippisite/ippidb/templates/ProteinDomainComplexForm.html +++ b/ippisite/ippidb/templates/ProteinDomainComplexForm.html @@ -4,11 +4,10 @@ {% block form %} <div id="step"> <ul> - <li><a href='/admin-session/add/IdForm/'>{% trans "ID" %}</a></li> <li><a href='/admin-session/add/BibliographyForm/'>{% trans "Bibliography" %}</a></li> <li><a href='/admin-session/add/PDBForm/'>{% trans "PDB id" %}</a></li> - <li><a href='/admin-session/add/ProteinForm/'>{% trans "Proteins" %}</a></li> - <li><a class="active" href='/admin-session/add/ProteinDomainComplexTypeForm/'>{% trans "Architecture" %}</a></li> + <li><a href='/admin-session/add/ProteinDomainComplexTypeForm/'>{% trans "Architecture" %}</a></li> + <li><a class="active" href='/admin-session/add/ProteinDomainComplexForm/'>{% trans "Composition" %}</a></li> <li><a href='/admin-session/add/PPIForm/'>{% trans "PPI" %}</a></li> </ul> </div> @@ -30,39 +29,61 @@ <div class="step_desc"> <p>You have selected a <span style="color:#2d96fa;">{{ complex_type }}</span> that is <span style="color:#2d96fa;">{{ complex_choice }}</span> by the binding of PPI modulator.<br/> According to this architecture you need to specify:<br/> - The bound complex containing a protein<br/> </p> </div> <div class="inline_box_complex"> <div class="inline_label"> Bound complex : </div> <div class="inline_field"> {{ form.protein }}</div> <div class="inline_field"> {{ form.domain }}</div> - {% if complex_type == "Hetero2merAB" %} - <div class="inline_field"> {{ form.ppc_copy_nb }}</div> - {% elif complex_type == "Homo2merA2" %} - <div class="inline_field"> {{ form.ppc_copy_nb }}</div> - {% elif complex_type == "Hetero2merAB" %} - <div class="inline_field"> {{ form.ppc_copy_nb }}</div> - {% elif complex_type == "HomoLike2mer" %} - <div class="inline_field"> {{ form.ppc_copy_nb }}</div> - {% elif complex_type == "Homo3merA3" %} - <div class="inline_field"> {{ form.ppc_copy_nb }}</div> - {% elif complex_type == "Homo3merA2" %} - <div class="inline_field"> {{ form.ppc_copy_nb }}</div> - {% elif complex_type == "Homo4merA4" %} - <div class="inline_field"> {{ form.ppc_copy_nb }}</div> - {% elif complex_type == "RingHomo3mer" %} - <div class="inline_field"> {{ form.ppc_copy_nb }}</div> - {% elif complex_type == "RingHomo5mer" %} - <div class="inline_field"> {{ form.ppc_copy_nb }}</div> + {% if complex_type == "Hetero2merAB" and complex_choice == "inhibited" %} + <div class="inline_field"><div class="PperPocket">1</div></div> + </div> + <div class="inline_box_complex"> + <div class="inline_label"> Partner complex : </div> + <div class="inline_field"> {{ form.protein }}</div> + <div class="inline_field"> {{ form.domain }}</div> + <div class="inline_field"><div class="PperPocket">1</div></div> + {% elif complex_type == "Homo2merA2" and complex_choice == "inhibited" %} + <div class="inline_field"><div class="PperPocket">1</div></div> + {% elif complex_type == "Hetero2merAB" and complex_choice == "stabilized" %} + <div class="inline_field"><div class="PperPocket">1</div></div> + + {% elif complex_type == "Homo2merA2" and complex_choice == "stabilized" %} + <div class="inline_field"><div class="PperPocket">2</div></div> + + {% elif complex_type == "HomoLike2mer" and complex_choice == "stabilized" %} + <div class="inline_field"><div class="PperPocket">1</div></div> + + {% elif complex_type == "Homo3merA3" and complex_choice == "stabilized" %} + <div class="inline_field"><div class="PperPocket">3</div></div> + + {% elif complex_type == "Homo3merA2" and complex_choice == "stabilized" %} + <div class="inline_field"><div class="PperPocket">2</div></div> + </div> + <div class="inline_box_complex"> + <div class="inline_label"> Partner complex : </div> + <div class="inline_field"> {{ form.protein }}</div> + <div class="inline_field"> {{ form.domain }}</div> + <div class="inline_field"><div class="PperPocket">1</div></div> + {% elif complex_type == "Homo4merA4" and complex_choice == "stabilized" %} + <div class="inline_field"><div class="PperPocket">4</div></div> + + {% elif complex_type == "RingHomo3mer" and complex_choice == "stabilized" %} + <div class="inline_field"><div class="PperPocket">3</div></div> + + {% elif complex_type == "RingHomo5mer" and complex_choice == "stabilized" %} + <div class="inline_field"><div class="PperPocket">5</div></div> + {% else %} - <div class="inline_field"> {{ form.ppc_copy_nb }}</div> - </div> + <!--<div class="inline_field"> {{ form.ppc_copy_nb }}</div> --> + </div> + <div class="inline_box_complex"> <div class="inline_box_complex"> <div class="inline_label"> Partner complex : </div> <div class="inline_field"> {{ form.protein }}</div> <div class="inline_field"> {{ form.domain }}</div> - <div class="inline_field"> {{ form.ppc_copy_nb }}</div> + <!--<div class="inline_field"> {{ form.ppc_copy_nb }}</div> --> + </div> {% endif %} </div> {% endif %} diff --git a/ippisite/ippidb/templates/ProteinDomainComplexTypeForm.html b/ippisite/ippidb/templates/ProteinDomainComplexTypeForm.html index 36b5c4ca8c2fda83cc3ffe81ca575aaefb9198a6..d92f0787a2486c598eee9ff8e9d12e819f6c5f29 100644 --- a/ippisite/ippidb/templates/ProteinDomainComplexTypeForm.html +++ b/ippisite/ippidb/templates/ProteinDomainComplexTypeForm.html @@ -4,17 +4,16 @@ {% block form %} <div id="step"> <ul> - <li><a href='/admin-session/add/IdForm/'>{% trans "ID" %}</a></li> <li><a href='/admin-session/add/BibliographyForm/'>{% trans "Bibliography" %}</a></li> <li><a href='/admin-session/add/PDBForm/'>{% trans "PDB id" %}</a></li> - <li><a href='/admin-session/add/ProteinForm/'>{% trans "Proteins" %}</a></li> <li><a class="active" href='/admin-session/add/ProteinDomainComplexTypeForm/'>{% trans "Architecture" %}</a></li> + <li><a href='/admin-session/add/ProteinDomainComplexForm/'>{% trans "Composition" %}</a></li> <li><a href='/admin-session/add/PPIForm/'>{% trans "PPI" %}</a></li> </ul> </div> <div id="Form"> <div class="step_desc"> - <p>Now that you have listed ALL proteins and PFAM domains that participate to the PPI, you need to select an architecture for this PPI complex among the proposed schematics below.</br> + <p>Now you need to select an architecture for the PPI complex among the proposed schematics below.</br> If your PPI complex is not among them, please select « Custom »</p> </div> <form action="" method="post"> diff --git a/ippisite/ippidb/templates/ProteinForm.html b/ippisite/ippidb/templates/ProteinForm.html index 47b713fc0c806bcd0d31c71fda4111a7e6cfbea2..09ee2a8399bdd3ffbffb260bcee4fe0867b9dda6 100644 --- a/ippisite/ippidb/templates/ProteinForm.html +++ b/ippisite/ippidb/templates/ProteinForm.html @@ -4,11 +4,10 @@ {% block form %} <div id="step"> <ul> - <li><a href='/admin-session/add/IdForm/'>{% trans "ID" %}</a></li> <li><a href='/admin-session/add/BibliographyForm/'>{% trans "Bibliography" %}</a></li> <li><a href='/admin-session/add/PDBForm/'>{% trans "PDB id" %}</a></li> - <li><a class="active" href='/admin-session/add/ProteinForm/'>{% trans "Proteins" %}</a></li> <li><a href='/admin-session/add/ProteinDomainComplexTypeForm/'>{% trans "Architecture" %}</a></li> + <li><a class="active" href='/admin-session/add/ProteinForm/'>{% trans "Proteins" %}</a></li> <li><a href='/admin-session/add/PPIForm/'>{% trans "PPI" %}</a></li> </ul> </div> diff --git a/ippisite/ippidb/templates/admin-session.html b/ippisite/ippidb/templates/admin-session.html index 56fbabd87e9451d6c971219fe17f6b83a3f8fae3..df0c6dd9cf3b9709e61a524b797f648bcf78d484 100644 --- a/ippisite/ippidb/templates/admin-session.html +++ b/ippisite/ippidb/templates/admin-session.html @@ -12,7 +12,7 @@ <a hfref="/admin-session/view">View Content</a> </li> <li> - <a href="/admin-session/add/IdForm">Add New Content</a> + <a href="/admin-session/add/BibliographyForm">Add New Content</a> </li> <li> <a hfref="/admin-session/update">Update Content</a> diff --git a/ippisite/ippidb/templates/base.html b/ippisite/ippidb/templates/base.html index cc19b916e91e6a886dbc61d14ad7b6ba0c374aa6..6abdcff9b71c72fcdb1b49bfd71660d345b0d877 100644 --- a/ippisite/ippidb/templates/base.html +++ b/ippisite/ippidb/templates/base.html @@ -2,11 +2,12 @@ <html lang="en"> <head> <title>IPPI-DB {% block title %}{% endblock %}</title> - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> +<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous"> <link rel="stylesheet" href="/static/css/ippidb.css"> - <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script> - <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script> + <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script> + <script src="/static/js/ippidb.js" type="text/javascript"></script> </head> diff --git a/ippisite/ippidb/templates/ppi_card.html b/ippisite/ippidb/templates/ppi_card.html new file mode 100644 index 0000000000000000000000000000000000000000..64fb070d8d8a6e6310f13871034b2c59c45d438b --- /dev/null +++ b/ippisite/ippidb/templates/ppi_card.html @@ -0,0 +1,80 @@ +{% extends "base.html" %} + + +{% block title %}inhibitors of Protein-Protein Interaction Database{% endblock %} + +{% block content %} +<div id="mainnav"> +</div> +<div class="inner-wrap"> + <nav class="breadcrumb" role="navigation"> + <div id="breadcrumb-label" class="breadcrumb-label">You are here</div> + <div aria-labelledby="breadcrumb-label"> + Fonction Fil d'Arianne + </div> + </nav> + <div id="main-wrapper" class="page"> + <div id="main"> + <div id="content" class="main-content"> + <main role="main"> + <div class="row"> + <div class="col-3"> + <div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist"> + <a class="nav-link active" id="v-pills-bib-tab" data-toggle="pill" href="#v-pills-bib" role="tab" aria-controls="v-pills-bib" aria-expanded="true">Bibliography</a> + <a class="nav-link" id="v-pills-comp-tab" data-toggle="pill" href="#v-pills-comp" role="tab" aria-controls="v-pills-comp" aria-expanded="true">Compounds</a> + <a class="nav-link" id="v-pills-target-tab" data-toggle="pill" href="#v-pills-target" role="tab" aria-controls="v-pills-target" aria-expanded="true">Targets</a> + <a class="nav-link" id="v-pills-test-tab" data-toggle="pill" href="#v-pills-test" role="tab" aria-controls="v-pills-test" aria-expanded="true">Tests</a> + </div> + </div> + <div class="col-9"> + <div class="tab-content" id="v-pills-tabContent"> + <div class="tab-pane fade show active" id="v-pills-bib" role="tabpanel" aria-labelledby="v-pills-bib-tab"> + <div class="card"> + <div class="card-body"> + <p><a target="_blank" class="card-link" href="https://www.ncbi.nlm.nih.gov/pubmed/{{ bibliography.id_source }}">{{ bibliography.authors_list }}. {{ authors.biblio_year }}. {{ bibliography.title }} {{ bibliography.journal_name }}. </a></p> + </div> + </div> + <div class="card"> + <div class="card-body"> + <ul class="list-group"> + <li class="list-group-item">Cytotoxicity data: {% if bibliography.cytotox %}✓{% else %}✗{% endif %}</li> + <li class="list-group-item"><i>in silico</i> study: {% if bibliography.in_silico %}✓{% else %}✗{% endif %}</li> + <li class="list-group-item"><i>in vitro</i> study: {% if bibliography.in_vitro %}✓{% else %}✗{% endif %}</li> + <li class="list-group-item"><i>in vivo</i> study: {% if bibliography.in_vivo %}✓{% else %}✗{% endif %}</li> + <li class="list-group-item"><i>in cellulo</i> study: {% if bibliography.in_cellulo %}✓{% else %}✗{% endif %}</li> + <li class="list-group-item">pharmacokinetic study: {% if bibliography.pharmacokinetic %}✓{% else %}✗{% endif %}</li> + <li class="list-group-item">X-ray study: {% if bibliography.x_ray %}✓{% else %}✗{% endif %}</li> + </ul> + </div> + </div> + </div> + <div class="tab-pane fade" id="v-pills-comp" role="tabpanel" aria-labelledby="v-pills-comp-tab"> + {% for compound_biblio in compound_biblios %} + <div class="card"> + <div class="card-body"> + <ul class="list-group"> + <li class="list-group-item">Common name: {{ compound_biblio.compound.common_name }}</li> + <li class="list-group-item">MDDR: <i>TODO</i></li> + <li class="list-group-item">Canonical SMILES: {{ compound_biblio.compound.canonical_smile }}</li> + <li class="list-group-item">IUPAC name: {{ compound_biblio.compound.iupac_name }}</li> + <li class="list-group-item">mentionned as {{ compound_biblio.compound_name }}</li> + </ul> + </div> + </div> + {% endfor %} + </div> + <div class="tab-pane fade" id="v-pills-target" role="tabpanel" aria-labelledby="v-pills-target-tab"> + Target info + </div> + <div class="tab-pane fade" id="v-pills-test" role="tabpanel" aria-labelledby="v-pills-test-tab"> + Tests info + </div> + </div> + </div> + </div> + </main><!-- .site-main --> + </div> + </div><!-- div main --> + </div> +</div> +{% endblock %} diff --git a/ippisite/ippidb/urls.py b/ippisite/ippidb/urls.py index 3cfaacf9b49cf01e977c2512c7f71a14c894d5be..9228d00d4e7feba2d7cb392cc9bccc68ed9bc681 100644 --- a/ippisite/ippidb/urls.py +++ b/ippisite/ippidb/urls.py @@ -1,6 +1,6 @@ from django.conf.urls import include, url from . import views -from ippidb.forms import IdForm, BibliographyForm, PDBForm, ProteinDomainComplexTypeForm, ProteinDomainComplexForm, PpiForm +from ippidb.forms import BibliographyForm, PDBForm, ProteinDomainComplexTypeForm, ProteinDomainComplexForm, PpiForm from ippidb.views import IppiWizard, FORMS ippidb_wizard = IppiWizard.as_view(FORMS, @@ -19,6 +19,7 @@ urlpatterns = [ url(r'^query$', views.query, name='query'), url(r'^query/pharma/$', views.pharma, name='pharma'), url(r'^query/chemical/$', views.chemical, name='chemical'), + url(r'^biblio_ppi/(?P<biblio_id>\d+)$', views.ppi_card, name='biblio_ppi_card'), url(r'^tutorials$', views.tutorials, name='tutorials'), url(r'^admin-session$', views.adminSession, name='admin-session'), url(r'^admin-session/add/(?P<step>.+)/$', diff --git a/ippisite/ippidb/views.py b/ippisite/ippidb/views.py index 00ea6df6519d097da0ec1bb5404a980bc9b14f96..7e8e889edb07a45dbd59f1123b2dae5ab4ff296b 100644 --- a/ippisite/ippidb/views.py +++ b/ippisite/ippidb/views.py @@ -1,11 +1,10 @@ import ippidb from django.shortcuts import render -from django.http import HttpResponseRedirect +from django.http import HttpResponseRedirect, Http404 from formtools.wizard.views import SessionWizardView, NamedUrlSessionWizardView - -from .forms import IdForm, BibliographyForm, PDBForm, ProteinForm, ProteinDomainComplexTypeForm, ProteinDomainComplexForm, PpiForm, ProteinFormSet, PDBFormSet -from .models import Protein, Bibliography, ProteinDomainComplex +from .forms import BibliographyForm, PDBForm, ProteinForm, ProteinDomainComplexTypeForm, ProteinDomainComplexForm, PpiForm, ProteinFormSet, PDBFormSet +from .models import Protein, Bibliography, ProteinDomainComplex, RefCompoundBiblio from .ws import get_pdb_uniprot_mapping @@ -20,7 +19,6 @@ def about(request): def general(request): return render(request, 'general.html') - def pharmacology(request): return render(request, 'pharmacology.html') @@ -52,19 +50,15 @@ def tutorials(request): def adminSession(request): return render(request, 'admin-session.html') -FORMS = [("IdForm", ippidb.forms.IdForm), - ("BibliographyForm", ippidb.forms.BibliographyForm), +FORMS = [("BibliographyForm", ippidb.forms.BibliographyForm), ("PDBForm", ippidb.forms.PDBFormSet), - ("ProteinForm", ippidb.forms.ProteinFormSet), ("ProteinDomainComplexTypeForm", ippidb.forms.ProteinDomainComplexTypeForm), ("ProteinDomainComplexForm", ippidb.forms.ProteinDomainComplexForm), ("PpiForm", ippidb.forms.PpiForm)] -TEMPLATES = {"IdForm": "IdForm.html", - "BibliographyForm": "BibliographyForm.html", +TEMPLATES = {"BibliographyForm": "BibliographyForm.html", "PDBForm": "PDBForm.html", - "ProteinForm": "ProteinForm.html", "ProteinDomainComplexTypeForm": "ProteinDomainComplexTypeForm.html", "ProteinDomainComplexForm": "ProteinDomainComplexForm.html", "PpiForm": "PpiForm.html"} @@ -77,17 +71,23 @@ class IppiWizard(NamedUrlSessionWizardView): if self.steps.current == 'ProteinDomainComplexForm': context['complex_type']=self.storage.get_step_data('ProteinDomainComplexTypeForm').get('complex_type') context['complex_choice']=self.storage.get_step_data('ProteinDomainComplexTypeForm').get('complex_choice') + if self.steps.current == 'PpiForm': + context['complex_type']=self.storage.get_step_data('ProteinDomainComplexTypeForm').get('complex_type') + context['complex_choice']=self.storage.get_step_data('ProteinDomainComplexTypeForm').get('complex_choice') + context['pdb_id']=self.storage.get_step_data('PDBForm').get('pdb_id') + context['pdb_id']=context['pdb_id'][0] return context def get_template_names(self): return [TEMPLATES[self.steps.current]] def get_form_instance(self, step): - if self.steps.current == 'BibliographyForm': - pk = self.storage.get_step_data('IdForm').get('pk') + if self.steps.current == 'PDBForm': + pk = self.storage.get_step_data('BibliographyForm').get('pk') return Bibliography.objects.get(pk=pk) if self.steps.current == 'ProteinForm': pks = self.storage.get_step_data('PDBForm').get('pks') + print(Protein.objects.filter(id__in=pks)) return Protein.objects.filter(id__in=pks) def process_step(self, form): @@ -97,9 +97,9 @@ class IppiWizard(NamedUrlSessionWizardView): when appropriate """ data = super(IppiWizard, self).process_step(form).copy() - if self.steps.current == 'IdForm': + if self.steps.current == 'Bibliography': form.instance.autofill() - if self.steps.current in ['IdForm', 'Bibliography']: + if self.steps.current == 'Bibliography': form.instance.save() data['pk'] = form.instance.id if self.steps.current == 'PDBForm': @@ -121,10 +121,18 @@ class IppiWizard(NamedUrlSessionWizardView): if self.steps.current=='ProteinDomainComplexTypeForm': data['complex_type']=data['ProteinDomainComplexTypeForm-complexType'] data['complex_choice']=data['ProteinDomainComplexTypeForm-complexChoice'] - #print(data) return data def done(self, form_list, **kwargs): return render(self.request, '/admin-session/add.html', { 'form_data': [form.cleaned_data for form in form_list], }) + +def ppi_card(request, biblio_id): + try: + bibliography = Bibliography.objects.get(pk=biblio_id) + except Bibliography.DoesNotExist: + raise Http404("No bibliography data for %s" % biblio_id) + refs = RefCompoundBiblio.objects.filter(bibliography_id = bibliography.id) + return render(request, 'ppi_card.html', {'bibliography': bibliography, + 'compound_biblios': refs})