Thanks Dino! I guess I'll try a workaround.
On Nov 7, 1:24 am, Dino Viehland <[EMAIL PROTECTED]> wrote: > The short answer is no – we realize frames is a common request and I do have > a prototype implementation of them. We’re still working on our 2.1 planning > but it might be available there w/ a command line option or it might be > something we could port to 2.0.1. > > The longer answer would be potentially with a lot of work and it could be > quite slow. You could walk every module, every function, every class and > attempt to gather up all the function objects in the world. Then you could > call PythonOps.FunctionGetTarget on each one of them. Finally you could do a > full .NET stack trace (new System.Diagnostics.StackTrace()) and attempt to > figure your caller by filtering out any IronPython/DLR frames. Finally once > you have that method you could see if that method is == the .Method property > of any of the delegates you got from FunctionGetTarget calls. And I’m not > even 100% sure if that’d work – the delegates for a PythonFunction might have > a different MethodInfo then the one in the stack trace but I’m not certain > (if this is the case it’d be due to the way CLR hides DynamicMethod > MethodInfo’s so only the creator has access to them – you might be able to > use some hack like a name comparison heuristic or private reflection or > something to bring it all together). > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Ori Peleg > Sent: Thursday, November 06, 2008 2:27 PM > To: [EMAIL PROTECTED] > Subject: [IronPython] Porting from CPython: Figuring out the calling code's > directory > > Hi, > > I'm porting Testoob to IronPython and have a module function that needs to > know the filename where the code calling it is defined. > > In CPython I get the current frame with sys._getframe(), then climb > the stack with frame.f_back until I find a different file: > > def _first_external_frame(): > import sys > > # find the first frame with a filename different than this one > frame = sys._getframe() > while frame.f_globals["__file__"] == __file__: > frame = frame.f_back > > return frame > > def _calling_module_directory(): > from os.path import dirname, normpath > return normpath(dirname(_first_external_frame().f_globals["__file__"])) > > I know I can't climb the stack in IronPython, but is there another way > to do it? Maybe some available .NET assembly metadata? > > BTW - the use case is for building test suites: you can have a > subpackage of tests and define __init__.py like this: > > def suite(): > import testoob > return testoob.collecting.collect_from_files("test_*.py") > > Thanks, > orip. > > -- > Check out my blog:http://orip.org > > _______________________________________________ > Users mailing list > [EMAIL PROTECTED]://lists.ironpython.com/listinfo.cgi/users-ironpython.com _______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com