2222from sopel .db import SopelDB
2323import sopel .loader
2424from sopel .module import NOLIMIT
25- from sopel .plugins import rules as plugin_rules
25+ from sopel .plugins import jobs as plugin_jobs , rules as plugin_rules
2626from sopel .tools import deprecated , Identifier
2727import sopel .tools .jobs
2828from sopel .trigger import Trigger
@@ -61,6 +61,7 @@ def __init__(self, config, daemon=False):
6161 self ._running_triggers_lock = threading .Lock ()
6262 self ._plugins = {}
6363 self ._rules_manager = plugin_rules .Manager ()
64+ self ._scheduler = plugin_jobs .Scheduler (self )
6465
6566 self ._times = {}
6667 """
@@ -118,13 +119,16 @@ def __init__(self, config, daemon=False):
118119 self .shutdown_methods = []
119120 """List of methods to call on shutdown."""
120121
121- self .scheduler = sopel .tools .jobs .JobScheduler (self )
122- """Job Scheduler. See :func:`sopel.module.interval`."""
123-
124122 @property
125123 def rules (self ):
124+ """Rules manager."""
126125 return self ._rules_manager
127126
127+ @property
128+ def scheduler (self ):
129+ """Job Scheduler. See :func:`sopel.module.interval`."""
130+ return self ._scheduler
131+
128132 @property
129133 def command_groups (self ):
130134 """A mapping of plugin names to lists of their commands.
@@ -250,7 +254,7 @@ def setup(self):
250254 """
251255 self .setup_logging ()
252256 self .setup_plugins ()
253- self .scheduler .start ()
257+ self ._scheduler .start ()
254258
255259 def setup_logging (self ):
256260 """Set up logging based on config options."""
@@ -414,7 +418,7 @@ def remove_plugin(self, plugin, callables, jobs, shutdowns, urls):
414418
415419 # remove plugin rules, jobs, shutdown functions, and url callbacks
416420 self ._rules_manager .unregister_plugin (name )
417- self .unregister_jobs ( jobs )
421+ self ._scheduler . unregister_plugin ( name )
418422 self .unregister_shutdowns (shutdowns )
419423 self .unregister_urls (urls )
420424
@@ -450,10 +454,14 @@ def get_plugin_meta(self, name):
450454 version = '7.1' ,
451455 removed_in = '8.0' )
452456 def unregister (self , obj ):
453- """Unregister a job or a shutdown method.
457+ """Unregister a shutdown method.
454458
455- :param obj: the job or shutdown method to unregister
459+ :param obj: the shutdown method to unregister
456460 :type obj: :term:`object`
461+
462+ This method was used to unregister anything (rules, commands, urls,
463+ jobs, and shutdown methods), but since everything can be done by other
464+ means, there is no use for it anymore.
457465 """
458466 callable_name = getattr (obj , "__name__" , 'UNKNOWN' )
459467
@@ -544,20 +552,12 @@ def register_callables(self, callables):
544552
545553 def register_jobs (self , jobs ):
546554 for func in jobs :
547- for interval in func .interval :
548- job = sopel .tools .jobs .Job (interval , func )
549- self .scheduler .add_job (job )
550- callable_name = getattr (func , "__name__" , 'UNKNOWN' )
551- LOGGER .debug (
552- 'Job added "%s", will run every %d seconds' ,
553- callable_name ,
554- interval )
555+ job = sopel .tools .jobs .Job .from_callable (self .settings , func )
556+ self ._scheduler .register (job )
555557
556558 def unregister_jobs (self , jobs ):
557559 for job in jobs :
558- callable_name = getattr (job , "__name__" , 'UNKNOWN' )
559- self .scheduler .remove_callable_job (job )
560- LOGGER .debug ('Job callable removed: %s' , callable_name )
560+ self ._scheduler .remove_callable_job (job )
561561
562562 def register_shutdowns (self , shutdowns ):
563563 # Append plugin's shutdown function to the bot's list of functions to
@@ -857,8 +857,8 @@ def _update_running_triggers(self, running_triggers):
857857 def on_scheduler_error (self , scheduler , exc ):
858858 """Called when the Job Scheduler fails.
859859
860- :param scheduler: the JobScheduler that errored
861- :type scheduler: :class:`sopel.tools .jobs.JobScheduler `
860+ :param scheduler: the job scheduler that errored
861+ :type scheduler: :class:`sopel.plugins .jobs.Scheduler `
862862 :param Exception exc: the raised exception
863863
864864 .. seealso::
@@ -870,8 +870,8 @@ def on_scheduler_error(self, scheduler, exc):
870870 def on_job_error (self , scheduler , job , exc ):
871871 """Called when a job from the Job Scheduler fails.
872872
873- :param scheduler: the JobScheduler responsible for the errored ``job``
874- :type scheduler: :class:`sopel.tools .jobs.JobScheduler `
873+ :param scheduler: the job scheduler responsible for the errored ``job``
874+ :type scheduler: :class:`sopel.plugins .jobs.Scheduler `
875875 :param job: the Job that errored
876876 :type job: :class:`sopel.tools.jobs.Job`
877877 :param Exception exc: the raised exception
@@ -939,16 +939,16 @@ def _shutdown(self):
939939 LOGGER .info ('Shutting down' )
940940 # Stop Job Scheduler
941941 LOGGER .info ('Stopping the Job Scheduler.' )
942- self .scheduler .stop ()
942+ self ._scheduler .stop ()
943943
944944 try :
945- self .scheduler .join (timeout = 15 )
945+ self ._scheduler .join (timeout = 15 )
946946 except RuntimeError :
947947 LOGGER .exception ('Unable to stop the Job Scheduler.' )
948948 else :
949949 LOGGER .info ('Job Scheduler stopped.' )
950950
951- self .scheduler .clear_jobs ()
951+ self ._scheduler .clear_jobs ()
952952
953953 # Shutdown plugins
954954 LOGGER .info (
0 commit comments