def resolve_params(obj, params, default=missing): """Given a dictionary of keyword arguments, return the same dictionary except with values enclosed in `< >` resolved to attributes on `obj`. """ param_values = {} for name, attr_tpl in params.items(): attr_name = tpl(str(attr_tpl)) if attr_name: if attr_name == "slug": lang = get_language() attribute_value = get_value(obj, f"{attr_name}.{lang}") if not attribute_value: attribute_value = get_value(obj, attr_name, default=default) else: attribute_value = get_value(obj, attr_name, default=default) if attribute_value is not missing: param_values[name] = attribute_value else: raise AttributeError( '{attr_name!r} is not a valid ' 'attribute of {obj!r}'.format(attr_name=attr_name, obj=obj), ) else: param_values[name] = attr_tpl return param_values
def test_tpl(tag, val): assert utils.tpl(tag) == val