From a3a0bef85ba024127ad14091e3ccc1db84c508ee Mon Sep 17 00:00:00 2001 From: cupcakearmy Date: Mon, 23 Dec 2019 01:35:11 +0100 Subject: [PATCH] fixed persistence in the job runner --- src/commands/other.py | 25 +++++++++++++------------ src/mercatus.py | 2 +- src/utils.py | 6 ++++++ 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/commands/other.py b/src/commands/other.py index 08abfbf..cb4306d 100644 --- a/src/commands/other.py +++ b/src/commands/other.py @@ -9,7 +9,7 @@ from telegram.ext.dispatcher import run_async from commands.config import Section from market import Market from text import INTRO_TEXT -from utils import persistence, updater, current_timestamp, delta_timestamp +from utils import persistence, updater, current_timestamp, delta_timestamp, update_updater_data SENDING = False @@ -41,38 +41,38 @@ def send_update_to_user(user: str, auto, codes=None): try: user_data = persistence.user_data[user] running = user_data.setdefault(Section.Running.value, False) + update_updater_data() if Section.API_Key.value not in user_data: updater.bot.send_message(user, text='API Key not set ⛔️\nSet in /settings') return - if running: + if running and not auto: updater.bot.send_message(user, text='Already running 🏃') return user_data[Section.Running.value] = True market = Market(user_data[Section.API_Key.value]) now = current_timestamp() - if auto: - updater.bot.send_message(user, text='Getting updates 🌎') first = True - for code in codes if codes else user_data.get(Section.Watchlist.value, {}).keys(): + for code in codes or user_data.get(Section.Watchlist.value, {}): try: - code_data = persistence.user_data[user][Section.Watchlist.value][code] - code_data = code_data['value'] - print(code, code_data) + code_data = persistence.user_data[user][Section.Watchlist.value][code]['value'] last_run = code_data[Section.LastRun.value] frequency = parse(code_data[Section.Frequency.value]) interval = parse(code_data[Section.Interval.value]) - print(code, last_run + frequency, now, last_run + frequency - now) + # print(code, last_run + frequency, now, last_run + frequency - now) if auto and last_run + frequency > now: continue - persistence.user_data[user][Section.Watchlist.value][code][Section.LastRun.value] = current_timestamp() - persistence.flush() + + code_data[Section.LastRun.value] = current_timestamp() + update_updater_data() if first: + if auto: + updater.bot.send_message(user, text='Getting updates 🌎') first = False else: # Wait to not overload the api @@ -90,11 +90,12 @@ def send_update_to_user(user: str, auto, codes=None): print(f'❌ {user} - {e}') updater.bot.send_message(user, text=f'There was an error ⚠️\n {e}') - if auto: + if not first and auto: # Has run at least once updater.bot.send_message(user, text=f'Done ✅') finally: if user_data: user_data[Section.Running.value] = False + update_updater_data() def send_updates(context: CallbackContext): diff --git a/src/mercatus.py b/src/mercatus.py index 948c384..c4d927b 100644 --- a/src/mercatus.py +++ b/src/mercatus.py @@ -23,7 +23,7 @@ def main(): dp.add_handler(watchlist_handler) # Cron jobs - jq.run_repeating(send_updates, interval=30, first=5) + jq.run_repeating(send_updates, interval=20, first=3) # Start print('Started 🚀') diff --git a/src/utils.py b/src/utils.py index 58b5fc2..ec962d5 100644 --- a/src/utils.py +++ b/src/utils.py @@ -13,6 +13,12 @@ persistence = PicklePersistence(DB_FILE) updater: Updater = Updater(config['token'], use_context=True, persistence=persistence) +def update_updater_data(): + updater.dispatcher.user_data = persistence.user_data + updater.dispatcher.update_persistence() + persistence.flush() + + def current_timestamp(): return int(datetime.now().timestamp())