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
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
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)
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)