Story #6671
closedAs a pulpcore developer I can reliably determine the version of a Django plugin
100%
Description
Background¶
Currently plugins have their version accessible at the top-level of their python package. The plugin_template provides this in this part for example.
The AppConfig does not contain a version specification
The Problem¶
Django's discovery mechanisms are all about finding the AppConfig. See the apps part of their docs.
We've arbitrarily put the version at the module level which does not work well with how Django thinks about apps. For example there are cases where a single Python package could provide two Django apps. Django is prepared to deal with this, Pulp is not.
Another aspect to the same problem¶
Another aspect of the problem is well described in this SO post. The substantive summary is that "As such, you cannot generalize and use file or package and hope to always get the corresponding distribution." which is currently what Pulp tries to do when using period splitting. As is, the current StatusAPI for example would break if a python package was called one thing and its Distribution name was another, as Python packages do in-practice.
Solution¶
- Add a version field to the AppConfig which would allow plugin writers to clearly specify their version directly.
- Document this for plugin writers
- Add a warning on startup that identifies a plugin is missing a version if it is not defined
Related issues
Adds PulpPluginAppConfig.version warnings
Starting with 3.10 plugins will be required to declare their version as the
version
attribute on the PulpPluginAppConfig subclass. This adds warnings starting in 3.9 encouraging plugin writers to do so.Additionally, it sets the
version
on PulpAppConfig so that it doesn't complain about itself. The bumpversion spec also will bump this string at release time.closes #6671