mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-17 04:58:16 -06:00
Refactor register_model() to accept multiple models
This commit is contained in:
parent
62a0b52237
commit
3b10cf153c
@ -6,9 +6,8 @@ class CircuitsConfig(AppConfig):
|
||||
verbose_name = "Circuits"
|
||||
|
||||
def ready(self):
|
||||
from netbox.models.features import register_model
|
||||
from netbox.models.features import register_models
|
||||
from . import signals, search
|
||||
|
||||
# Register models
|
||||
for model in self.get_models():
|
||||
register_model(model)
|
||||
register_models(*self.get_models())
|
||||
|
@ -17,9 +17,8 @@ class CoreConfig(AppConfig):
|
||||
|
||||
def ready(self):
|
||||
from core.api import schema # noqa
|
||||
from netbox.models.features import register_model
|
||||
from netbox.models.features import register_models
|
||||
from . import data_backends, search
|
||||
|
||||
# Register models
|
||||
for model in self.get_models():
|
||||
register_model(model)
|
||||
register_models(*self.get_models())
|
||||
|
@ -8,14 +8,13 @@ class DCIMConfig(AppConfig):
|
||||
verbose_name = "DCIM"
|
||||
|
||||
def ready(self):
|
||||
from netbox.models.features import register_model
|
||||
from netbox.models.features import register_models
|
||||
from utilities.counters import connect_counters
|
||||
from . import signals, search
|
||||
from .models import CableTermination, Device, DeviceType, VirtualChassis
|
||||
|
||||
# Register models
|
||||
for model in self.get_models():
|
||||
register_model(model)
|
||||
register_models(*self.get_models())
|
||||
|
||||
# Register denormalized fields
|
||||
denormalized.register(CableTermination, '_device', {
|
||||
|
@ -5,9 +5,8 @@ class ExtrasConfig(AppConfig):
|
||||
name = "extras"
|
||||
|
||||
def ready(self):
|
||||
from netbox.models.features import register_model
|
||||
from netbox.models.features import register_models
|
||||
from . import dashboard, lookups, search, signals
|
||||
|
||||
# Register models
|
||||
for model in self.get_models():
|
||||
register_model(model)
|
||||
register_models(*self.get_models())
|
||||
|
@ -6,9 +6,8 @@ class IPAMConfig(AppConfig):
|
||||
verbose_name = "IPAM"
|
||||
|
||||
def ready(self):
|
||||
from netbox.models.features import register_model
|
||||
from netbox.models.features import register_models
|
||||
from . import signals, search
|
||||
|
||||
# Register models
|
||||
for model in self.get_models():
|
||||
register_model(model)
|
||||
register_models(*self.get_models())
|
||||
|
@ -35,7 +35,7 @@ __all__ = (
|
||||
'JournalingMixin',
|
||||
'SyncedDataMixin',
|
||||
'TagsMixin',
|
||||
'register_model',
|
||||
'register_models',
|
||||
)
|
||||
|
||||
|
||||
@ -575,9 +575,9 @@ registry['model_features'].update({
|
||||
})
|
||||
|
||||
|
||||
def register_model(model, **kwargs):
|
||||
def register_models(*models):
|
||||
"""
|
||||
Register a model in NetBox. This entails:
|
||||
Register one or more models in NetBox. This entails:
|
||||
|
||||
- Determining whether the model is considered "public" (available for reference by other models)
|
||||
- Registering which features the model supports (e.g. bookmarks, custom fields, etc.)
|
||||
@ -585,38 +585,39 @@ def register_model(model, **kwargs):
|
||||
|
||||
register_model() should be called for each relevant model under the ready() of an app's AppConfig class.
|
||||
"""
|
||||
app_label, model_name = model._meta.label_lower.split('.')
|
||||
for model in models:
|
||||
app_label, model_name = model._meta.label_lower.split('.')
|
||||
|
||||
# Register public models
|
||||
if not getattr(model, '_netbox_private', False):
|
||||
registry['models'][app_label].add(model_name)
|
||||
# Register public models
|
||||
if not getattr(model, '_netbox_private', False):
|
||||
registry['models'][app_label].add(model_name)
|
||||
|
||||
# Record each applicable feature for the model in the registry
|
||||
features = {
|
||||
feature for feature, cls in FEATURES_MAP.items() if issubclass(model, cls)
|
||||
}
|
||||
for feature in features:
|
||||
try:
|
||||
registry['model_features'][feature][app_label].add(model_name)
|
||||
except KeyError:
|
||||
raise KeyError(
|
||||
f"{feature} is not a valid model feature! Valid keys are: {registry['model_features'].keys()}"
|
||||
# Record each applicable feature for the model in the registry
|
||||
features = {
|
||||
feature for feature, cls in FEATURES_MAP.items() if issubclass(model, cls)
|
||||
}
|
||||
for feature in features:
|
||||
try:
|
||||
registry['model_features'][feature][app_label].add(model_name)
|
||||
except KeyError:
|
||||
raise KeyError(
|
||||
f"{feature} is not a valid model feature! Valid keys are: {registry['model_features'].keys()}"
|
||||
)
|
||||
|
||||
# Register applicable feature views for the model
|
||||
if issubclass(model, JournalingMixin):
|
||||
register_model_view(model, 'journal', kwargs={'model': model})(
|
||||
'netbox.views.generic.ObjectJournalView'
|
||||
)
|
||||
if issubclass(model, ChangeLoggingMixin):
|
||||
register_model_view(model, 'changelog', kwargs={'model': model})(
|
||||
'netbox.views.generic.ObjectChangeLogView'
|
||||
)
|
||||
if issubclass(model, JobsMixin):
|
||||
register_model_view(model, 'jobs', kwargs={'model': model})(
|
||||
'netbox.views.generic.ObjectJobsView'
|
||||
)
|
||||
if issubclass(model, SyncedDataMixin):
|
||||
register_model_view(model, 'sync', kwargs={'model': model})(
|
||||
'netbox.views.generic.ObjectSyncDataView'
|
||||
)
|
||||
|
||||
# Register applicable feature views for the model
|
||||
if issubclass(model, JournalingMixin):
|
||||
register_model_view(model, 'journal', kwargs={'model': model})(
|
||||
'netbox.views.generic.ObjectJournalView'
|
||||
)
|
||||
if issubclass(model, ChangeLoggingMixin):
|
||||
register_model_view(model, 'changelog', kwargs={'model': model})(
|
||||
'netbox.views.generic.ObjectChangeLogView'
|
||||
)
|
||||
if issubclass(model, JobsMixin):
|
||||
register_model_view(model, 'jobs', kwargs={'model': model})(
|
||||
'netbox.views.generic.ObjectJobsView'
|
||||
)
|
||||
if issubclass(model, SyncedDataMixin):
|
||||
register_model_view(model, 'sync', kwargs={'model': model})(
|
||||
'netbox.views.generic.ObjectSyncDataView'
|
||||
)
|
||||
|
@ -94,11 +94,10 @@ class PluginConfig(AppConfig):
|
||||
pass
|
||||
|
||||
def ready(self):
|
||||
from netbox.models.features import register_model
|
||||
from netbox.models.features import register_models
|
||||
|
||||
# Register models
|
||||
for model in self.get_models():
|
||||
register_model(model)
|
||||
register_models(*self.get_models())
|
||||
|
||||
plugin_name = self.name.rsplit('.', 1)[-1]
|
||||
|
||||
|
@ -5,9 +5,8 @@ class TenancyConfig(AppConfig):
|
||||
name = 'tenancy'
|
||||
|
||||
def ready(self):
|
||||
from netbox.models.features import register_model
|
||||
from netbox.models.features import register_models
|
||||
from . import search
|
||||
|
||||
# Register models
|
||||
for model in self.get_models():
|
||||
register_model(model)
|
||||
register_models(*self.get_models())
|
||||
|
@ -5,9 +5,8 @@ class UsersConfig(AppConfig):
|
||||
name = 'users'
|
||||
|
||||
def ready(self):
|
||||
from netbox.models.features import register_model
|
||||
from netbox.models.features import register_models
|
||||
from . import signals
|
||||
|
||||
# Register models
|
||||
for model in self.get_models():
|
||||
register_model(model)
|
||||
register_models(*self.get_models())
|
||||
|
@ -7,14 +7,13 @@ class VirtualizationConfig(AppConfig):
|
||||
name = 'virtualization'
|
||||
|
||||
def ready(self):
|
||||
from netbox.models.features import register_model
|
||||
from netbox.models.features import register_models
|
||||
from utilities.counters import connect_counters
|
||||
from . import search, signals
|
||||
from .models import VirtualMachine
|
||||
|
||||
# Register models
|
||||
for model in self.get_models():
|
||||
register_model(model)
|
||||
register_models(*self.get_models())
|
||||
|
||||
# Register denormalized fields
|
||||
denormalized.register(VirtualMachine, 'cluster', {
|
||||
|
@ -6,9 +6,8 @@ class VPNConfig(AppConfig):
|
||||
verbose_name = 'VPN'
|
||||
|
||||
def ready(self):
|
||||
from netbox.models.features import register_model
|
||||
from netbox.models.features import register_models
|
||||
from . import search
|
||||
|
||||
# Register models
|
||||
for model in self.get_models():
|
||||
register_model(model)
|
||||
register_models(*self.get_models())
|
||||
|
@ -5,9 +5,8 @@ class WirelessConfig(AppConfig):
|
||||
name = 'wireless'
|
||||
|
||||
def ready(self):
|
||||
from netbox.models.features import register_model
|
||||
from netbox.models.features import register_models
|
||||
from . import signals, search
|
||||
|
||||
# Register models
|
||||
for model in self.get_models():
|
||||
register_model(model)
|
||||
register_models(*self.get_models())
|
||||
|
Loading…
Reference in New Issue
Block a user