Plugin container provides easy method invocation. @ivar plugins: A list of plugin objects. @type plugins: [L{Plugin},] @cvar ctxclass: A dict of plugin method / context classes. @type ctxclass: dict
| 173 | |
| 174 | |
| 175 | class PluginContainer: |
| 176 | """ |
| 177 | Plugin container provides easy method invocation. |
| 178 | @ivar plugins: A list of plugin objects. |
| 179 | @type plugins: [L{Plugin},] |
| 180 | @cvar ctxclass: A dict of plugin method / context classes. |
| 181 | @type ctxclass: dict |
| 182 | """ |
| 183 | |
| 184 | domains = { |
| 185 | 'init': (InitContext, InitPlugin), |
| 186 | 'document': (DocumentContext, DocumentPlugin), |
| 187 | 'message': (MessageContext, MessagePlugin), |
| 188 | } |
| 189 | |
| 190 | def __init__(self, plugins): |
| 191 | """ |
| 192 | @param plugins: A list of plugin objects. |
| 193 | @type plugins: [L{Plugin},] |
| 194 | """ |
| 195 | self.plugins = plugins |
| 196 | |
| 197 | def __getattr__(self, name): |
| 198 | domain = self.domains.get(name) |
| 199 | if domain: |
| 200 | plugins = [] |
| 201 | ctx, pclass = domain |
| 202 | for p in self.plugins: |
| 203 | if isinstance(p, pclass): |
| 204 | plugins.append(p) |
| 205 | return PluginDomain(ctx, plugins) |
| 206 | else: |
| 207 | raise Exception('plugin domain (%s), invalid' % name) |
| 208 | |
| 209 | |
| 210 | class PluginDomain: |