cfdbc4d0d00a643b3026b9e5be86d451324ba782
[vuplus_dvbapp] / lib / python / Components / PluginComponent.py
1 import os
2
3 from Tools.Directories import *
4
5 def my_import(name):
6         mod = __import__(name)
7         components = name.split('.')
8         for comp in components[1:]:
9                 mod = getattr(mod, comp)
10         return mod
11
12 class PluginComponent:
13         def __init__(self):
14                 self.plugins = {}
15                 self.setPluginPrefix("Plugins.")
16                 
17         def setPluginPrefix(self, prefix):
18                 self.prefix = prefix
19
20         def readPluginList(self, runAutostartPlugins=False, runAutoendPlugins=False):
21                 """enumerates plugins"""
22
23                 directories = os.listdir(resolveFilename(SCOPE_PLUGINS))
24                 
25                 for x in directories:
26                         path = resolveFilename(SCOPE_PLUGINS, x) + "/"
27                         if os.path.exists(path):
28                                 if fileExists(path + "plugin.py"):
29                                         plugin = my_import('.'.join(("Plugins", x, "plugin")))
30                                         
31                                         if not plugin.__dict__.has_key("Plugins"):
32                                                 print "Plugin %s doesn't have 'Plugin'-call." % (x)
33                                                 continue
34                                         
35                                         print "plugin", plugin
36                                         plugins = plugin.Plugins()
37                                         
38                                         # allow single entry not to be a list
39                                         if type(plugins) is not list:
40                                                 plugins = [ plugins ]
41                                         
42                                         for p in plugins:
43                                                 print "imported plugin %s" % (p.name)
44                                                 
45                                                 for x in p.where:
46                                                         self.plugins.setdefault(x, []).append(p)
47
48         def getPlugins(self, where):
49                 """Get list of plugins in a specific category"""
50                 
51                 if type(where) is not list:
52                         where = [ where ]
53                 res = [ ]
54                 for x in where:
55                         for p in self.plugins.get(x, [ ]):
56                                 res.append(p)
57                 return res
58
59 plugins = PluginComponent()