Scheduled Events

DivvyCloud bots can spawn jobs that run at specified times with specified arguments. These jobs are called scheduled events.


A job is registered as a scheduled event using the register method of the ScheduledEventManager class, which acts as a class decorator. For example, this is how the StartResourceJob scheduled event is registered in DivvyCloud:

from DivvyWorkers.Processors.ScheduledEvents import ScheduledEventManager
class StartResourceJob(MultiResourceScheduledEventJob):

The scheduled event can then be referred to using the unique identifier defined in the register decorator, in this case divvy.start_resource.

Here is an example of how to spawn a scheduled event within a bot action:

from DivvyBotfactory.scheduling import ScheduledEventTracker

def start_resource_example(bot, settings, matches, non_matches):
    with ScheduledEventTracker() as context:
        for resource in matches:
                bot=bot, resource=resource,
                description='Start a resource.',
                schedule_data=schedule.Once(when=datetime.utcnow() + timedelta(hours=12))

Dynamic Loading and Unloading

When developing a plugin that DivvyCloud dynamically loads and unloads, it is necessary to unload the plugin’s scheduled events. This can be conveniently done using the ScheduledEventRegistryWrapper class, which requires only a minor variation upon the pattern shown above.

An example:

from DivvyWorkers.Processors.ScheduledEvents import ScheduledEventRegistryWrapper

# Initialize the registry wrapper
events = ScheduledEventRegistryWrapper()

# Register a scheduled event job
class StartResourceJob(MultiResourceScheduledEventJob):

# Handle plugin loading/unloading
def load():
def unload():

A scheduled event registered this way is created and referred to in the same way as before. The only difference is in the specific syntax of how that event is registered.