Hi Dino,
Thanks for the gory details. I'll try again in a couple of releases.

-Jeff

On Nov 28, 2007 11:49 AM, Dino Viehland <[EMAIL PROTECTED]> wrote:
> Thanks for the bug report.  There's actually a few issues here:
>
>        types.ModuleType is actually SystemState (you can see this by doing 
> import clr; clr.GetClrType(types.ModuleType))
>        ScriptModule (the type we use to represent module's currently) is 
> currently sealed, so you can't inherit from it if you were getting the right 
> type
>        We don't support __getattr__ / __getattribute__ on types that 
> implement ICustomMembers (which SystemState does).
>
> If you want the nitty gritty details:
>
> The 1st problem is a long-lived problem where we do type impersonation on the 
> SystemState to make it look like a module.  SystemState then implements 
> ICustomMembers so that arbitrary things can be get/set on it which brings us 
> to the 3rd problem.  Before v2.0 is done I suspect that this is going to 
> change and "sys" will be just a normal module.  ICustomMembers will also be 
> going away and get replaced with operators used for lookup - the operators 
> will actually compose correctly and your __getattr__ should get called.
>
> The 2nd problem is currently a DLR problem.  Currently we have a concept of 
> modules in the DLR but that's going away soon.  When that happens 
> ScriptModule (in the most recent code it's not ScriptScope) will be 
> PythonModule and we'll enable inheritance again.
>
> I've opened bug #14147 
> (http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=14147) to 
> track the issue until all of this gets fixed but unfortunately it's going to 
> take a little time.
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jeff Hardy
> Sent: Tuesday, November 27, 2007 7:40 PM
> To: Discussion of IronPython
> Subject: [IronPython] Issues with Silly Module Tricks
>
> Hi,
> The following code is adapted from the Pygments library:
>
> automod_test.py
> import types
>
> class _automodule(types.ModuleType):
>    """Automatically import lexers."""
>
>    def __getattr__(self, name):
>        return "blah"
>
> import sys
> oldmod = sys.modules['automod_test']
> newmod = _automodule('automod_test')
> newmod.__dict__.update(oldmod.__dict__)
> sys.modules['automod_test'] = newmod
> del newmod.newmod, newmod.oldmod, newmod.sys, newmod.types
>
> When run, I get the following results:
> Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
> >>> import automod_test
> >>> automod_test.blah
> 'blah'
>
> IronPython console: IronPython 2.0A6 (2.0.11102.00) on .NET 2.0.50727.312
> Copyright (c) Microsoft Corporation. All rights reserved.
> >>> import automod_test
> >>> automod_test.blah
> Traceback (most recent call last):
>  File , line 0, in ##268
> AttributeError: 'module' object has no attribute 'blah'
>
> I'm not sure whether the issue is with replacing sys.modules, or if it
> is related to the __getattr__ issues that were reported a while back.
> Either way, it prevents Pygments from getting past even the first
> round of tests.
>
> -Jeff
> _______________________________________________
> Users mailing list
> [email protected]
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________
> Users mailing list
> [email protected]
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to