1 """
2 Plugin support module
3 """
4
5 import os, sys, arc
6
74
75 instance = None
76
78 """
79 Class for managing plugins in ArcGui.
80 """
94
96 if self.__logger!=None:
97 self.__logger.msg(level, msg)
98
100 if self.__logger!=None:
101 self.logMsg(arc.INFO, msg)
102
104 if self.__logger!=None:
105 self.logMsg(arc.DEBUG, msg)
106
108 if self.__logger!=None:
109 self.logMsg(arc.ERROR, msg)
110
112 """
113 Plugin manager constructor.
114
115 Loads plugins from plugin directory. Creates a dictionary of
116 subclasses.
117 """
118
119 self.__logger = arc.Logger(arc.Logger_getRootLogger(), "PluginManager")
120
121 self.logInfoMsg("Init plugin manager...")
122
123
124
125 self.__pluginPath = ""
126 self.__pluginClassDict = {}
127
128
129
130 if os.environ.has_key("ARCJOBTOOL_LIB"):
131 self.__pluginPath = os.path.join(os.environ["ARCJOBTOOL_LIB"], "arcjobtool/plugins")
132 else:
133 self.__pluginPath = "./plugins"
134
135 self.logInfoMsg("Finding plugins...")
136
137
138
139 dirList = os.listdir(self.__pluginPath)
140
141 for dirItem in dirList:
142 fullPath = os.path.join(self.__pluginPath, dirItem)
143 if os.path.isfile(fullPath):
144 if os.path.splitext(fullPath)[1] == ".py":
145 if dirItem!="Plugins.py":
146 self.__loadPlugin(dirItem.split(".py")[0])
147
148
149
150 for pluginClass in PluginBase.__subclasses__():
151 self.__pluginClassDict[pluginClass.__name__] = pluginClass
152
153
155 """
156 Load plugin from plugin dir.
157 """
158 self.logInfoMsg("Importing: "+plugin)
159 __import__("arcjobtool.plugins."+plugin)
160
163
165 """
166 Return plugin instance from string pluginId.
167 """
168 if self.__pluginClassDict.has_key(pluginId):
169 return self.__pluginClassDict[pluginId]()
170 else:
171 return None
172
174 """
175 Return plugin instance based on definition dir.
176 """
177 pluginIdFilename = os.path.join(workDir, "plugin.id")
178 if os.path.exists(pluginIdFilename):
179 pluginIdFile = open(pluginIdFilename, "r")
180 pluginId = pluginIdFile.read().strip()
181 pluginIdFile.close()
182
183 return self.pluginFromId(pluginId)
184 else:
185 return None
186
187 plugins = property(getPlugins)
188