From 566201507d0e59ca92598766a89cd7c9b0b16ec4 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 30 Oct 2024 13:40:30 -0400 Subject: [PATCH] Use a decorator to register system jobs --- netbox/netbox/jobs.py | 13 +++++++++++++ netbox/netbox/plugins/__init__.py | 9 +-------- netbox/netbox/tests/dummy_plugin/__init__.py | 5 +++++ netbox/netbox/tests/dummy_plugin/jobs.py | 3 ++- netbox/netbox/utils.py | 12 ------------ 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/netbox/netbox/jobs.py b/netbox/netbox/jobs.py index a2a0c35ac..600ba32a6 100644 --- a/netbox/netbox/jobs.py +++ b/netbox/netbox/jobs.py @@ -9,12 +9,25 @@ from rq.timeouts import JobTimeoutException from core.choices import JobStatusChoices from core.models import Job, ObjectType from netbox.constants import ADVISORY_LOCK_KEYS +from netbox.registry import registry __all__ = ( 'JobRunner', + 'system_job', ) +def system_job(): + """ + Decorator for registering a `JobRunner` class as system background job. + """ + def _wrapper(cls): + registry['system_jobs'][cls.name] = cls + return cls + + return _wrapper + + class JobRunner(ABC): """ Background Job helper class. diff --git a/netbox/netbox/plugins/__init__.py b/netbox/netbox/plugins/__init__.py index 42e2e26bd..69881a251 100644 --- a/netbox/netbox/plugins/__init__.py +++ b/netbox/netbox/plugins/__init__.py @@ -8,7 +8,7 @@ from packaging import version from netbox.registry import registry from netbox.search import register_search -from netbox.utils import register_data_backend, register_system_job +from netbox.utils import register_data_backend from .navigation import * from .registration import * from .templates import * @@ -26,7 +26,6 @@ registry['plugins'].update({ DEFAULT_RESOURCE_PATHS = { 'search_indexes': 'search.indexes', 'data_backends': 'data_backends.backends', - 'system_jobs': 'jobs.system_jobs', 'graphql_schema': 'graphql.schema', 'menu': 'navigation.menu', 'menu_items': 'navigation.menu_items', @@ -74,7 +73,6 @@ class PluginConfig(AppConfig): # Optional plugin resources search_indexes = None data_backends = None - system_jobs = None graphql_schema = None menu = None menu_items = None @@ -114,11 +112,6 @@ class PluginConfig(AppConfig): for backend in data_backends: register_data_backend()(backend) - # Register system jobs (if defined) - system_jobs = self._load_resource('system_jobs') or [] - for job in system_jobs: - register_system_job()(job) - # Register template content (if defined) if template_extensions := self._load_resource('template_extensions'): register_template_extensions(template_extensions) diff --git a/netbox/netbox/tests/dummy_plugin/__init__.py b/netbox/netbox/tests/dummy_plugin/__init__.py index 6ab62d638..2ca7c290c 100644 --- a/netbox/netbox/tests/dummy_plugin/__init__.py +++ b/netbox/netbox/tests/dummy_plugin/__init__.py @@ -21,5 +21,10 @@ class DummyPluginConfig(PluginConfig): 'netbox.tests.dummy_plugin.events.process_events_queue' ] + def ready(self): + super().ready() + + from . import jobs # noqa: F401 + config = DummyPluginConfig diff --git a/netbox/netbox/tests/dummy_plugin/jobs.py b/netbox/netbox/tests/dummy_plugin/jobs.py index bf6560fd6..92dfd549a 100644 --- a/netbox/netbox/tests/dummy_plugin/jobs.py +++ b/netbox/netbox/tests/dummy_plugin/jobs.py @@ -1,7 +1,8 @@ from core.choices import JobIntervalChoices -from netbox.jobs import JobRunner +from netbox.jobs import JobRunner, system_job +@system_job() class DummySystemJob(JobRunner): class Meta: system_interval = JobIntervalChoices.INTERVAL_HOURLY diff --git a/netbox/netbox/utils.py b/netbox/netbox/utils.py index 60067c553..f27d1b5f7 100644 --- a/netbox/netbox/utils.py +++ b/netbox/netbox/utils.py @@ -3,7 +3,6 @@ from netbox.registry import registry __all__ = ( 'get_data_backend_choices', 'register_data_backend', - 'register_system_job', ) @@ -25,14 +24,3 @@ def register_data_backend(): return cls return _wrapper - - -def register_system_job(): - """ - Decorator for registering a `JobRunner` class as system background job. - """ - def _wrapper(cls): - registry['system_jobs'][cls.name] = cls - return cls - - return _wrapper