def test_warning_when_names_are_recalculated(capsys): page = Page(parts__foo=Fragment(_name='foo')) assert get_path_by_long_path(page) == {'parts/foo': ''} out, err = capsys.readouterr() assert out == '' set_declared_member(page, 'bar', Fragment(_name='bar')) assert get_path_by_long_path(page) == { 'parts/foo': '', 'bar': 'bar', } out, err = capsys.readouterr() assert out == '### A disturbance in the force... The namespace has been recalculated!\n'
def find_target(*, path, root): assert path.startswith(DISPATCH_PATH_SEPARATOR) p = path[1:] long_path = get_long_path_by_path(root).get(p) if long_path is None: long_path = p if long_path not in keys(get_path_by_long_path(root)): def format_paths(paths): return '\n '.join( ["''" if not x else x for x in keys(paths)]) raise InvalidEndpointPathException( f"Given path {path} not found.\n" f" Short alternatives:\n {format_paths(get_long_path_by_path(root))}\n" f" Long alternatives:\n {format_paths(get_path_by_long_path(root))}" ) node = root for part in long_path.split('/'): if part == '': continue next_node = node.iommi_bound_members().get(part) assert next_node is not None, f"Failed to traverse long path '{long_path}' (No bound value for '{part}')" node = next_node return node