From 5797ba0fd73fe59537055ed9903d50ac4c165e12 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 10 Oct 2022 09:23:57 -0400 Subject: [PATCH] Move search app to a module under netbox/ --- netbox/circuits/search_indexes.py | 2 +- netbox/dcim/search_indexes.py | 4 +-- netbox/extras/search_indexes.py | 2 +- netbox/ipam/search_indexes.py | 2 +- netbox/netbox/forms/__init__.py | 10 ++++-- netbox/{ => netbox}/search/__init__.py | 0 netbox/{ => netbox}/search/backends.py | 4 +-- netbox/{ => netbox}/search/hierarchy.py | 0 netbox/{ => netbox}/search/models.py | 4 --- netbox/netbox/search/register.py | 39 +++++++++++++++++++++ netbox/netbox/settings.py | 1 - netbox/netbox/views/__init__.py | 2 +- netbox/search/apps.py | 45 ------------------------- netbox/tenancy/search_indexes.py | 2 +- netbox/utilities/templatetags/search.py | 7 ++-- netbox/virtualization/search_indexes.py | 2 +- netbox/wireless/search_indexes.py | 2 +- 17 files changed, 59 insertions(+), 69 deletions(-) rename netbox/{ => netbox}/search/__init__.py (100%) rename netbox/{ => netbox}/search/backends.py (97%) rename netbox/{ => netbox}/search/hierarchy.py (100%) rename netbox/{ => netbox}/search/models.py (56%) create mode 100644 netbox/netbox/search/register.py delete mode 100644 netbox/search/apps.py diff --git a/netbox/circuits/search_indexes.py b/netbox/circuits/search_indexes.py index e0d793363..e2ae23348 100644 --- a/netbox/circuits/search_indexes.py +++ b/netbox/circuits/search_indexes.py @@ -2,7 +2,7 @@ import circuits.filtersets import circuits.tables from circuits.models import Circuit, Provider, ProviderNetwork from django.db import models -from search.models import SearchMixin +from netbox.search.models import SearchMixin from utilities.utils import count_related diff --git a/netbox/dcim/search_indexes.py b/netbox/dcim/search_indexes.py index 07cb51798..28c5d6bcd 100644 --- a/netbox/dcim/search_indexes.py +++ b/netbox/dcim/search_indexes.py @@ -4,7 +4,6 @@ from dcim.models import ( Cable, Device, DeviceType, - Interface, Location, Module, ModuleType, @@ -14,8 +13,7 @@ from dcim.models import ( Site, VirtualChassis, ) -from django.db import models -from search.models import SearchMixin +from netbox.search.models import SearchMixin from utilities.utils import count_related diff --git a/netbox/extras/search_indexes.py b/netbox/extras/search_indexes.py index ab6a8394f..1da562275 100644 --- a/netbox/extras/search_indexes.py +++ b/netbox/extras/search_indexes.py @@ -2,7 +2,7 @@ import extras.filtersets import extras.tables from django.db import models from extras.models import JournalEntry -from search.models import SearchMixin +from netbox.search.models import SearchMixin from utilities.utils import count_related diff --git a/netbox/ipam/search_indexes.py b/netbox/ipam/search_indexes.py index 5d7358c8f..232d13f0d 100644 --- a/netbox/ipam/search_indexes.py +++ b/netbox/ipam/search_indexes.py @@ -2,7 +2,7 @@ import ipam.filtersets import ipam.tables from django.db import models from ipam.models import ASN, VLAN, VRF, Aggregate, IPAddress, Prefix, Service -from search.models import SearchMixin +from netbox.search.models import SearchMixin from utilities.utils import count_related diff --git a/netbox/netbox/forms/__init__.py b/netbox/netbox/forms/__init__.py index 0b7933adf..eb1311d98 100644 --- a/netbox/netbox/forms/__init__.py +++ b/netbox/netbox/forms/__init__.py @@ -1,7 +1,7 @@ from django import forms -from utilities.forms import BootstrapMixin -from search.backends import default_search_engine +from netbox.search.backends import default_search_engine +from utilities.forms import BootstrapMixin from .base import * @@ -25,7 +25,11 @@ class SearchForm(BootstrapMixin, forms.Form): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.fields["obj_type"] = forms.ChoiceField(choices=default_search_engine.get_search_choices(), required=False, label='Type') + self.fields["obj_type"] = forms.ChoiceField( + choices=default_search_engine.get_search_choices(), + required=False, + label='Type' + ) def get_options(self): if not self.options: diff --git a/netbox/search/__init__.py b/netbox/netbox/search/__init__.py similarity index 100% rename from netbox/search/__init__.py rename to netbox/netbox/search/__init__.py diff --git a/netbox/search/backends.py b/netbox/netbox/search/backends.py similarity index 97% rename from netbox/search/backends.py rename to netbox/netbox/search/backends.py index 269830c31..eca889019 100644 --- a/netbox/search/backends.py +++ b/netbox/netbox/search/backends.py @@ -1,9 +1,7 @@ -from abc import ABC from importlib import import_module from django.conf import settings from django.core.exceptions import ImproperlyConfigured -from django.db import models from django.db.models.signals import post_save, pre_delete from django.urls import reverse from netbox.constants import SEARCH_MAX_RESULTS @@ -146,7 +144,7 @@ def get_backend(backend_name=None): """Initializes and returns the search backend.""" global _backends_cache if not backend_name: - backend_name = getattr(settings, "SEARCH_BACKEND", "search.backends.PostgresIcontainsSearchBackend") + backend_name = getattr(settings, "SEARCH_BACKEND", "netbox.search.backends.PostgresIcontainsSearchBackend") # Try to use the cached backend. if backend_name in _backends_cache: diff --git a/netbox/search/hierarchy.py b/netbox/netbox/search/hierarchy.py similarity index 100% rename from netbox/search/hierarchy.py rename to netbox/netbox/search/hierarchy.py diff --git a/netbox/search/models.py b/netbox/netbox/search/models.py similarity index 56% rename from netbox/search/models.py rename to netbox/netbox/search/models.py index 6aa0972e8..1a862a5f3 100644 --- a/netbox/search/models.py +++ b/netbox/netbox/search/models.py @@ -1,7 +1,3 @@ -from django.core.exceptions import ImproperlyConfigured -from django.db import models - - class SearchMixin(object): """ Base class for building search indexes. diff --git a/netbox/netbox/search/register.py b/netbox/netbox/search/register.py new file mode 100644 index 000000000..f312e5ca9 --- /dev/null +++ b/netbox/netbox/search/register.py @@ -0,0 +1,39 @@ +import importlib +import inspect +import sys + +from django.apps import apps +from django.conf import settings +from django.utils.module_loading import module_has_submodule + +from .backends import default_search_engine +from .hierarchy import SEARCH_TYPES + + +def get_app_modules(): + """ + Returns all app modules (installed apps) - yields tuples of (app_name, module) + """ + for app in apps.get_app_configs(): + yield app.name, app.module + + +def register(): + for name, module in SEARCH_TYPES.items(): + default_search_engine.register(name, module) + + for name, module in get_app_modules(): + submodule_name = "search_indexes" + if module_has_submodule(module, submodule_name): + module_name = f"{name}.{submodule_name}" + if name in settings.PLUGINS: + search_module = importlib.import_module(module_name) + else: + search_module = sys.modules[module_name] + + cls_objects = inspect.getmembers(search_module, predicate=inspect.isclass) + for cls_name, cls_obj in inspect.getmembers(search_module, predicate=inspect.isclass): + if getattr(cls_obj, "search_index", False) and getattr(cls_obj, "model", None): + cls_name = cls_obj.model.__name__.lower() + if not default_search_engine.is_registered(cls_name, cls_obj): + default_search_engine.register(cls_name, cls_obj) diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index d2609969c..6340539dd 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -319,7 +319,6 @@ INSTALLED_APPS = [ 'social_django', 'taggit', 'timezone_field', - 'search', 'circuits', 'dcim', 'ipam', diff --git a/netbox/netbox/views/__init__.py b/netbox/netbox/views/__init__.py index bf2c226ab..d880ba64c 100644 --- a/netbox/netbox/views/__init__.py +++ b/netbox/netbox/views/__init__.py @@ -23,7 +23,7 @@ from extras.tables import ObjectChangeTable from ipam.models import Aggregate, IPAddress, IPRange, Prefix, VLAN, VRF from netbox.constants import SEARCH_MAX_RESULTS from netbox.forms import SearchForm -from search.backends import default_search_engine +from netbox.search.backends import default_search_engine from tenancy.models import Tenant from virtualization.models import Cluster, VirtualMachine from wireless.models import WirelessLAN, WirelessLink diff --git a/netbox/search/apps.py b/netbox/search/apps.py deleted file mode 100644 index 468ba0794..000000000 --- a/netbox/search/apps.py +++ /dev/null @@ -1,45 +0,0 @@ -import importlib -import inspect -import sys -from django.apps import AppConfig - -from django.apps import apps -from django.conf import settings -from django.utils.module_loading import module_has_submodule -from netbox import denormalized - - -def get_app_modules(): - """ - Returns all app modules (installed apps) - yields tuples of (app_name, module) - """ - for app in apps.get_app_configs(): - yield app.name, app.module - - -class SearchConfig(AppConfig): - name = "search" - verbose_name = "search" - - def ready(self): - from .backends import default_search_engine - from .hierarchy import SEARCH_TYPES - - for name, module in SEARCH_TYPES.items(): - default_search_engine.register(name, module) - - for name, module in get_app_modules(): - submodule_name = "search_indexes" - if module_has_submodule(module, submodule_name): - module_name = f"{name}.{submodule_name}" - if name in settings.PLUGINS: - search_module = importlib.import_module(module_name) - else: - search_module = sys.modules[module_name] - - cls_objects = inspect.getmembers(search_module, predicate=inspect.isclass) - for cls_name, cls_obj in inspect.getmembers(search_module, predicate=inspect.isclass): - if getattr(cls_obj, "search_index", False) and getattr(cls_obj, "model", None): - cls_name = cls_obj.model.__name__.lower() - if not default_search_engine.is_registered(cls_name, cls_obj): - default_search_engine.register(cls_name, cls_obj) diff --git a/netbox/tenancy/search_indexes.py b/netbox/tenancy/search_indexes.py index e7d84abc9..d3ac76315 100644 --- a/netbox/tenancy/search_indexes.py +++ b/netbox/tenancy/search_indexes.py @@ -1,7 +1,7 @@ import tenancy.filtersets import tenancy.tables from django.db import models -from search.models import SearchMixin +from netbox.search.models import SearchMixin from tenancy.models import Contact, ContactAssignment, Tenant from utilities.utils import count_related diff --git a/netbox/utilities/templatetags/search.py b/netbox/utilities/templatetags/search.py index c9cd04380..2cd6e7809 100644 --- a/netbox/utilities/templatetags/search.py +++ b/netbox/utilities/templatetags/search.py @@ -1,9 +1,10 @@ from typing import Dict -from netbox.forms import SearchForm + from django import template -register = template.Library() +from netbox.forms import SearchForm +register = template.Library() search_form = None @@ -14,7 +15,7 @@ def search_options(request) -> Dict: if not search_form: search_form = SearchForm() - """Provide search options to template.""" + # Provide search options to template. return { 'options': search_form.get_options(), 'request': request, diff --git a/netbox/virtualization/search_indexes.py b/netbox/virtualization/search_indexes.py index 8b7879062..6bb4121ff 100644 --- a/netbox/virtualization/search_indexes.py +++ b/netbox/virtualization/search_indexes.py @@ -1,7 +1,7 @@ import virtualization.filtersets import virtualization.tables from django.db import models -from search.models import SearchMixin +from netbox.search.models import SearchMixin from utilities.utils import count_related from virtualization.models import Cluster, Device, VirtualMachine diff --git a/netbox/wireless/search_indexes.py b/netbox/wireless/search_indexes.py index cb37aff64..60b9ab84a 100644 --- a/netbox/wireless/search_indexes.py +++ b/netbox/wireless/search_indexes.py @@ -2,7 +2,7 @@ import wireless.filtersets import wireless.tables from dcim.models import Interface from django.db import models -from search.models import SearchMixin +from netbox.search.models import SearchMixin from utilities.utils import count_related from wireless.models import WirelessLAN, WirelessLink