mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
* 15049 add missing gettext to error strings * 15049 add missing gettext to error strings * 15094 review change * 15094 review change * Formatting cleanup --------- Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
80 lines
2.0 KiB
Python
80 lines
2.0 KiB
Python
import uuid
|
|
|
|
from django.conf import settings
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
from django.utils.translation import gettext as _
|
|
|
|
from netbox.registry import registry
|
|
from extras.constants import DEFAULT_DASHBOARD
|
|
|
|
__all__ = (
|
|
'get_dashboard',
|
|
'get_default_dashboard',
|
|
'get_widget_class',
|
|
'register_widget',
|
|
)
|
|
|
|
|
|
def register_widget(cls):
|
|
"""
|
|
Decorator for registering a DashboardWidget class.
|
|
"""
|
|
app_label = cls.__module__.split('.', maxsplit=1)[0]
|
|
label = f'{app_label}.{cls.__name__}'
|
|
registry['widgets'][label] = cls
|
|
|
|
return cls
|
|
|
|
|
|
def get_widget_class(name):
|
|
"""
|
|
Return a registered DashboardWidget class identified by its name.
|
|
"""
|
|
try:
|
|
return registry['widgets'][name]
|
|
except KeyError:
|
|
raise ValueError(_("Unregistered widget class: {name}").format(name=name))
|
|
|
|
|
|
def get_dashboard(user):
|
|
"""
|
|
Return the Dashboard for a given User if one exists, or generate a default dashboard.
|
|
"""
|
|
if user.is_anonymous:
|
|
dashboard = get_default_dashboard()
|
|
else:
|
|
try:
|
|
dashboard = user.dashboard
|
|
except ObjectDoesNotExist:
|
|
# Create a dashboard for this user
|
|
dashboard = get_default_dashboard()
|
|
dashboard.user = user
|
|
dashboard.save()
|
|
|
|
return dashboard
|
|
|
|
|
|
def get_default_dashboard(config=None):
|
|
from extras.models import Dashboard
|
|
|
|
dashboard = Dashboard()
|
|
config = config or settings.DEFAULT_DASHBOARD or DEFAULT_DASHBOARD
|
|
|
|
for widget in config:
|
|
id = str(uuid.uuid4())
|
|
dashboard.layout.append({
|
|
'id': id,
|
|
'w': widget['width'],
|
|
'h': widget['height'],
|
|
'x': widget.get('x'),
|
|
'y': widget.get('y'),
|
|
})
|
|
dashboard.config[id] = {
|
|
'class': widget['widget'],
|
|
'title': widget.get('title'),
|
|
'color': widget.get('color'),
|
|
'config': widget.get('config', {}),
|
|
}
|
|
|
|
return dashboard
|