Closes #17587: Add release_track attribute to PluginConfig

This commit is contained in:
Jeremy Stretch 2025-02-03 13:37:58 -05:00
parent 43841939a0
commit 75417c9cd5
5 changed files with 12 additions and 3 deletions

View File

@ -103,6 +103,7 @@ NetBox looks for the `config` variable within a plugin's `__init__.py` to load i
| `name` | Raw plugin name; same as the plugin's source directory | | `name` | Raw plugin name; same as the plugin's source directory |
| `verbose_name` | Human-friendly name for the plugin | | `verbose_name` | Human-friendly name for the plugin |
| `version` | Current release ([semantic versioning](https://semver.org/) is encouraged) | | `version` | Current release ([semantic versioning](https://semver.org/) is encouraged) |
| `release_track` | An alternate release track (e.g. `dev` or `beta`) to which a release belongs |
| `description` | Brief description of the plugin's purpose | | `description` | Brief description of the plugin's purpose |
| `author` | Name of plugin's author | | `author` | Name of plugin's author |
| `author_email` | Author's public email address | | `author_email` | Author's public email address |

View File

@ -80,6 +80,9 @@ def get_local_plugins(plugins=None):
for plugin_name in registry['plugins']['installed']: for plugin_name in registry['plugins']['installed']:
plugin = importlib.import_module(plugin_name) plugin = importlib.import_module(plugin_name)
plugin_config: PluginConfig = plugin.config plugin_config: PluginConfig = plugin.config
installed_version = plugin_config.version
if plugin_config.release_track:
installed_version = f'{installed_version}-{plugin_config.release_track}'
local_plugins[plugin_config.name] = Plugin( local_plugins[plugin_config.name] = Plugin(
config_name=plugin_config.name, config_name=plugin_config.name,
@ -89,7 +92,7 @@ def get_local_plugins(plugins=None):
description_short=plugin_config.description, description_short=plugin_config.description,
is_local=True, is_local=True,
is_installed=True, is_installed=True,
installed_version=plugin_config.version, installed_version=installed_version,
) )
# Update catalog entries for local plugins, or add them to the list if not listed # Update catalog entries for local plugins, or add them to the list if not listed

View File

@ -48,6 +48,7 @@ class PluginConfig(AppConfig):
author_email = '' author_email = ''
description = '' description = ''
version = '' version = ''
release_track = ''
# Root URL path under /plugins. If not set, the plugin's label will be used. # Root URL path under /plugins. If not set, the plugin's label will be used.
base_url = None base_url = None

View File

@ -18,7 +18,10 @@ def get_installed_plugins():
for plugin_name in registry['plugins']['installed']: for plugin_name in registry['plugins']['installed']:
plugin_name = plugin_name.rsplit('.', 1)[-1] plugin_name = plugin_name.rsplit('.', 1)[-1]
plugin_config = apps.get_app_config(plugin_name) plugin_config = apps.get_app_config(plugin_name)
plugins[plugin_name] = getattr(plugin_config, 'version', None) if plugin_config.release_track:
plugins[plugin_name] = f'{plugin_config.version}-{plugin_config.release_track}'
else:
plugins[plugin_name] = plugin_config.version or None
return dict(sorted(plugins.items())) return dict(sorted(plugins.items()))

View File

@ -31,7 +31,8 @@ class InstalledPluginsAPIView(APIView):
'author': plugin_app_config.author, 'author': plugin_app_config.author,
'author_email': plugin_app_config.author_email, 'author_email': plugin_app_config.author_email,
'description': plugin_app_config.description, 'description': plugin_app_config.description,
'version': plugin_app_config.version 'version': plugin_app_config.version,
'release_track': plugin_app_config.release_track,
} }
def get(self, request, format=None): def get(self, request, format=None):