[IronPython] hosting and SetVariable

Slide slide.o.mix at gmail.com
Thu May 29 21:52:21 CEST 2008


ScriptScope.Item doesn't have my class definition in there. Perhaps I
am not doing the initial setup correctly.


                    _runtime.Globals.ClearVariables();

                    _engine = _runtime.GetEngine("py");

                    foreach (KeyValuePair<string, object> obj in _objects)
                        _runtime.Globals.SetVariable(obj.Key, obj.Value);

                    _error_listener = new ScriptErrorListener();

                    // setup the paths to search for modules
                    List<string> paths = new List<string>();
                    paths.Add(Environment.CurrentDirectory);

paths.Add(Path.Combine(Environment.CurrentDirectory, "Lib"));
                    paths.Add(Path.GetDirectoryName(path));

                    string[] probe_paths =
Directory.GetDirectories(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));
                    paths.AddRange(probe_paths);

                    _engine.SetScriptSourceSearchPaths(paths.ToArray());

                    CompiledCode code =
_engine.CreateScriptSourceFromFile(path).Compile(_error_listener);
                    _scope = code.MakeOptimizedScope();
                    code.Execute(_scope);
                    _engine.PublishModule("__main__", _scope);

                    // add all the references the "Host" wanted.
                    foreach (string assembly in _assemblies)
                        _runtime.LoadAssembly(Assembly.LoadFrom(assembly));


The code I am passing in contains the following:

import ScriptTester

class MyClass(ScriptTester.ITest):
    def DoIt(self, msg):
        print msg

When I iterate over _scope.Items, I don't see "MyClass" in the list of items.

Thanks

On Thu, May 29, 2008 at 12:46 PM, Dino Viehland
<dinov at exchange.microsoft.com> wrote:
> Sorry, I didn't realize that was a recent addition.  Can you just iterate over ScriptScope.Items - I checked and it's there in B2 :).
>
> As for beta 3 the plan is sometime in June.
>
>
> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Slide
> Sent: Thursday, May 29, 2008 12:39 PM
> To: Discussion of IronPython
> Subject: Re: [IronPython] hosting and SetVariable
>
> That class is not available in Beta2. I also downloaded the latest
> source and checked the implementation of GetScope, it calls
> ScriptScope.Scope, which also doesn't exist in Beta2. Is Beta3 with
> all this stuff coming out soon?
>
> thanks
>
> On Thu, May 29, 2008 at 12:17 PM, Seshadri Pillailokam Vijayaraghavan
> <seshapv at microsoft.com> wrote:
>> It's fully qualified path is (Runtime\)'Microsoft.Scripting.Hosting.HostingHelpers'
>>
>>
>> -----Original Message-----
>> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Slide
>> Sent: Thursday, May 29, 2008 12:13 PM
>> To: Discussion of IronPython
>> Subject: Re: [IronPython] hosting and SetVariable
>>
>> It may be able to be accomplished with ObjectOperations. What I am
>> trying to do is find all the types defined in my ScriptScope and
>> determine if they are subclasses (or implementers) of another type. I
>> used to do this using the PythonType class with UnderlyingSystemType
>> and so forth, but all that stuff is gone in the beta 2 I downloaded.
>> Also, I didn't see HostingHelpers.GetScope anywhere, is this from an
>> external library (I checked Microsoft.Scripting,
>> Microsoft.Scripting.Core and the IronPython assemblies)
>>
>> On Thu, May 29, 2008 at 11:56 AM, Dino Viehland
>> <dinov at exchange.microsoft.com> wrote:
>>> Unfortunately there isn't any specific documentation.  Can what you used to do be accomplished with the ObjectOperations class?
>>>
>>> Otherwise there's a HostingHelpers.GetScope which you could use to get a Scope from a ScriptScope and you can probably re-use your old magic.
>>>
>>> -----Original Message-----
>>> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Slide
>>> Sent: Thursday, May 29, 2008 11:34 AM
>>> To: Discussion of IronPython
>>> Subject: Re: [IronPython] hosting and SetVariable
>>>
>>> Thanks that will be helpful. Is there any documentation specific to
>>> IronPython? I would like to do some introspection on modules and such
>>> (to retrieve types defined in the module and so forth) and I used to
>>> do that with some PythonType magic which doesn't seem to work anymore
>>> (ScriptScope is not convertable to Scope when calling Get__dict__).
>>>
>>> Thanks again!
>>>
>>> On Thu, May 29, 2008 at 10:11 AM, Seshadri Pillailokam Vijayaraghavan
>>> <seshapv at microsoft.com> wrote:
>>>> The latest Hosting API Spec is available at http://compilerlab.members.winisp.net/.
>>>> It's available as both doc (http://compilerlab.members.winisp.net/dlr-spec-hosting.doc) or PDF (http://compilerlab.members.winisp.net/dlr-spec-hosting.pdf).
>>>>
>>>> Thanks
>>>> Sesh
>>>> -----Original Message-----
>>>> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Slide
>>>> Sent: Thursday, May 29, 2008 8:42 AM
>>>> To: Discussion of IronPython
>>>> Subject: Re: [IronPython] hosting and SetVariable
>>>>
>>>> Apparently I need to update to the latest IP2.0 beta. I don't even see
>>>> CurrentManager.Globals, thanks for the info.
>>>>
>>>> On Thu, May 29, 2008 at 8:37 AM, Dino Viehland
>>>> <dinov at exchange.microsoft.com> wrote:
>>>>> What you want to do is put the variables in ScriptDomainManager.Globals/ScriptRuntime.Globals and then you can import them.  For example:
>>>>>
>>>>> ScriptDomainManager.CurrentManager.Globals.SetVariable("hello_world", "hi!");
>>>>>
>>>>> Then you can do:
>>>>>
>>>>> import hello_world
>>>>>
>>>>> and we'll pick it up from globals.  Just FYI IronPython.Hosting.PythonEngine is going away (along w/ CurrentEngine) so you're better off creating a ScriptRuntime and getting a ScriptEngine from it by name.
>>>>>
>>>>> -----Original Message-----
>>>>> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Slide
>>>>> Sent: Thursday, May 29, 2008 8:14 AM
>>>>> To: Discussion of IronPython
>>>>> Subject: [IronPython] hosting and SetVariable
>>>>>
>>>>> Perhaps this is just missing knowledge on my part, but here goes.
>>>>>
>>>>> I am using IP2.0 with the hosting API to add scripting support to my
>>>>> application. I use the following code to create my main module from
>>>>> the script file the user selects:
>>>>>
>>>>>  ICompiledCode code =
>>>>> IronPython.Hosting.PythonEngine.CurrentEngine.Compile(SourceUnit.CreateFileUnit(_context,
>>>>> path), _error_sink);
>>>>> __main__ = code.MakeModule("__main__") as ScriptScope;
>>>>>
>>>>> // create our module.
>>>>> ScriptDomainManager.CurrentManager.PublishModule(__main__, "__main__");
>>>>>
>>>>> // add all the references the "Host" wanted.
>>>>> foreach (string assembly in _assemblies)
>>>>>      Microsoft.Scripting.ClrModule.GetInstance().AddReference(Path.GetFileNameWithoutExtension(assembly));
>>>>>
>>>>> // set all the variables that the "Host" wanted set.
>>>>> foreach (KeyValuePair<string, object> obj in _objects)
>>>>>      __main__.SetVariable(obj.Key, obj.Value);
>>>>>
>>>>> The last foreach is setting up my object model which is available to
>>>>> my scripts. My problem arises when I want to use one of these
>>>>> variables from a script that is imported from the user selected script
>>>>> file.
>>>>>
>>>>> For instance, if I add an object _objects.Add("MyObj", someObj), I can
>>>>> reference that object in the user script as MyObj with no problem.
>>>>> What I would like to do is have these variables global to all scripts
>>>>> that are imported, etc. I tried import __main__ in my other scripts,
>>>>> but __main__ doesn't show up in sys.modules (which is what I thought
>>>>> PublishModule would do, but thats a different story).
>>>>>
>>>>> Am I going about this the wrong way?
>>>>>
>>>>> Thanks
>>>>>
>>>>> slide
>>>>>
>>>>> --
>>>>> slide-o-blog
>>>>> http://slide-o-blog.blogspot.com/
>>>>> _______________________________________________
>>>>> Users mailing list
>>>>> Users at lists.ironpython.com
>>>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>>> _______________________________________________
>>>>> Users mailing list
>>>>> Users at lists.ironpython.com
>>>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> slide-o-blog
>>>> http://slide-o-blog.blogspot.com/
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users at lists.ironpython.com
>>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users at lists.ironpython.com
>>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>>
>>>
>>>
>>>
>>> --
>>> slide-o-blog
>>> http://slide-o-blog.blogspot.com/
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.ironpython.com
>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.ironpython.com
>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>
>>
>>
>>
>> --
>> slide-o-blog
>> http://slide-o-blog.blogspot.com/
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>
>
>
> --
> slide-o-blog
> http://slide-o-blog.blogspot.com/
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>



-- 
slide-o-blog
http://slide-o-blog.blogspot.com/



More information about the Ironpython-users mailing list