On Fri, Apr 08, 2005 at 01:33 +0200, Valentino Volonghi aka Dialtone wrote:
> holger krekel wrote:
> 
> >I would be surprised if my brand-new hack breaks yours (because that
> >is exactly what it is trying to avoid) but i've learned that "import" 
> >makes the impossible possible and vice versa. 
> >
> >cheers, 
> > 
> >
> It was a quick fix in my case :).

Everybody says that, see "piles of hacks" earlier  :-) 

> It shouldn't be hard to figure out a common failing pattern in import 
> magic. for example:
> nevow was failing because of namedAny that imports a module from a 
> string representing the entire path in PYTHONPATH.

brain shaking already ... 

> from nevow import util
> In [6]:util.namedAny('nevow.flat.ten')
> Out[6]:<module 'nevow.flat.ten' from 
> '/Volumes/dati/Sviluppo/Nevow/nevow/flat/ten.pyc'>
> 
> namedAny is this one:
> 
> def namedAny(name):
>    """Get a fully named package, module, module-global object, or 
> attribute.
>    """
>    names = name.split('.')
>    topLevelPackage = None
>    moduleNames = names[:]
>    while not topLevelPackage:
>        try:
>            trialname = '.'.join(moduleNames)
>            topLevelPackage = __import__(trialname)
>        except ImportError:
>            # if the ImportError happened in the module being imported,
>            # this is a failure that should be handed to our caller.
>            # count stack frames to tell the difference.
> 
>            # string-matching is another technique, but I think it could be
>            # fooled in some funny cases
>            #if sys.exc_info()[1] != "cannot import name %s" % trialname:
>            #    raise
>            import traceback
>            if len(traceback.extract_tb(sys.exc_info()[2])) > 1:
>                raise
>            moduleNames.pop()
>   
>    obj = topLevelPackage
>    for n in names[1:]:
>        obj = getattr(obj, n)
>       
>    return obj
> 
> But I can't remember exactly the failure. The ML is here to help 
> (something about the PYTHONPATH anyway).

I have written similar code and there were always side cases 
that made it at least hard to debug and find the actual problem
in the program. 

cheers, 

    holger
_______________________________________________
[email protected]
http://codespeak.net/mailman/listinfo/pypy-dev

Reply via email to