| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- from django.apps import apps
- from django.db.models import Q
- from django.utils.module_loading import import_string
- from django.utils.translation import gettext_lazy as _
- from core.models import ObjectType
- from netbox.registry import registry
- __all__ = (
- 'get_table_configs',
- 'get_table_for_model',
- 'get_table_ordering',
- 'linkify_phone',
- 'register_table_column'
- )
- def get_table_configs(table, user):
- """
- Return any available TableConfigs applicable to the given table & user.
- """
- TableConfig = apps.get_model('extras', 'TableConfig')
- return TableConfig.objects.filter(
- Q(shared=True) | Q(user=user if user.is_authenticated else None),
- object_type=ObjectType.objects.get_for_model(table.Meta.model),
- table=table.name,
- enabled=True,
- )
- def get_table_for_model(model, name=None):
- name = name or f'{model.__name__}Table'
- try:
- return import_string(f'{model._meta.app_label}.tables.{name}')
- except ImportError:
- return
- def get_table_ordering(request, table):
- """
- Given a request, return the prescribed table ordering, if any. This may be necessary to determine prior to rendering
- the table itself.
- """
- # Check for an explicit ordering
- if 'sort' in request.GET:
- return request.GET['sort'] or None
- # Check for a configured preference
- if request.user.is_authenticated:
- if preference := request.user.config.get(f'tables.{table.__name__}.ordering'):
- return preference
- def linkify_phone(value):
- """
- Render a telephone number as a hyperlink.
- """
- if value is None:
- return None
- return f"tel:{value.replace(' ', '')}"
- def register_table_column(column, name, *tables):
- """
- Register a custom column for use on one or more tables.
- Args:
- column: The column instance to register
- name: The name of the table column
- tables: One or more table classes
- """
- for table in tables:
- reg = registry['tables'][table]
- if name in reg:
- raise ValueError(_("A column named {name} is already defined for table {table_name}").format(
- name=name, table_name=table.__name__
- ))
- reg[name] = column
|