Exemple #1
0
def test_genshi_nameconstant():
    from genshi.template.astutil import ASTCodeGenerator, parse
    from tg.renderers.genshi import GenshiRenderer

    # This checks genshi gets monkeypatched to fix it on Py34 if option is provided
    GenshiRenderer.create(Bunch({
        'templating.genshi.name_constant_patch': True,
        'use_dotted_templatenames': False,
        'auto_reload_templates': False,
        'paths': Bunch({'templates': '/tmp'})
    }), None)
    assert hasattr(ASTCodeGenerator, 'visit_NameConstant')

    astgen = ASTCodeGenerator(parse('range(10)', mode='eval'))
    for n in (False, True, None):
        astgen._new_line()
        astgen.visit_NameConstant(Bunch(value=n))
        line = str(astgen.line)
        assert line == str(n), line

    astgen._new_line()
    try:
        astgen.visit_NameConstant(Bunch(value='HELLO_WORLD'))
    except Exception as e:
        assert 'Unknown NameConstant' in str(e)
    else:
        assert False
Exemple #2
0
def test_genshi_nameconstant():
    from genshi.template.astutil import ASTCodeGenerator, parse
    from tg.renderers.genshi import GenshiRenderer

    # This checks genshi gets monkeypatched to fix it on Py34 if option is provided
    GenshiRenderer.create(
        Bunch(
            {
                "templating.genshi.name_constant_patch": True,
                "use_dotted_templatenames": False,
                "auto_reload_templates": False,
                "paths": Bunch({"templates": "/tmp"}),
            }
        ),
        None,
    )
    assert hasattr(ASTCodeGenerator, "visit_NameConstant")

    astgen = ASTCodeGenerator(parse("range(10)", mode="eval"))
    for n in (False, True, None):
        astgen._new_line()
        astgen.visit_NameConstant(Bunch(value=n))
        line = str(astgen.line)
        assert line == str(n), line

    astgen._new_line()
    try:
        astgen.visit_NameConstant(Bunch(value="HELLO_WORLD"))
    except Exception as e:
        assert "Unknown NameConstant" in str(e)
    else:
        assert False
Exemple #3
0
def _parse(source, mode='eval'):
    source = source.strip()
    if mode == 'exec':
        lines = [line.expandtabs() for line in source.splitlines()]
        if lines:
            first = lines[0]
            rest = dedent('\n'.join(lines[1:])).rstrip()
            if first.rstrip().endswith(':') and not rest[0].isspace():
                rest = '\n'.join(['    %s' % line for line in rest.splitlines()])
            source = '\n'.join([first, rest])
    if isinstance(source, unicode):
        source = '\xef\xbb\xbf' + source.encode('utf-8')
    return parse(source, mode)
Exemple #4
0
def _parse(source, mode="eval"):
    source = source.strip()
    if mode == "exec":
        lines = [line.expandtabs() for line in source.splitlines()]
        if lines:
            first = lines[0]
            rest = dedent("\n".join(lines[1:])).rstrip()
            if first.rstrip().endswith(":") and not rest[0].isspace():
                rest = "\n".join(["    %s" % line for line in rest.splitlines()])
            source = "\n".join([first, rest])
    if isinstance(source, unicode):
        source = "\xef\xbb\xbf" + source.encode("utf-8")
    return parse(source, mode)