From 6d8be1dbee240533a980ac383f0fc1a9ed20f334 Mon Sep 17 00:00:00 2001 From: N0str Date: Fri, 8 Mar 2019 18:42:44 +0300 Subject: [PATCH] Change arguments according to the new library --- lib/scheduler.py | 125 +++++++++++------------------------------------ 1 file changed, 29 insertions(+), 96 deletions(-) diff --git a/lib/scheduler.py b/lib/scheduler.py index 0fe2170..cd8cc3b 100644 --- a/lib/scheduler.py +++ b/lib/scheduler.py @@ -8,7 +8,6 @@ class Scheduler: def __init__(self, sdk): """ Initialize apscheduler and start - :param sdk: """ self.sdk = sdk @@ -21,126 +20,60 @@ def restore(self, processor): - Get all jobs - Get callback, returned by processor function by payload - Run scheduler job - - Example: - self.sdk.scheduler.restore(say_hello) - :param processor: function, which returns appropriate callback to call for the job (by payload) """ - # Get jobs from db jobs = self.sdk.db.find(Scheduler.COLLECTION_NAME, {}) - - # Run jobs for job in jobs: - self.scheduler.add_job( - processor, - id=job['id'], - args=job['args'], - trigger='cron', - replace_existing=True, - **job['trigger_params'] - ) - - def add(self, callback, payload, args, trigger_params=None): + self.scheduler.add_job(processor(job.get('payload', None)), + id=job['chat_id'], + hour=job['hour'], + args=job['args'], + trigger='cron', + replace_existing=True) + + def add(self, callback, chat_id, args, hour, payload=None): """ Add new scheduling job. - Append params to DB - Add Apscheduler job - - Example: - def say_hello(payload, data): - print(data['message']) - - self.sdk.scheduler.add( - say_hello, # Callback function - payload, # Job identify by chat and bot - args=[payload, data], # Callback params - trigger_params={'minute': '0', 'hour': '*/6'} # Cron params - ) - - Available trigger_params: - year (int|str) – 4-digit year - month (int|str) – month (1-12) - day (int|str) – day of the (1-31) - week (int|str) – ISO week (1-53) - day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun) - hour (int|str) – hour (0-23) - minute (int|str) – minute (0-59) - second (int|str) – second (0-59) - :param callback: function to execute at the time - :param payload: chat and bot + :param chat_id: chat ID :param args: arguments for callback function - :param trigger_params: {'minute': '*', 'hour': '*/2'} + :param hour: time to run in HH:mm format + :param payload: data to keep in DB for the further restore function usage """ - job_id = self.__create_id(payload) - try: - # Save job to db - self.sdk.db.insert( - Scheduler.COLLECTION_NAME, - { - 'id': job_id, - 'trigger_params': trigger_params, - 'args': args - } - ) - - # Run job - self.scheduler.add_job( - callback, - id=job_id, - args=args, - trigger='cron', - replace_existing=True, - **trigger_params - ) + self.sdk.db.insert(Scheduler.COLLECTION_NAME, {'chat_id': chat_id, + 'hour': hour, + 'args': args, + 'payload': payload, + }) + self.scheduler.add_job(callback, + id=chat_id, + hour=hour, + args=args, + trigger='cron', + replace_existing=True) except Exception as e: - if self.sdk.hawk: - self.sdk.hawk.catch() self.sdk.logging.debug("Error: {}".format(e)) - def find(self, payload): + def find(self, chat_id): """ Return saved scheduler data from DB by chat_id - :param payload: chat and bot + :param chat_id: chat ID :return: data from db """ - job_id = self.__create_id(payload) - - result = self.sdk.db.find_one(Scheduler.COLLECTION_NAME, {'id': job_id}) - + result = self.sdk.db.find_one(Scheduler.COLLECTION_NAME, {'chat_id': chat_id}) return result - def remove(self, payload): + def remove(self, chat_id): """ Remove saved scheduler data from DB and stop job by chat_id - - Example: - self.sdk.scheduler.remove( - payload # Job identifier by chat and bot - ) - - :param payload: chat and bot + :param chat_id: chat ID :return: remove result """ - job_id = self.__create_id(payload) - try: - self.scheduler.remove_job(job_id) + self.scheduler.remove_job(chat_id) except Exception as e: - if self.sdk.hawk: - self.sdk.hawk.catch() self.sdk.logging.debug("Error during remove job: {}".format(e)) - - return self.sdk.db.remove(Scheduler.COLLECTION_NAME, {'id': job_id}) - - def __create_id(self, payload): - job_id = payload.get('chat') - - bot_hash = payload.get('bot', None) - - if bot_hash: - job_id = "{}:{}".format(bot_hash, job_id) - - return job_id + return self.sdk.db.remove(Scheduler.COLLECTION_NAME, {'chat_id': chat_id})