14731 use dataclasses

This commit is contained in:
Arthur Hanson 2024-07-17 14:09:52 +07:00
parent b79b3b67e2
commit 657b12cc3e
2 changed files with 47 additions and 36 deletions

View File

@ -28,6 +28,7 @@ class Plugin:
slug: str = '' slug: str = ''
config_name: str = '' config_name: str = ''
name: str = '' name: str = ''
title_long: str = ''
tag_line: str = '' tag_line: str = ''
description_short: str = '' description_short: str = ''
author: str = '' author: str = ''
@ -46,21 +47,17 @@ def get_local_plugins(plugins):
plugin_config: PluginConfig = plugin.config plugin_config: PluginConfig = plugin.config
plugin_module = "{}.{}".format(plugin_config.__module__, plugin_config.__name__) # type: ignore plugin_module = "{}.{}".format(plugin_config.__module__, plugin_config.__name__) # type: ignore
plugins[plugin_config.name] = { plugins[plugin_config.name] = Plugin(
'slug': plugin_config.name, slug=plugin_config.name,
'config_name': None, name=plugin_config.verbose_name,
'name': plugin_config.verbose_name, tag_line=plugin_config.description,
'tag_line': plugin_config.description, description_short=plugin_config.description,
'description_short': plugin_config.description, author=plugin_config.author or _('Unknown Author'),
'author': plugin_config.author or _('Unknown Author'), is_local=True,
'created': None, is_installed=True,
'updated': None, is_certified=False,
'is_local': True, is_community=False,
'is_installed': True, )
'is_certified': False,
'is_community': False,
'versions': [],
}
return plugins return plugins
@ -85,28 +82,42 @@ def get_catalog_plugins(plugins):
for data in page['data']: for data in page['data']:
versions = [] versions = []
versions.extend(data['release_recent_history']) for version in data['release_recent_history']:
versions.append(
PluginVersion(
date=datetime_from_timestamp(version['date']),
version=version['version'],
netbox_min_version=version['netbox_min_version'],
netbox_max_version=version['netbox_max_version'],
has_model=version['has_model'],
is_certified=version['is_certified'],
is_feature=version['is_feature'],
is_integration=version['is_integration'],
is_netboxlabs_supported=version['is_netboxlabs_supported'],
)
)
if data['slug'] in plugins: if data['slug'] in plugins:
plugins[data['slug']]['is_local'] = False plugins[data['slug']].is_local = False
plugins[data['slug']]['is_certified'] = data['release_latest']['is_certified'] plugins[data['slug']].is_certified = data['release_latest']['is_certified']
plugins[data['slug']]['description_short'] = data['description_short'] plugins[data['slug']].description_short = data['description_short']
else: else:
plugins[data['slug']] = { plugins[data['slug']] = Plugin(
'slug': data['slug'], slug=data['slug'],
'config_name': data['config_name'], config_name=data['config_name'],
'name': data['title_short'], name=data['title_short'],
'title_long': data['title_long'], title_long=data['title_long'],
'tag_line': data['tag_line'], tag_line=data['tag_line'],
'description_short': data['description_short'], description_short=data['description_short'],
'author': data['author']['name'] or _('Unknown Author'), author=data['author']['name'] or _('Unknown Author'),
'created': datetime_from_timestamp(data['created_at']), created=datetime_from_timestamp(data['created_at']),
'updated': datetime_from_timestamp(data['updated_at']), updated=datetime_from_timestamp(data['updated_at']),
'is_local': False, is_local=False,
'is_installed': False, is_installed=False,
'is_certified': data['release_latest']['is_certified'], is_certified=data['release_latest']['is_certified'],
'is_community': not data['release_latest']['is_certified'], is_community=not data['release_latest']['is_certified'],
'versions': versions, versions=versions,
} )
return plugins return plugins

View File

@ -693,7 +693,7 @@ class PluginView(UserPassesTestMixin, View):
plugins = get_plugins() plugins = get_plugins()
plugin = plugins[name] plugin = plugins[name]
table = PluginVersionTable(plugin['versions'], user=request.user) table = PluginVersionTable(plugin.versions, user=request.user)
table.configure(request) table.configure(request)
return render(request, 'core/plugin.html', { return render(request, 'core/plugin.html', {