blob: 219c876c65e4e5d55025ba48b6c201944d62bffe [file] [log] [blame]
Armin Ronacher19863ef2007-03-02 07:07:57 +01001# -*- coding: utf-8 -*-
2"""
3 jdebug
4 ~~~~~~
5
6 Helper module to simplify jinja debugging. Use
7
8 :copyright: 2006 by Armin Ronacher.
9 :license: BSD, see LICENSE for more details.
10"""
Armin Ronachera6901462007-03-29 20:03:40 +020011import os
12import sys
Armin Ronacher116b91c2007-11-10 12:40:38 +010013import gc
Armin Ronacher19863ef2007-03-02 07:07:57 +010014from jinja import Environment
15from jinja.parser import Parser
Armin Ronacherb9c8ae12007-03-20 00:14:10 +010016from jinja.lexer import Lexer
Armin Ronacher19863ef2007-03-02 07:07:57 +010017from jinja.translators.python import PythonTranslator
18
19
Armin Ronacher116b91c2007-11-10 12:40:38 +010020__all__ = ['e', 't', 'p', 'l', 'm']
Armin Ronacher19863ef2007-03-02 07:07:57 +010021
Armin Ronacher525c7042007-11-10 13:47:56 +010022
23_global_frame = sys._getframe()
Armin Ronacher19863ef2007-03-02 07:07:57 +010024e = Environment()
25t = e.from_string
26
Armin Ronachera6901462007-03-29 20:03:40 +020027
Armin Ronacherfb5bebc2007-04-27 18:24:19 +020028def p(x=None, f=None):
29 if x is None and f is not None:
30 x = e.loader.get_source(f)
Armin Ronacher1cc232c2007-09-07 17:52:41 +020031 print PythonTranslator(e, Parser(e, x, f).parse(), None).translate()
Armin Ronacherb9c8ae12007-03-20 00:14:10 +010032
33def l(x):
Armin Ronacher1cc232c2007-09-07 17:52:41 +020034 for token in e.lexer.tokenize(x):
35 print '%5s %-20s %r' % (item.lineno,
36 item.type,
37 item.value)
Armin Ronacherfb5bebc2007-04-27 18:24:19 +020038
Armin Ronacher116b91c2007-11-10 12:40:38 +010039class MemoryGuard(object):
40
41 def __init__(self):
42 self.guarded_objects = {}
43 self.clear = self.guarded_objects.clear
44
45 def freeze(self):
46 self.clear()
Armin Ronacher116b91c2007-11-10 12:40:38 +010047 for obj in gc.get_objects():
48 self.guarded_objects[id(obj)] = True
49
50 def get_delta(self):
Armin Ronacher525c7042007-11-10 13:47:56 +010051 frm = sys._getframe()
Armin Ronacher116b91c2007-11-10 12:40:38 +010052 result = []
53 for obj in gc.get_objects():
Armin Ronacher525c7042007-11-10 13:47:56 +010054 if id(obj) not in self.guarded_objects and \
55 obj is not frm and obj is not result:
Armin Ronacher116b91c2007-11-10 12:40:38 +010056 result.append(obj)
57 return result
58
59
60m = MemoryGuard()
61
62
Armin Ronacherfb5bebc2007-04-27 18:24:19 +020063if __name__ == '__main__':
64 if len(sys.argv) > 1:
65 from jinja import FileSystemLoader
66 e.loader = FileSystemLoader(sys.argv[1])
67 if len(sys.argv) > 2:
68 p(f=sys.argv[2])
69 else:
70 p(sys.stdin.read())