Plugins accessing parent state
Diez B. Roggisch
deets at nospam.web.de
Fri Mar 28 04:58:05 EDT 2008
hajducko at gmail.com schrieb:
> Does anyone have some design ideas ( or can point me at the right
> design pattern, because I can't find it. ) for having a plugin being
> able to access a parent's state?
>
> For example, let's say I have a class that receives some commands.
> When it gets a command, it checks which of the registered plugins
> deals with that command and passes the details of the command off to
> that plugin. So I'd end up with something like..
>
> result = plugin.do(msg_details)
>
> Now, I want to write a plugin called "help" that loops through all the
> registered plugins and prints out their doc strings. If all my plugin
> is getting is the msg details, how is it supposed to get the list of
> available plugins from the calling class?
>
> Or, for instance, let's say my class loads a configuration file that
> lists a set of admins who can enter commands. I want the plugins, if
> they so choose, to be able to test if the msg came from an admin, but
> again, I'm not passing the admin list into every plugin, it's just in
> my calling class. I could make the plugin specify an attribute for
> itself, like "admin_only" and test for that before I pass the command
> but what if certain parts of the plugin are to be restricted and
> others aren't, based on the details of the command sent?
>
> Is this as simple as just passing the instance of my class to each
> plugin? It doesn't seem like the proper thing to do, because now the
> plugin class has the capability of accessing the whole bot's
> interface.
Yes, it is simple as that. Of course you can choose *what* you pass, if
you want to restrict that - nobody forces you to pass the whole
plugin-manager, if that would expose properties/methods you wouldn't
want ther.
But to be honest: you are thinking much to far there - after all, it's
all *your* code, and inside one interpreter. A real isolation isn't
available anyway.
So just do what fullfills the functional requirements.
diez
More information about the Python-list
mailing list