fixed persistence in the job runner

This commit is contained in:
cupcakearmy 2019-12-23 01:35:11 +01:00
parent e1c93963d9
commit a3a0bef85b
3 changed files with 20 additions and 13 deletions

View File

@ -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):

View File

@ -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 🚀')

View File

@ -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())