diff --git a/ippisite/ippidb/management/commands/create_labslink_files.py b/ippisite/ippidb/management/commands/create_labslink_files.py new file mode 100644 index 0000000000000000000000000000000000000000..151b60e67345a4538940cc6e4c8dd19f871ccc39 --- /dev/null +++ b/ippisite/ippidb/management/commands/create_labslink_files.py @@ -0,0 +1,47 @@ +# coding: utf-8 +from django.db.models import CharField, Value as V +from django.db.models.functions import Concat +from django.db.models import F, Q, Case, When + +from ippidb.models import RefCompoundBiblio +from biodblinks.lablinks.command import LabsLinkCommand + + +class Command(LabsLinkCommand): + + queryset = ( + RefCompoundBiblio.objects.exclude(Q(bibliography__source="PT")) + .annotate( + resource_title=Concat( + V("iPPI-DB compound #"), F("compound__id"), output_field=CharField() + ) + ) + .annotate( + resource_url=Concat( + V("https://ippidb.pasteur.fr/compounds/"), + F("compound__id"), + output_field=CharField(), + ) + ) + .annotate( + doi=Case( + When(Q(bibliography__source="DO"), then=F("bibliography__id_source")), + default=None, + output_field=CharField(), + ) + ) + .annotate( + record_id=Case( + When(Q(bibliography__source="PM"), then=F("bibliography__id_source")), + default=None, + output_field=CharField(), + ) + ) + .annotate( + record_source=Case( + When(Q(bibliography__source="PM"), then=V("MED")), + default=None, + output_field=CharField(), + ) + ) + ) diff --git a/ippisite/ippidb/tests/tests.py b/ippisite/ippidb/tests/tests.py index 5a4f4e49fcb604bb4e3aba5280baf1065dcd8a4a..42311209918c0c45fb159f6dc95ae6d334abc468 100644 --- a/ippisite/ippidb/tests/tests.py +++ b/ippisite/ippidb/tests/tests.py @@ -3,6 +3,7 @@ iPPI-DB unit tests """ import json import re +from requests.exceptions import SSLError from django.contrib.auth import get_user_model from django.core.management import call_command @@ -768,9 +769,12 @@ class TestConvertSMILESToIUPAC(TestCase): def test_valid(self): smiles_to_iupacs = {"CCC": "propane"} for smiles, expected_iupac in smiles_to_iupacs.items(): - self.assertEqual( - convert_smiles_to_iupac(smiles).lower(), expected_iupac.lower() - ) + try: + self.assertEqual( + convert_smiles_to_iupac(smiles).lower(), expected_iupac.lower() + ) + except SSLError: + self.skipTest("SSL connection issue with the CACTUS WS, skipping") class DuplicateGeneNameTestCase(TestCase): diff --git a/ippisite/ippidb/tests/tests_contribute.py b/ippisite/ippidb/tests/tests_contribute.py index 4638c6576fd697ca28620a014973cb04b2137a50..25e777ee2474504443375bfe04538b09054a718b 100644 --- a/ippisite/ippidb/tests/tests_contribute.py +++ b/ippisite/ippidb/tests/tests_contribute.py @@ -1,6 +1,8 @@ """ iPPI-DB contribution module tests """ +from requests.exceptions import HTTPError + from django.contrib.auth import get_user_model from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType @@ -22,7 +24,10 @@ class BibliographyIDTestCase(TestCase): b = models.Bibliography() b.source = "DO" b.id_source = "10.1016/j.bmcl.2013.03.013" - b.save(autofill=True) + try: + b.save(autofill=True) + except HTTPError: + self.skipTest("Connection error, skipping test") class ContributionViewsAccessTestCase(TestCase): diff --git a/ippisite/ippidb/ws.py b/ippisite/ippidb/ws.py index 341fac3ba146b5792f5607d34a75e8da6f74bd66..0d2f17e32421a677f5c7cd48663c54615ece0cc3 100644 --- a/ippisite/ippidb/ws.py +++ b/ippisite/ippidb/ws.py @@ -536,3 +536,13 @@ def get_ligand_id(smiles: str) -> str: raise EntryNotFoundError( smiles, msg=str(f"ligand for smiles {smiles} not found in PDB Ligand") ) + + +def get_orcid_user_details(orcid: str) -> str: + endpoint = f"https://pub.orcid.org/v3.0/{orcid}/person" + resp = requests.get(endpoint, headers={"Accept": "application/json"},) + data = resp.json() + return { + "first": data["name"]["given-names"]["value"], + "last": data["name"]["family-name"]["value"], + } diff --git a/ippisite/ippisite/settings.py b/ippisite/ippisite/settings.py index 1cd64c663e6e2441525917a81d6e385d2f1fdb2b..d70af5c7299d2c741c59a3944a67a1dcb8392b58 100644 --- a/ippisite/ippisite/settings.py +++ b/ippisite/ippisite/settings.py @@ -58,6 +58,7 @@ INSTALLED_APPS = [ # "allauth.socialaccount.providers.github", "allauth.socialaccount.providers.orcid", "polymorphic", + "biodblinks", ] MIDDLEWARE = [ @@ -191,3 +192,10 @@ GALAXY_COMPOUNDPROPERTIES_WORKFLOWID = None CELERY_RESULT_BACKEND = "django-db" GA_CODE = None + +# Django BioDbLinks settings +LABLINKS_ID_PREFIX = "https://ippidb.pasteur.fr" +LABLINKS_PROVIDER_ID = "2079" +LABLINKS_RESOURCE_NAME = "iPPI-DB" +LABLINKS_RESOURCE_DESCRIPTION = "iPPI-DB : An interactive database of protein-protein interactions modulators" +LABLINKS_CONTACT_EMAIL = "ippidb@pasteur.fr" diff --git a/ippisite/ippisite/settings.template.py b/ippisite/ippisite/settings.template.py index 8991371af37b5479e2b38edd19edb196b7d2e0b3..53a221e4fa753a2e3fccd636ca08123382adaf34 100644 --- a/ippisite/ippisite/settings.template.py +++ b/ippisite/ippisite/settings.template.py @@ -169,3 +169,10 @@ CRISPY_TEMPLATE_PACK = "bootstrap4" # celery setting. CELERY_RESULT_BACKEND = 'django-db' + +# Django BioDbLinks settings +LABLINKS_ID_PREFIX = "https://ippidb.pasteur.fr" +LABLINKS_PROVIDER_ID = "2079" +LABLINKS_RESOURCE_NAME = "iPPI-DB" +LABLINKS_RESOURCE_DESCRIPTION = "iPPI-DB : An interactive database of protein-protein interactions modulators" +LABLINKS_CONTACT_EMAIL = "ippidb@pasteur.fr" diff --git a/ippisite/requirements-core.txt b/ippisite/requirements-core.txt index c3d4dd9f61dff7a776a97e38af9cf0dfdb743966..9541f612901fa70e9105f408a5b65a729ff18f1e 100644 --- a/ippisite/requirements-core.txt +++ b/ippisite/requirements-core.txt @@ -30,3 +30,5 @@ django-crispy-forms celery==4.4.7 django-polymorphic boltons +# django-biodblinks App +git+https://gitlab.pasteur.fr/hub/django-biodblinks.git#egg=django-biodblinks==0.1