Parametrized module import

John Lenton jlenton at gmail.com
Thu Jul 8 12:25:25 EDT 2004


On 08 Jul 2004 16:28:21 +0200, Jacek Generowicz
<jacek.generowicz at cern.ch> wrote:
> 
> Yup ... but now I'm being put under pressure to make the API thus:
> 
>  import foo
>  foo.config....
> 
> which doesn't thrill me at all, for a plethora of implementation
> detail related reasons which are not interesting here.
> 
> Thanks for the poniter, anyway.

How ugly is this:

    import sys

    def __config():
        return sys._getframe(2).f_globals.get('__magic_config', None)

    def config(name):
        name = str(name)
        if name not in __mapping:
            raise RuntimeException, "unknown flavor " + name
        sys._getframe(1).f_globals['__magic_config'] = name

    def __default_bar(*a, **kw):
        print "I am the default"

    def __white_bar(*a, **kw):
        print "I am white"

    def __black_bar(*a, **kw):
        print "I am black"

    __mapping = {'bar': {None: __default_bar,
                         'white': __white_bar,
                         'black': __black_bar},
                 }

    for i in __mapping:
        globals()[i] = lambda *a, **kw: __mapping[i][__config()](*a, **kw)

I'd say about 6 in a fuglyness scale, but it might do what you want.
I'm sure there's an easyer way of putting things into the current
namespace, but this works.

-- 
John Lenton (jlenton at gmail.com) -- Random fortune:
bash: fortune: command not found



More information about the Python-list mailing list