diff --git a/.gitignore b/.gitignore index 0c572cedf6a9d04b282f94fb3e5a9f9109265311..dfafb89a9f4b50fab484362d4def44342a9370f4 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ build/ dist/ setup.json parser.osio.log +gui/src/metainfo.json diff --git a/dependencies/parsers/amber b/dependencies/parsers/amber index 56e9412d0d322fd88240fe2af41716a0016831c7..e7077c9a824e01b45b0e4989858ecd35f59f4cc7 160000 --- a/dependencies/parsers/amber +++ b/dependencies/parsers/amber @@ -1 +1 @@ -Subproject commit 56e9412d0d322fd88240fe2af41716a0016831c7 +Subproject commit e7077c9a824e01b45b0e4989858ecd35f59f4cc7 diff --git a/dependencies/parsers/charmm b/dependencies/parsers/charmm index 7decbdcf25ef48b019bde17c472f54d65a124c9a..cc6c9545300cf6ea3347357fedffc6798415a299 160000 --- a/dependencies/parsers/charmm +++ b/dependencies/parsers/charmm @@ -1 +1 @@ -Subproject commit 7decbdcf25ef48b019bde17c472f54d65a124c9a +Subproject commit cc6c9545300cf6ea3347357fedffc6798415a299 diff --git a/dependencies/parsers/dl-poly b/dependencies/parsers/dl-poly index 059d4c7f1a452383d67f0ecf0c9bc267580083dc..fa54fe567a1250af3009ecc9692d14c64a399f29 160000 --- a/dependencies/parsers/dl-poly +++ b/dependencies/parsers/dl-poly @@ -1 +1 @@ -Subproject commit 059d4c7f1a452383d67f0ecf0c9bc267580083dc +Subproject commit fa54fe567a1250af3009ecc9692d14c64a399f29 diff --git a/dependencies/parsers/gromacs b/dependencies/parsers/gromacs index f7f156204c16b54e4df998a8a275bcf4a5aaf901..2310b63ff3904ddd6f912c32789568787c6ab250 160000 --- a/dependencies/parsers/gromacs +++ b/dependencies/parsers/gromacs @@ -1 +1 @@ -Subproject commit f7f156204c16b54e4df998a8a275bcf4a5aaf901 +Subproject commit 2310b63ff3904ddd6f912c32789568787c6ab250 diff --git a/dependencies/parsers/gromos b/dependencies/parsers/gromos index 8d896ede93e794d0fdb905e42281ef7c871bc05d..b7d913f0d8f82a9bb564e346bb60f66008ac791b 160000 --- a/dependencies/parsers/gromos +++ b/dependencies/parsers/gromos @@ -1 +1 @@ -Subproject commit 8d896ede93e794d0fdb905e42281ef7c871bc05d +Subproject commit b7d913f0d8f82a9bb564e346bb60f66008ac791b diff --git a/dependencies/parsers/namd b/dependencies/parsers/namd index 97b653e3fe695775f53a96249a0bb9ad694ef742..a741cfe607e9dfd1f2d65aeddbcc4bc5a15bbc13 160000 --- a/dependencies/parsers/namd +++ b/dependencies/parsers/namd @@ -1 +1 @@ -Subproject commit 97b653e3fe695775f53a96249a0bb9ad694ef742 +Subproject commit a741cfe607e9dfd1f2d65aeddbcc4bc5a15bbc13 diff --git a/dependencies/parsers/tinker b/dependencies/parsers/tinker index 85cc99b320454f8c8a68bdf376e128c156cf2ac2..7f5fc6a358dc7e40e716cc5205fa04e8cf9c6d6c 160000 --- a/dependencies/parsers/tinker +++ b/dependencies/parsers/tinker @@ -1 +1 @@ -Subproject commit 85cc99b320454f8c8a68bdf376e128c156cf2ac2 +Subproject commit 7f5fc6a358dc7e40e716cc5205fa04e8cf9c6d6c diff --git a/dependencies/python_common b/dependencies/python_common index cf843eda3e4650bc240eb0d1a1ab5b0cea6dda96..afdd0937aab2681ca3912cfd9d95c7633fdcd7b9 160000 --- a/dependencies/python_common +++ b/dependencies/python_common @@ -1 +1 @@ -Subproject commit cf843eda3e4650bc240eb0d1a1ab5b0cea6dda96 +Subproject commit afdd0937aab2681ca3912cfd9d95c7633fdcd7b9 diff --git a/nomad/app/api/metainfo.py b/nomad/app/api/metainfo.py index be6d05cd38f1b1300287251a2c5ae4b50987e104..0ef4467922b2428d7d7cc3d32a300dbb570a9a63 100644 --- a/nomad/app/api/metainfo.py +++ b/nomad/app/api/metainfo.py @@ -102,21 +102,12 @@ class LegacyMetainfoResource(Resource): Other required packages might also be returned, e.g. a parser might organize its definitions in multiple packages. ''' - package = metainfo_package_name - if package.endswith('.nomadmetainfo.json'): - package = package[:-19] - if package.endswith('.json'): - package = package[:-5] - try: - python_package_name, _ = python_package_mapping(package) - python_package_name = '.'.join(python_package_name.split('.')[:-1]) - python_module = importlib.import_module(python_package_name) - metainfo = getattr(python_module, 'm_env') + metainfo = LegacyMetainfoEnvironment.from_legacy_package_path(metainfo_package_name) except (ImportError, KeyError, FileNotFoundError, AttributeError): - abort(404, message='Metainfo package %s does not exist.' % package) + abort(404, message='Metainfo package %s does not exist.' % metainfo_package_name) if isinstance(metainfo, LegacyMetainfoEnvironment): return metainfo.to_legacy_dict(metainfo.packages) else: - abort(404, message='Metainfo package %s is not a legacy package.' % package) + abort(404, message='Metainfo package %s is not a legacy package.' % metainfo_package_name) diff --git a/nomad/cli/dev.py b/nomad/cli/dev.py index 2e5232b8a2ec8ba756c574eccf40a2634d28e18d..9dea162cc95e0d2b9a1de4967c94d7eca94e356d 100644 --- a/nomad/cli/dev.py +++ b/nomad/cli/dev.py @@ -43,6 +43,22 @@ def qa(skip_tests: bool, exitfirst: bool): sys.exit(ret_code) +@dev.command(help='Generates a JSON with all metainfo.') +def metainfo(): + import json + + from nomad.metainfo import Package + from nomad.parsing.parsers import parsers + + # Ensure all metainfo is loaded + for parser in parsers: + _ = parser.metainfo_env + + data = {key: value.m_to_dict() for key, value in Package.registry.items()} + + print(json.dumps(data, indent=2)) + + @dev.command(help='Generates source-code for the new metainfo from .json files of the old.') @click.argument('path', nargs=-1) def legacy_metainfo(path): diff --git a/nomad/metainfo/legacy.py b/nomad/metainfo/legacy.py index 57b50bc011b789ba4c35a0a11084530216595871..a2130efd102339d83256795d22c75ebe3dbda7e2 100644 --- a/nomad/metainfo/legacy.py +++ b/nomad/metainfo/legacy.py @@ -22,6 +22,7 @@ from typing import cast, Dict, List, Union, Any, Set, Iterable, Tuple import numpy as np from pint.errors import UndefinedUnitError import os.path +import importlib from nomadcore.local_meta_info import loadJsonFile, InfoKindEl, InfoKindEnv @@ -105,6 +106,22 @@ class LegacyMetainfoEnvironment(Environment): the environment. ''' + @staticmethod + def from_legacy_package_path(path): + metainfo_package_name = os.path.basename(path) + package = metainfo_package_name + if package.endswith('.nomadmetainfo.json'): + package = package[:-19] + if package.endswith('.json'): + package = package[:-5] + + python_package_name, _ = python_package_mapping(package) + python_package_name = '.'.join(python_package_name.split('.')[:-1]) + python_module = importlib.import_module(python_package_name) + metainfo = getattr(python_module, 'm_env') + + return metainfo + legacy_package_name = Quantity(type=str) def __init__(self, *args, **kwargs): diff --git a/nomad/search.py b/nomad/search.py index 06cec0bbcc6f2e60f857b375a17577f06bafa5e9..94e29769212554611ae4e9e6df02e6ea8e769eff 100644 --- a/nomad/search.py +++ b/nomad/search.py @@ -23,7 +23,7 @@ from elasticsearch.exceptions import NotFoundError from datetime import datetime import json -from nomad import config, datamodel, infrastructure, datamodel, utils +from nomad import config, datamodel, infrastructure, utils from nomad.metainfo.search_extension import search_quantities, metrics, order_default_quantities