Beispiel #1
0
def dict_to_path(data):

    if not data:
        raise SpilException('[dict_to_path] Data is empty')

    data = data.copy()

    debug('Data: {}'.format(data))

    # setting defaults
    for key in data.keys():
        if not data.get(key) and path_defaults.get(key):
            data[key] = path_defaults.get(key)

    # adding defaults
    subtype = get_sidtype(data)

    # reverse path mapping
    for key, value in six.iteritems(data):
        if key == "project":
            for project, project_sid in path_mapping[key].items():
                if os.path.normcase(project_sid) == value:
                    data[key] = project
        elif value and path_mapping.get(key):
            mapping = path_mapping.get(key)
            data[key] = utils.get_key(mapping, value)

    debug('sidtype: {}'.format(subtype))

    pattern = path_templates.get(subtype)

    debug('pattern: {}'.format(pattern))

    if not pattern:
        raise SpilException(
            '[dict_to_path] Unable to find pattern for sidtype: "{}" \nGiven data: "{}"'
            .format(subtype, data))

    template = Template(subtype, pattern)
    template.template_resolver = resolvers

    debug('template: {}'.format(template))

    if not template:
        raise SpilException('toe')

    # adding template specific defaults
    for key in template.keys():
        if key not in data.keys() and path_defaults.get(key):
            data[key] = path_defaults.get(key)

    debug('data after path_defaults: {}'.format(data))
    path = template.format(data)

    debug('found: {}'.format(path))

    return path
Beispiel #2
0
def test_format(pattern, data, expected):
    '''Format data against pattern.'''
    template = Template('test', pattern)
    formatted = template.format(data)
    assert formatted == expected
Beispiel #3
0
def test_format_failure(pattern, data):
    '''Format incomplete data against pattern.'''
    template = Template('test', pattern)
    with pytest.raises(FormatError):
        template.format(data)
Beispiel #4
0
def test_format_failure(pattern, data):
    '''Format incomplete data against pattern.'''
    template = Template('test', pattern)
    with pytest.raises(FormatError):
        template.format(data)
Beispiel #5
0
def test_format(pattern, data, expected):
    '''Format data against pattern.'''
    template = Template('test', pattern)
    formatted = template.format(data)
    assert formatted == expected