~romaia/stoqlib/translations

« back to all changes in this revision

Viewing changes to external/sqlobject/util/moduleloader.py

  • Committer: jdahlin
  • Date: 2006-09-18 16:01:22 UTC
  • Revision ID: vcs-imports@canonical.com-20060918160122-umda7g8dx7bdc53m
Add an external directory with formencode and SQLObject forks, remove SQLObject dependency from documentation and setup.py. Install externals and set sys.path in stoqlib/__init__.py

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import sys
 
2
import imp
 
3
 
 
4
def load_module(module_name):
 
5
    mod = __import__(module_name)
 
6
    components = module_name.split('.')
 
7
    for comp in components[1:]:
 
8
        mod = getattr(mod, comp)
 
9
    return mod
 
10
 
 
11
def load_module_from_name(filename, module_name):
 
12
    if sys.modules.has_key(module_name):
 
13
        return sys.modules[module_name]
 
14
    init_filename = os.path.join(os.path.dirname(filename), '__init__.py')
 
15
    if not os.path.exists(init_filename):
 
16
        try:
 
17
            f = open(init_filename, 'w')
 
18
        except (OSError, IOError), e:
 
19
            raise IOError(
 
20
                'Cannot write __init__.py file into directory %s (%s)\n'
 
21
                % (os.path.dirname(filename), e))
 
22
        f.write('#\n')
 
23
        f.close()
 
24
    fp = None
 
25
    if sys.modules.has_key(module_name):
 
26
        return sys.modules[module_name]
 
27
    if '.' in module_name:
 
28
        parent_name = '.'.join(module_name.split('.')[:-1])
 
29
        base_name = module_name.split('.')[-1]
 
30
        parent = load_module_from_name(os.path.dirname(filename),
 
31
                                       parent_name)
 
32
    else:
 
33
        base_name = module_name
 
34
    fp = None
 
35
    try:
 
36
        fp, pathname, stuff = imp.find_module(
 
37
            base_name, [os.path.dirname(filename)])
 
38
        module = imp.load_module(module_name, fp, pathname, stuff)
 
39
    finally:
 
40
        if fp is not None:
 
41
            fp.close()
 
42
    return module