mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Tweak registry initialization
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
import collections
|
||||||
|
|
||||||
|
from extras.constants import EXTRAS_FEATURES
|
||||||
|
|
||||||
|
|
||||||
class Registry(dict):
|
class Registry(dict):
|
||||||
"""
|
"""
|
||||||
Central registry for registration of functionality. Once a store (key) is defined, it cannot be overwritten or
|
Central registry for registration of functionality. Once a store (key) is defined, it cannot be overwritten or
|
||||||
@ -7,15 +12,19 @@ class Registry(dict):
|
|||||||
try:
|
try:
|
||||||
return super().__getitem__(key)
|
return super().__getitem__(key)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise KeyError("Invalid store: {}".format(key))
|
raise KeyError(f"Invalid store: {key}")
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key, value):
|
||||||
if key in self:
|
if key in self:
|
||||||
raise KeyError("Store already set: {}".format(key))
|
raise KeyError(f"Store already set: {key}")
|
||||||
super().__setitem__(key, value)
|
super().__setitem__(key, value)
|
||||||
|
|
||||||
def __delitem__(self, key):
|
def __delitem__(self, key):
|
||||||
raise TypeError("Cannot delete stores from registry")
|
raise TypeError("Cannot delete stores from registry")
|
||||||
|
|
||||||
|
|
||||||
|
# Initialize the global registry
|
||||||
registry = Registry()
|
registry = Registry()
|
||||||
|
registry['model_features'] = {
|
||||||
|
feature: collections.defaultdict(set) for feature in EXTRAS_FEATURES
|
||||||
|
}
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import collections
|
|
||||||
|
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.deconstruct import deconstructible
|
from django.utils.deconstruct import deconstructible
|
||||||
from taggit.managers import _TaggableManager
|
from taggit.managers import _TaggableManager
|
||||||
@ -58,12 +56,8 @@ class FeatureQuery:
|
|||||||
|
|
||||||
|
|
||||||
def register_features(model, features):
|
def register_features(model, features):
|
||||||
if 'model_features' not in registry:
|
|
||||||
registry['model_features'] = {
|
|
||||||
f: collections.defaultdict(list) for f in EXTRAS_FEATURES
|
|
||||||
}
|
|
||||||
for feature in features:
|
for feature in features:
|
||||||
if feature not in EXTRAS_FEATURES:
|
if feature not in EXTRAS_FEATURES:
|
||||||
raise ValueError(f"{feature} is not a valid extras feature!")
|
raise ValueError(f"{feature} is not a valid extras feature!")
|
||||||
app_label, model_name = model._meta.label_lower.split('.')
|
app_label, model_name = model._meta.label_lower.split('.')
|
||||||
registry['model_features'][feature][app_label].append(model_name)
|
registry['model_features'][feature][app_label].add(model_name)
|
||||||
|
Reference in New Issue
Block a user