Source code for asynciojobs.printjob

"""
The ``PrintJob`` class is a specialization of the
:class:`~asynciojobs.job.AbstractJob` class,
mostly useful for debugging, tests and tutorials.
"""

import asyncio

from .job import AbstractJob


[docs] class PrintJob(AbstractJob): """ A job that just prints messages, and optionnally sleeps for some time. Parameters: messages: passed to ``print`` as-is sleep: optional, an int or float describing in seconds how long to sleep after the messages get printed banner: optional, a fixed text printed out before the messages like e.g. ``40*'='``; it won't make it into ``details()`` scheduler: passed to :class:``AbstractJob`` required: passed to :class:``AbstractJob`` label: passed to :class:``AbstractJob`` """ def __init__(self, *messages, sleep=None, banner=None, # these are for AbstractJob scheduler=None, label=None, required=None): self.messages = messages self.sleep = sleep self.banner = banner super().__init__(label=label, required=required, scheduler=scheduler)
[docs] async def co_run(self): """ Implementation of the method expected by :class:`AbstractJob` """ try: if self.banner: print(self.banner + " ", end="") print(*self.messages) if self.sleep: print("Sleeping for {}s".format(self.sleep)) await asyncio.sleep(self.sleep) except Exception: # pylint: disable=W0703 # should not happen, but if it does we need to know why import traceback traceback.print_exc()
[docs] async def co_shutdown(self): """ Implementation of the method expected by :class:`AbstractJob`; does nothing. """ pass
[docs] def details(self): # pylint: disable=C0111 """ Implementation of the method expected by :class:`AbstractJob` """ result = "" if self.sleep: result += "[+ sleep {}s] ".format(self.sleep) result += "msg= " result += self.messages[0] result += "..." if len(self.messages) > 1 else "" return result