I'm using the inspect module in my python product to step back when doing some debugging. My code looks something like this:: class MyProduct: def hasRole(self, r): for i in range(25): try: print inspect.stack()[i][3], print inspect.stack()[i][2], except IndexError: break It works wonderfully well except when the caller of hasRole() is a Page Template defined with the PageTemplateFile function. (it might be equally bad with a ZODB persistent template I think). Does anybody know if and how if there is a way to step back and found out which template called hasRole() [ and maybe even which line] ? If I do this debugging now, it gives me something like: (hasRole:326, <expression>:1, __call__:47, evaluate:221, do_condition:636, interpret:234, do_defineSlot:694, interpret:234, no_tag:389, do_optTag:394, do_optTag_tal:409, interpret:234, do_useMacro:671, interpret:234, __call__:190, pt_render:96, _exec:106, _exec:343, _bindAndExec:343, __call__:306) -- Peter Bengtsson, work www.fry-it.com home www.peterbe.com hobby www.issuetrackerproduct.com