[IronPython] creating a scope for embedded scripts to run in

Fuzzyman fuzzyman at voidspace.org.uk
Tue Nov 13 14:54:17 CET 2007


Hello Toni,

I don't have the API docs to hand - but what you want to do is to 
effectively execute an import statement in your namespace.

There may be an 'Import' method on the api somewhere, or maybe you can 
just execute the corresponding snippet of code in your namespace as part 
of initialising it.

Michael
http://www.manning.com/foord

Toni Alatalo wrote:

>Hi,
>
>I've been struggling a lot with trying to create a scope / namespace / 
>environment / something for embedded scripts to run in.
>
>Putting in instances with (in 2.0) SetVariable is fine, but so far I've 
>not managed to put classes there (I wish classes were objects like in 
>Python so things would just work .. in fact I'm considering porting this 
>script server thing other people have earlier started as c# to ironpy to 
>perhaps get rid of these probs :)
>
>So I hope there is either something nice in the new Microsoft.Scripting 
>API that I've not found yet, or something in the .net reflection system 
>that am overlooking. Have tried this kind of things:
>
>System.Type Timer = new 
>System.Threading.Timer((System.Threading.TimerCallback)this.DummyTimerCallback).GetType();
>
>Script.SetVariable("Timer", Timer);
>
>.. but of course that just puts the (useless?) reflection class to the 
>namespace, not the actual class that could be constructed? Perhaps that 
>typeinfo-type can be used to instanciate with some Invoke thing, but 
>obviously I don't want to expose that to scripters. Dunno if I could hide 
>that in some wrapper funcs implemented on the py side.
>
>Previously I've used this kind of technique to expose some modules for 
>completely trusted scripts: (this from 1.1, in a project where we used 
>Mogre - we are not using it in this project)
>
>Mogre.Timer t = new Mogre.Timer(); //just to get the mogre module
>python.LoadAssembly(t.GetType().Assembly); //gives 'Mogre'
>
>so after that in 1.1 'import Mogre' worked in the scripts and that was 
>fine there.
>
>but now I'd like to give the scripts Threading.Timer, but not the whole 
>System assembly.
>
>I've seen the CreateModule etc. methods in ipy, and also now the new 
>CreateScope thing in Microsoft.Scripting, but did not find any 
>documentation on that - and anyway the same problem seems to be there that 
>I can't put references to classes as values in the scopes.
>
>Should I indeed try porting the whole thing to IronPython to perhaps get 
>rid of this prob., or is there some nice way to expose assemblies or parts 
>of them? Sorry if this is FAQ stuff but I did not find this in any of the 
>embedding examples etc.
>
>patiently looking forward to be shown the right path,
>~Toni
>_______________________________________________
>Users mailing list
>Users at lists.ironpython.com
>http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>  
>




More information about the Ironpython-users mailing list