blob: f5463a60575d97f26eaa5f7c1d51631f33d35e3f [file] [log] [blame]
# -*- coding: utf-8 -*-
"""
jdebug
~~~~~~
Helper module to simplify jinja debugging. Use
:copyright: 2006 by Armin Ronacher.
:license: BSD, see LICENSE for more details.
"""
import os
import sys
import gc
from jinja import Environment
from jinja.parser import Parser
from jinja.lexer import Lexer
from jinja.translators.python import PythonTranslator
__all__ = ['e', 't', 'p', 'l', 'm']
_global_frame = sys._getframe()
e = Environment()
t = e.from_string
def p(x=None, f=None):
if x is None and f is not None:
x = e.loader.get_source(f)
print PythonTranslator(e, Parser(e, x, f).parse(), None).translate()
def l(x):
for item in e.lexer.tokenize(x):
print '%5s %-20s %r' % (item.lineno,
item.type,
item.value)
class MemoryGuard(object):
def __init__(self):
self.guarded_objects = {}
self.clear = self.guarded_objects.clear
def freeze(self):
self.clear()
for obj in gc.get_objects():
self.guarded_objects[id(obj)] = True
def get_delta(self):
frm = sys._getframe()
result = []
for obj in gc.get_objects():
if id(obj) not in self.guarded_objects and \
obj is not frm and obj is not result:
result.append(obj)
return result
m = MemoryGuard()
if __name__ == '__main__':
if len(sys.argv) > 1:
from jinja import FileSystemLoader
e.loader = FileSystemLoader(sys.argv[1])
if len(sys.argv) > 2:
p(f=sys.argv[2])
else:
p(sys.stdin.read())