Hi Raphael, > we are doing such a thing for quite a while in our open source project > pretix[1]. Whow, I'm quite impressed. Never stumbled upon that. I'll recommend that for some collegues (to use it...) But about the internals: Nice, this was the first way I implemented that as well, and maybe I will come back to that again. You have to restart the server as well if you want to enable a plugin, right?
> [...] > To discover apps/plugins, we rely on setuptools' entry point > feature[2], which allows us to easily load all compatible apps > installed in the local Python requirement. >From a security POV, I thought: who hinders anyone to write malicious code and provide an entry point for your system? maybe in a library you install... (but this is merely a philosophic question... don't bother.) * You (deprecatedly) searched for plugins in all installed apps, check which one has a "PretixPluginMeta" attr. This is quite nice. I did just by appname.startswith('foo'). Less pythonic... ;-) But it's now replaced by entry points discovery. I had this too, (and will maybe come back to it). Setuptools' entry points discovery is a bit slow, but for the server start that doesn't matter, it's just once. (except development, you'll have to restart your server often) Your entrypoint is e.g. "pretix_pages=pretix_pages:PretixPluginMeta" - I don't understand that - this is an inner class of PluginApp. How can you access it directly via the entry point? But generally I understand the workflow. * How do you use signals? e.g. @receiver(footer_link, dispatch_uid="pages_footer_links") What does this mean? How do you pass this to your frontend? Could you describe this in just a few words? Really, I had about 70% of your system already (more or less) working) in mine. And as I will proceed, I think I will come back to the same system as well. I'd like to add channels to the mix as well to enable a Vue frontend. Instead of copying your code and forking the parts that I need, It would be better OpenSource practice to maybe build a "plugin system" that is a library and can be used of both - this is not very difficult IMHO, b'cause most of it is already there. Just tell me what you think about it - I can live with both - I just think that stability is better if more projects rely on one library and find security flaws and bugs alternatively ;-) I have written a IMHO better plugin handler: https://gitlab.com/nerdocs/medux/MedUX/blob/develop/medux/extensionsystem/__init__.py It defines defined before to have custom attrs., like: class URLPattern(Interface): def get_patterns(self): pass and in the plugin, this way you can use any class and decorate it with @implements(URLPattern) class FooURLPattern: def get_patterns(self): return [path(...)] And in Main urls.py: for pattern in URLPattern: prl_patterns += pattern.get_patterns This way all plugins can just "implement" predefined Interfaces, supereasy. Greetings from Salzburg, Christian > [1] https://github.com/pretix/pretix > [2] https://packaging.python.org/specifications/entry-points/ > [3] > https://github.com/pretix/pretix/blob/master/src/pretix/settings.py#L264 > [4] > https://github.com/pretix/pretix/blob/master/src/pretix/base/signals.py#L21 > [5] > https://github.com/pretix/pretix/blob/master/src/pretix/multidomain/maindomain_urlconf.py#L23 > [6] > https://github.com/pretix/pretix/blob/master/src/pretix/multidomain/plugin_handler.py > [7] https://docs.pretix.eu/en/latest/development/api/index.html -- You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To post to this group, send email to django-developers@googlegroups.com. Visit this group at https://groups.google.com/group/django-developers. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/80179385-e006-c24c-5cd4-5b27d43b140e%40nerdocs.at. For more options, visit https://groups.google.com/d/optout.
signature.asc
Description: OpenPGP digital signature