1 2 3 4 5 6 7 8 9 10 11 12 13 | class PluginMount(type):
def __init__(cls, name, bases, attrs):
if not hasattr(cls, 'plugins'):
# This branch only executes when processing the mount point itself.
# So, since this is a new plugin type, not an implementation, this
# class shouldn't be registered as a plugin. Instead, it sets up a
# list where plugins can be registered later.
cls.plugins = []
else:
# This must be a plugin implementation, which should be registered.
# Simply appending it to the list is all that's needed to keep
# track of it later.
cls.plugins.append(cls)
|
More like this
- HTTP (basic) auth enabled (new-style) syndication framework feed class by hupf 1 year, 5 months ago
- Method Caching by bryanhelmig 10 months, 3 weeks ago
- Using descriptors for lazy attribute caching by djypsy 4 years, 9 months ago
- Passing values to a method from a template by miracle2k 4 years, 2 months ago
- integrated jinja2 which could use generic view ,my djangojinja2.py by jasongreen 2 years, 4 months ago
Comments
This is just unbelievable awesome. Great snippet and weblog post!
#
Help...
I received this error:
Here is the code....
#
This is a little late, but just informational for everyone else.
The poster above me encountered the error because action (which is a class), is not being instantiated first.
So the fix is: if name == 'main': for action in ActionProvider.plugins: action().perform()
Really simple. :) And this idea really rocks.
#
Oops, here's the code again, correctly formatted.
#