diff --git a/nomad/datamodel/metainfo/eln/openbis.py b/nomad/datamodel/metainfo/eln/openbis.py index bb47176bb3a1a38bf36c41a9fc2303bac5c2a843..8f6380862478969eca16b7a838aec90fd83cdf01 100644 --- a/nomad/datamodel/metainfo/eln/openbis.py +++ b/nomad/datamodel/metainfo/eln/openbis.py @@ -138,76 +138,67 @@ class OpenbisEntry(EntryData): else: # Initializing pybis object try: - from pybis import Openbis + from nomad_openbis.openbis import OpenbisHandler - openbis = Openbis(self.project_url, verify_certificates=False) - except Exception: - self._clear_login_info(archive) - raise OpenbisImportError( - 'Failed to connect to the openbis server. Check the project url to be correct.' - ) - - try: - openbis.login(self.username, self.password, save_token=True) - except Exception: - self._clear_login_info(archive) - raise OpenbisImportError( - 'Failed to login to the openbis server. Check the username and password to be correct.' - ) - - # remove potential old content - self.spaces.clear() - - try: - spaces = openbis.get_spaces() - except Exception: - self._clear_login_info(archive) - raise OpenbisImportError( - 'Failed to fetch spaces. The pybis package might have been changed.' - ) - - # parsing the content in the spaces - for space in spaces: - space_element = OpenbisSpace() - space_element.m_update_from_dict(space.attrs.all()) - - try: - projects = space.get_projects() - except Exception: - self._clear_login_info(archive) - raise OpenbisImportError( - 'Failed to fetch projects. The pybis package might have been changed.' - ) - for project in projects: - project_element = OpenbisProject() - project_element.m_update_from_dict(project.attrs.all()) - space_element.projects.append(project_element) + with OpenbisHandler( + self.project_url, self.username, self.password, archive, logger + ) as handler: + # remove potential old content + self.spaces.clear() try: - experiments = project.get_experiments() + spaces = handler.openbis.get_spaces() except Exception: self._clear_login_info(archive) raise OpenbisImportError( - 'Failed to fetch experiments. The pybis package might have been changed.' + 'Failed to fetch spaces. The pybis package might have been changed.' ) - for experiment in experiments: - experiment_element = OpenbisExperiment() - experiment_element.m_update_from_dict(experiment.attrs.all()) - try: - experiment_element.download_files( - experiment, archive, logger - ) - except Exception as e: - logger.error('Failed to download attachments.', exec_info=e) - - project_element.experiments.append(experiment_element) - self.spaces.append(space_element) + # parsing the content in the spaces + for space in spaces: + space_element = OpenbisSpace() + space_element.m_update_from_dict(space.attrs.all()) - openbis.logout() + try: + projects = space.get_projects() + except Exception: + self._clear_login_info(archive) + raise OpenbisImportError( + 'Failed to fetch projects. The pybis package might have been changed.' + ) + for project in projects: + project_element = OpenbisProject() + project_element.m_update_from_dict(project.attrs.all()) + space_element.projects.append(project_element) + + try: + experiments = project.get_experiments() + except Exception: + self._clear_login_info(archive) + raise OpenbisImportError( + 'Failed to fetch experiments. The pybis package might have been changed.' + ) + for experiment in experiments: + experiment_element = OpenbisExperiment() + experiment_element.m_update_from_dict( + experiment.attrs.all() + ) + try: + experiment_element.download_files( + experiment, archive, logger + ) + except Exception as e: + logger.error( + 'Failed to download attachments.', exec_info=e + ) + + project_element.experiments.append(experiment_element) + + self.spaces.append(space_element) + except Exception as e: + raise OpenbisImportError(e) self._clear_login_info(archive) - logger.info('Transferring openbis data is finished.') diff --git a/pyproject.toml b/pyproject.toml index fa2eb4608da33fb5b41572a4f4896eec37156d59..3feaa2d5c768b7894593b4154dec5297ffce6575 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,7 +65,7 @@ parsing = [ 'asr==0.4.1', 'h5py==3.11.0', 'netCDF4==1.6.5', - 'pybis@git+https://github.com/FAIRmat-NFDI/fairmat-pybis.git@91039c2a1df364c88ab7e284b59c43ec42f18370', + 'nomad-openbis', 'pynxtools[convert]==0.3.1', 'quippy-ase==0.9.14', 'rdkit==2023.9.5', diff --git a/requirements-dev.txt b/requirements-dev.txt index 71a25d4c4561c7f2700418af6ee639cbfe483a6f..8dd1e510d41f0616f4819b8f83941e169200fa66 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -54,7 +54,7 @@ contourpy==1.2.1 # via matplotlib, -r requirements.txt coverage==7.5.3 # via pytest-cov cryptography==42.0.8 # via jwcrypto, pyjwt, pyopenssl, rfc3161ng, secretstorage, -r requirements.txt cycler==0.12.1 # via matplotlib, -r requirements.txt -dask==2024.6.0 # via hyperspy, kikuchipy, orix, pyxem, rosettasciio, -r requirements.txt +dask==2024.6.1 # via hyperspy, kikuchipy, orix, pyxem, rosettasciio, -r requirements.txt debugpy==1.8.1 # via ipykernel, -r requirements.txt decorator==5.1.1 # via ipyparallel, ipython, validators, -r requirements.txt defusedxml==0.7.1 # via nbconvert, -r requirements.txt @@ -207,6 +207,7 @@ nionswift==16.11.0 # via pynxtools-em, -r requirements.txt nionswift-io==15.2.1 # via nionswift, -r requirements.txt nionui==7.1.1 # via nionswift, -r requirements.txt nionutils==4.11.0 # via niondata, nionswift, nionswift-io, nionui, -r requirements.txt +nomad-openbis==1.0.0 # via -r requirements.txt, nomad-lab (pyproject.toml) notebook==7.1.3 # via jupyter, -r requirements.txt notebook-shim==0.2.4 # via jupyterlab, notebook, -r requirements.txt nptyping==1.4.4 # via -r requirements.txt, nomad-lab (pyproject.toml) @@ -225,7 +226,7 @@ packaging==24.1 # via build, dask, deprecation, f90wrap, gunicorn, hyp paginate==0.5.6 # via mkdocs-material palettable==3.3.3 # via pymatgen, -r requirements.txt pamela==1.1.0 # via jupyterhub, -r requirements.txt -pandas==1.5.3 # via ifes-apt-tc-data-modeling, panedr, pybis, pymatgen, pynxtools, radioactivedecay, xarray, -r requirements.txt, nomad-lab (pyproject.toml) +pandas==1.5.3 # via ifes-apt-tc-data-modeling, nomad-openbis, panedr, pymatgen, pynxtools, radioactivedecay, xarray, -r requirements.txt, nomad-lab (pyproject.toml) pandocfilters==1.5.1 # via nbconvert, -r requirements.txt panedr==0.8.0 # via -r requirements.txt, nomad-lab (pyproject.toml) parmed==4.2.2 # via -r requirements.txt, nomad-lab (pyproject.toml) @@ -251,7 +252,6 @@ pure-eval==0.2.2 # via stack-data, -r requirements.txt py-cpuinfo==9.0.0 # via blosc2, tables, -r requirements.txt pyasn1==0.6.0 # via pyasn1-modules, rfc3161ng, -r requirements.txt pyasn1-modules==0.4.0 # via rfc3161ng, -r requirements.txt -pybis @ git+https://github.com/FAIRmat-NFDI/fairmat-pybis.git@91039c2a1df364c88ab7e284b59c43ec42f18370 # via -r requirements.txt, nomad-lab (pyproject.toml) pybtex==0.24.0 # via pymatgen, -r requirements.txt pycifrw==4.4.6 # via diffpy-structure, -r requirements.txt pycodestyle==2.12.0 # via nomad-lab (pyproject.toml) @@ -283,7 +283,7 @@ pytest-split==0.8.2 # via nomad-lab (pyproject.toml) pytest-timeout==2.3.1 # via nomad-lab (pyproject.toml) pytest-xdist==3.6.1 # via nomad-lab (pyproject.toml) python-box==6.1.0 # via rosettasciio, -r requirements.txt -python-dateutil==2.9.0.post0 # via arrow, celery, elasticsearch-dsl, ghp-import, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, mkdocs-macros-plugin, pandas, pybis, rfc3161ng, rosettasciio, -r requirements.txt +python-dateutil==2.9.0.post0 # via arrow, celery, elasticsearch-dsl, ghp-import, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, mkdocs-macros-plugin, nomad-openbis, pandas, rfc3161ng, rosettasciio, -r requirements.txt python-dotenv==1.0.1 # via uvicorn, -r requirements.txt python-gitlab==2.10.1 # via nomad-lab (pyproject.toml) python-json-logger==2.0.2 # via jupyter-events, jupyter-telemetry, -r requirements.txt, nomad-lab (pyproject.toml) @@ -306,7 +306,7 @@ rdkit==2023.9.5 # via -r requirements.txt, nomad-lab (pyproject.toml) readme-renderer==43.0 # via twine recommonmark==0.7.1 # via -r requirements.txt, nomad-lab (pyproject.toml) regex==2024.5.15 # via mkdocs-material -requests==2.31.0 # via docker, hyperspy, jupyterhub, jupyterlab-server, mkdocs-material, oauthenticator, optimade, pooch, pybis, pymatgen, python-gitlab, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, twine, -r requirements.txt, nomad-lab (pyproject.toml) +requests==2.31.0 # via docker, hyperspy, jupyterhub, jupyterlab-server, mkdocs-material, nomad-openbis, oauthenticator, optimade, pooch, pymatgen, python-gitlab, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, twine, -r requirements.txt, nomad-lab (pyproject.toml) requests-toolbelt==1.0.0 # via python-gitlab, python-keycloak, twine, -r requirements.txt rfc3161ng==2.1.3 # via -r requirements.txt, nomad-lab (pyproject.toml) rfc3339-validator==0.1.4 # via jsonschema, -r requirements.txt @@ -325,7 +325,7 @@ scipy==1.13.1 # via ase, diffsims, findiff, griddataformats, hypersp secretstorage==3.3.3 # via keyring send2trash==1.8.3 # via jupyter-server, -r requirements.txt sentinels==1.0.0 # via mongomock, -r requirements.txt -setuptools==70.0.0 # via radioactivedecay, -r requirements.txt +setuptools==70.1.0 # via radioactivedecay, -r requirements.txt silx==2.1.0 # via pyfai, -r requirements.txt six==1.16.0 # via anytree, asttokens, basicauth, bleach, diffpy-structure, elasticsearch-dsl, html5lib, isodate, pybtex, python-dateutil, rdflib, rfc3339-validator, validators, -r requirements.txt smmap==5.0.1 # via gitdb, -r requirements.txt @@ -347,11 +347,11 @@ starlette==0.27.0 # via fastapi, -r requirements.txt structlog==24.2.0 # via -r requirements.txt, nomad-lab (pyproject.toml) sympy==1.12.1 # via findiff, hyperspy, pymatgen, radioactivedecay, -r requirements.txt tables==3.9.2 # via ifes-apt-tc-data-modeling, -r requirements.txt -tabulate==0.8.9 # via pybis, pymatgen, -r requirements.txt, nomad-lab (pyproject.toml) +tabulate==0.8.9 # via nomad-openbis, pymatgen, -r requirements.txt, nomad-lab (pyproject.toml) tenacity==8.4.1 # via plotly, -r requirements.txt termcolor==2.4.0 # via mkdocs-macros-plugin terminado==0.18.1 # via jupyter-server, jupyter-server-terminals, -r requirements.txt -texttable==1.7.0 # via pybis, -r requirements.txt +texttable==1.7.0 # via nomad-openbis, -r requirements.txt threadpoolctl==3.5.0 # via mdanalysis, scikit-learn, -r requirements.txt tifffile==2024.6.18 # via h5grove, hyperspy, scikit-image, -r requirements.txt tinycss2==1.3.0 # via nbconvert, -r requirements.txt @@ -373,8 +373,8 @@ tzlocal==5.2 # via nionswift, pynxtools-em, -r requirements.txt uncertainties==3.2.1 # via lmfit, pymatgen, -r requirements.txt unidecode==1.3.2 # via -r requirements.txt, nomad-lab (pyproject.toml) uri-template==1.3.0 # via jsonschema, -r requirements.txt -urllib3==1.26.19 # via docker, elasticsearch, pybis, requests, -r requirements.txt -uv==0.2.13 # via nomad-lab (pyproject.toml) +urllib3==1.26.19 # via docker, elasticsearch, nomad-openbis, requests, -r requirements.txt +uv==0.2.18 # via nomad-lab (pyproject.toml) uvicorn==0.30.1 # via h5grove, -r requirements.txt, nomad-lab (pyproject.toml) uvloop==0.19.0 # via uvicorn, -r requirements.txt validators==0.18.2 # via -r requirements.txt, nomad-lab (pyproject.toml) diff --git a/requirements.txt b/requirements.txt index 4322291cec7eb257315e8f485bb2d10f086e1901..03f266c39d1061ba36214bdf58a0c005c5ea1708 100644 --- a/requirements.txt +++ b/requirements.txt @@ -47,7 +47,7 @@ commonmark==0.9.1 # via recommonmark contourpy==1.2.1 # via matplotlib cryptography==42.0.8 # via jwcrypto, pyjwt, pyopenssl, rfc3161ng cycler==0.12.1 # via matplotlib -dask==2024.6.0 # via hyperspy, kikuchipy, orix, pyxem, rosettasciio +dask==2024.6.1 # via hyperspy, kikuchipy, orix, pyxem, rosettasciio debugpy==1.8.1 # via ipykernel decorator==5.1.1 # via ipyparallel, ipython, validators defusedxml==0.7.1 # via nbconvert @@ -175,6 +175,7 @@ nionswift==16.11.0 # via pynxtools-em nionswift-io==15.2.1 # via nionswift nionui==7.1.1 # via nionswift nionutils==4.11.0 # via niondata, nionswift, nionswift-io, nionui +nomad-openbis==1.0.0 # via nomad-lab (pyproject.toml) notebook==7.1.3 # via jupyter notebook-shim==0.2.4 # via jupyterlab, notebook nptyping==1.4.4 # via nomad-lab (pyproject.toml) @@ -192,7 +193,7 @@ orjson==3.10.5 # via h5grove, nomad-lab (pyproject.toml) packaging==24.1 # via dask, deprecation, f90wrap, gunicorn, hyperspy, ipykernel, jupyter-server, jupyterhub, jupyterlab, jupyterlab-server, matplotlib, mdanalysis, mongomock, nbconvert, pint, plotly, pooch, qtconsole, qtpy, scikit-image, silx, sphinx, tables, xarray, xraydb palettable==3.3.3 # via pymatgen pamela==1.1.0 # via jupyterhub -pandas==1.5.3 # via ifes-apt-tc-data-modeling, panedr, pybis, pymatgen, pynxtools, radioactivedecay, xarray, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), nomad-lab (pyproject.toml) +pandas==1.5.3 # via ifes-apt-tc-data-modeling, nomad-openbis, panedr, pymatgen, pynxtools, radioactivedecay, xarray, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), nomad-lab (pyproject.toml) pandocfilters==1.5.1 # via nbconvert panedr==0.8.0 # via nomad-lab (pyproject.toml) parmed==4.2.2 # via nomad-lab (pyproject.toml) @@ -215,7 +216,6 @@ pure-eval==0.2.2 # via stack-data py-cpuinfo==9.0.0 # via blosc2, tables pyasn1==0.6.0 # via pyasn1-modules, rfc3161ng pyasn1-modules==0.4.0 # via rfc3161ng -pybis @ git+https://github.com/FAIRmat-NFDI/fairmat-pybis.git@91039c2a1df364c88ab7e284b59c43ec42f18370 # via nomad-lab (pyproject.toml) pybtex==0.24.0 # via pymatgen pycifrw==4.4.6 # via diffpy-structure pycparser==2.22 # via cffi @@ -238,7 +238,7 @@ pyopenssl==24.1.0 # via certipy pyparsing==3.1.2 # via matplotlib, rdflib pyrsistent==0.20.0 # via jsonschema python-box==6.1.0 # via rosettasciio -python-dateutil==2.9.0.post0 # via arrow, celery, elasticsearch-dsl, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, pandas, pybis, rfc3161ng, rosettasciio +python-dateutil==2.9.0.post0 # via arrow, celery, elasticsearch-dsl, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, nomad-openbis, pandas, rfc3161ng, rosettasciio python-dotenv==1.0.1 # via uvicorn python-json-logger==2.0.2 # via jupyter-events, jupyter-telemetry, nomad-lab (pyproject.toml) python-keycloak==4.1.0 # via nomad-lab (pyproject.toml) @@ -257,7 +257,7 @@ radioactivedecay==0.5.1 # via ifes-apt-tc-data-modeling rdflib==5.0.0 # via nomad-lab (pyproject.toml) rdkit==2023.9.5 # via nomad-lab (pyproject.toml) recommonmark==0.7.1 # via nomad-lab (pyproject.toml) -requests==2.31.0 # via docker, hyperspy, jupyterhub, jupyterlab-server, oauthenticator, optimade, pooch, pybis, pymatgen, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), nomad-lab (pyproject.toml) +requests==2.31.0 # via docker, hyperspy, jupyterhub, jupyterlab-server, nomad-openbis, oauthenticator, optimade, pooch, pymatgen, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), nomad-lab (pyproject.toml) requests-toolbelt==1.0.0 # via python-keycloak rfc3161ng==2.1.3 # via nomad-lab (pyproject.toml) rfc3339-validator==0.1.4 # via jsonschema @@ -272,7 +272,7 @@ scikit-learn==1.5.0 # via kikuchipy, matid, pyxem, nomad-lab (pyproject.to scipy==1.13.1 # via ase, diffsims, findiff, griddataformats, hyperspy, kikuchipy, lmfit, matid, mdanalysis, niondata, nionswift, orix, pyfai, pymatgen, pyxem, radioactivedecay, scikit-image, scikit-learn, sparse, xraydb, nomad-lab (pyproject.toml) send2trash==1.8.3 # via jupyter-server sentinels==1.0.0 # via mongomock -setuptools==70.0.0 # via radioactivedecay +setuptools==70.1.0 # via radioactivedecay silx==2.1.0 # via pyfai six==1.16.0 # via anytree, asttokens, basicauth, bleach, diffpy-structure, elasticsearch-dsl, html5lib, isodate, pybtex, python-dateutil, rdflib, rfc3339-validator, validators smmap==5.0.1 # via gitdb @@ -294,10 +294,10 @@ starlette==0.27.0 # via fastapi structlog==24.2.0 # via nomad-lab (pyproject.toml) sympy==1.12.1 # via findiff, hyperspy, pymatgen, radioactivedecay tables==3.9.2 # via ifes-apt-tc-data-modeling -tabulate==0.8.9 # via pybis, pymatgen, nomad-lab (pyproject.toml) +tabulate==0.8.9 # via nomad-openbis, pymatgen, nomad-lab (pyproject.toml) tenacity==8.4.1 # via plotly terminado==0.18.1 # via jupyter-server, jupyter-server-terminals -texttable==1.7.0 # via pybis +texttable==1.7.0 # via nomad-openbis threadpoolctl==3.5.0 # via mdanalysis, scikit-learn tifffile==2024.6.18 # via h5grove, hyperspy, scikit-image tinycss2==1.3.0 # via nbconvert @@ -317,7 +317,7 @@ tzlocal==5.2 # via nionswift, pynxtools-em uncertainties==3.2.1 # via lmfit, pymatgen unidecode==1.3.2 # via nomad-lab (pyproject.toml) uri-template==1.3.0 # via jsonschema -urllib3==1.26.19 # via docker, elasticsearch, pybis, requests +urllib3==1.26.19 # via docker, elasticsearch, nomad-openbis, requests uvicorn==0.30.1 # via h5grove, nomad-lab (pyproject.toml) uvloop==0.19.0 # via uvicorn validators==0.18.2 # via nomad-lab (pyproject.toml) diff --git a/tests/datamodel/metainfo/eln/test_openbis.py b/tests/datamodel/metainfo/eln/test_openbis.py index cfc4f14fae408e5b094accfe1e6d736fa0cc1e6f..ae9f3712d6451143a9be229d8aeea40f8812df10 100644 --- a/tests/datamodel/metainfo/eln/test_openbis.py +++ b/tests/datamodel/metainfo/eln/test_openbis.py @@ -20,7 +20,7 @@ from urllib.parse import urlparse import pytest import json -import pybis +from nomad_openbis import openbis from nomad.datamodel import ServerContext from nomad.datamodel.metainfo.eln.openbis import OpenbisEntry, OpenbisImportError @@ -151,7 +151,7 @@ def test_openbis( return mock_response # patching openbis attrs - monkeypatch.setattr(pybis, 'Openbis', mock_openbis_response) + monkeypatch.setattr(openbis, 'Openbis', mock_openbis_response) data = ExampleData(main_author=user1) data.create_upload(upload_id='test_upload_id', published=False)