1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import os
23 import sys
24
25 from flumotion.common import package, errors, log
26 from flumotion.configure import configure
27
28 import flumotion.project
29
30 __version__ = "$Rev$"
31
32
34 """
35 Returns a list of all add-on projects seen by Flumotion.
36 """
37 projects = [n for n in sys.modules.keys()
38 if n.startswith('flumotion.project')]
39 paths = flumotion.project.__path__
40 modules = []
41 for path in paths:
42 modules.extend(package.findEndModuleCandidates(
43 os.path.abspath(os.path.join(path, '..', '..')),
44 prefix='flumotion.project'))
45
46 modules.remove('flumotion.project.project')
47
48 return [n[len('flumotion.project.'):] for n in modules]
49
50
51 -def get(project, attribute, default=None):
52 """
53 Get an attribute from a project's module.
54 """
55 log.debug('project', 'Getting attribute %s from project %s',
56 attribute, project)
57
58
59 if project == 'flumotion':
60 return getattr(configure, attribute, default)
61
62 moduleName = "flumotion.project.%s" % project
63 try:
64 exec("import %s" % moduleName)
65 except ImportError, e:
66 msg = ('Could not load project %s: %s' %
67 (project, log.getExceptionMessage(e)))
68 log.warning('project', msg)
69 raise errors.NoProjectError(project, msg)
70 except SyntaxError, e:
71 msg = ('Syntax error while loading project %s: %s' %
72 (project, log.getExceptionMessage(e)))
73 log.warning('project', msg)
74 raise errors.NoProjectError(project, msg)
75 m = sys.modules[moduleName]
76 return getattr(m, attribute, default)
77