Re: on package import, have it conditionally import a subpackage

2009-09-21 Thread Gabriel Genellina
En Sat, 19 Sep 2009 17:06:11 -0300, Gabriel Rossetti  
gabriel.rosse...@arimaz.com escribió:



Hello everyone,

I'd like to ba able to import a package and have it's __init__  
conditionally import a subpackage. Suppose that you have this structure :


mybase/
mybase/__init__.py
mybase/mypkg
mybase/mypkg/__init__.py
mybase/mypkg/module0.py
mybase/mypkg/type1
mybase/mypkg/type1/__init__.py
mybase/mypkg/type1/module1.py
mybase/mypkg/type1/module2.py
mybase/mypkg/type2
mybase/ mypkg/type2/__init__.py
mybase/ mypkg/type2/module1.py
mybase/ mypkg/type2/module2.py

I'd like to do something like th following in my code

  import mybase
  mybase.setType(type1)
  from mybase.mypkg import module0, module1, module2
  module0.__file__
'mybase/mypkg/module0.pyc'
  module1.__file__
'mybase/mypkg/type1/module1.pyc'
  module2.__file__
'mybase/mypkg/type1/module2.pyc'

but I can't figure out how to do this.


That depends on how dynamic you want/have to be.

(inside mybase/mypkg.__init__py):

def setType(type_):
  global module1, module2
  if type_ == 'type1':
from .type1 import module1, module2
  elif type_ == 'type2':
from .type2 import module1, module2
  else:
raise ValueError, 'unknown type: %s' % type_

A more generic version:

def setType(type_):
  global module1, module2
  t = __import__(type_, globals(), locals(), ['module1','module2'], 1)
  module1 = t.module1
  module2 = t.module2

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list


Re: on package import, have it conditionally import a subpackage

2009-09-20 Thread ryles
On Sep 19, 4:06 pm, Gabriel Rossetti gabriel.rosse...@arimaz.com
wrote:
 Hello everyone,

 I'd like to ba able to import a package and have it's __init__
 conditionally import a subpackage. Suppose that you have this structure :

 mybase/
 mybase/__init__.py
 mybase/mypkg
 mybase/mypkg/__init__.py
 mybase/mypkg/module0.py
 mybase/mypkg/type1
 mybase/mypkg/type1/__init__.py
 mybase/mypkg/type1/module1.py
 mybase/mypkg/type1/module2.py
 mybase/mypkg/type2
 mybase/ mypkg/type2/__init__.py
 mybase/ mypkg/type2/module1.py
 mybase/ mypkg/type2/module2.py

 I'd like to do something like th following in my code

   import mybase
   mybase.setType(type1)
   from mybase.mypkg import module0, module1, module2
   module0.__file__
 'mybase/mypkg/module0.pyc'
   module1.__file__
 'mybase/mypkg/type1/module1.pyc'
   module2.__file__
 'mybase/mypkg/type1/module2.pyc'

 but I can't figure out how to do this.

 Thank you,
 Gabriel

You might try something like the following:

$ export PYTHONPATH=/home/ryles


$ cat mybase_test.py

import mybase

mybase.type = type2

from mybase.mypkg import module0, module1, module2

print module0.__file__
print module1.__file__
print module2.__file__


$ python mybase_test.py
/home/ryles/mybase/mypkg/module0.pyc
/home/ryles/mybase/mypkg/type2/module1.pyc
/home/ryles/mybase/mypkg/type2/module2.pyc


$ ls -l mybase/
-rw-r--r--  1 ryles None  44 Sep 20 16:59 __init__.py
drwxr-xr-x+ 4 ryles None   0 Sep 20 17:06 mypkg


$ cat mybase/__init__.py

default_type = type1

type = default_type


$ ls -l mybase/mypkg/
-rw-r--r--  1 ryles None 307 Sep 20 17:06 __init__.py
-rw-r--r--  1 ryles None   0 Sep 20 16:51 module0.py
drwxr-xr-x+ 2 ryles None   0 Sep 20 17:02 type1
drwxr-xr-x+ 2 ryles None   0 Sep 20 17:02 type2


$ ls -l mybase/mypkg/type1/
-rw-r--r-- 1 ryles None   0 Sep 20 16:49 __init__.py
-rw-r--r-- 1 ryles None   0 Sep 20 16:49 module1.py
-rw-r--r-- 1 ryles None   0 Sep 20 16:51 module2.py


$ ls -l mybase/mypkg/type2/
-rw-r--r-- 1 ryles None   0 Sep 20 16:48 __init__.py
-rw-r--r-- 1 ryles None   0 Sep 20 16:51 module1.py
-rw-r--r-- 1 ryles None   0 Sep 20 16:49 module2.py


$ cat mybase/mypkg/__init__.py

# These modules are hard-coded.
from mybase.mypkg import module0

# These modules are resolved dynamically.
from mybase import type
for module_name in [module1, module2]:
full_name = mybase.mypkg. + type + '.' + module_name
globals()[module_name] = __import__(full_name, {}, {},
[full_name])

$
-- 
http://mail.python.org/mailman/listinfo/python-list


on package import, have it conditionally import a subpackage

2009-09-19 Thread Gabriel Rossetti

Hello everyone,

I'd like to ba able to import a package and have it's __init__ 
conditionally import a subpackage. Suppose that you have this structure :


mybase/
mybase/__init__.py
mybase/mypkg
mybase/mypkg/__init__.py
mybase/mypkg/module0.py
mybase/mypkg/type1
mybase/mypkg/type1/__init__.py
mybase/mypkg/type1/module1.py
mybase/mypkg/type1/module2.py
mybase/mypkg/type2
mybase/ mypkg/type2/__init__.py
mybase/ mypkg/type2/module1.py
mybase/ mypkg/type2/module2.py

I'd like to do something like th following in my code

 import mybase
 mybase.setType(type1)
 from mybase.mypkg import module0, module1, module2
 module0.__file__
'mybase/mypkg/module0.pyc'
 module1.__file__
'mybase/mypkg/type1/module1.pyc'
 module2.__file__
'mybase/mypkg/type1/module2.pyc'

but I can't figure out how to do this.

Thank you,
Gabriel

--
http://mail.python.org/mailman/listinfo/python-list