diff --git a/nomad/graph/graph_reader.py b/nomad/graph/graph_reader.py index e738c4633e6ed7dd5f0bbb322e8af681e2f45977..4593f60f8ff73b8a2fa6fee199c9b84da304d3c8 100644 --- a/nomad/graph/graph_reader.py +++ b/nomad/graph/graph_reader.py @@ -310,7 +310,9 @@ def _if_exists(target_root: dict, path_stack: list) -> bool: @functools.lru_cache(maxsize=1024) def _convert_ref_to_path(ref: str, upload_id: str = None) -> list: # test module name - if '.' in (stripped_ref := ref.strip('.')): + if '.' in (stripped_ref := ref.strip('.')) or re.compile(r'^\w*(\.\w*)*$').match( + ref.split('/section_definitions')[0] + ): module_path, _ = split_python_definition(stripped_ref) return [Token.METAINFO, '.'.join(module_path[:-1])] + module_path[-1].split('/') @@ -2413,10 +2415,18 @@ class ArchiveReader(GeneralReader): if isinstance(original_def, SubSection): return node.replace(definition=original_def.sub_section.m_resolved()) + # todo: those three should be handled differently as they are not references + from nomad.datamodel.data import UserReference, AuthorReference + + from nomad.datamodel.datamodel import DatasetReference + # if not a quantity reference, early return if not ( isinstance(original_def, Quantity) and isinstance(original_def.type, Reference) + and not isinstance( + original_def.type, (UserReference, AuthorReference, DatasetReference) + ) ): return node diff --git a/nomad/graph/model.py b/nomad/graph/model.py index b6ac2b7f771562a647564fe2e35fc34817c6d1bf..6a1f9fc4192db9321a59b8e83aa9274617a4d614 100644 --- a/nomad/graph/model.py +++ b/nomad/graph/model.py @@ -319,9 +319,7 @@ def _normalise_pattern(pattern: FrozenSet[str]) -> FrozenSet[str]: # pylint: di pattern = frozenset(re.sub(r'\*+', '*', v) for v in pattern) pattern = frozenset(re.sub(r'\.', r'\.', v) for v in pattern) # replace wildcard with regex - pattern = frozenset( - v.replace('*', r'[\w\./]*').replace('?', r'[\w\./]') for v in pattern - ) + pattern = frozenset(v.replace('*', r'.*').replace('?', r'.?') for v in pattern) # add ^ and $ to the pattern if not present pattern = frozenset('^' + v if not v.startswith('^') else v for v in pattern) pattern = frozenset(v + '$' if not v.endswith('$') else v for v in pattern)