예제 #1
0
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'
예제 #2
0
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