telegram_bots/feeds/tasks.py

52 lines
1.4 KiB
Python
Raw Normal View History

2019-03-14 07:17:08 +00:00
import traceback
2019-03-10 07:11:59 +00:00
import sentry_sdk
2019-03-14 06:53:06 +00:00
from celery.exceptions import Reject
2019-01-26 09:36:44 +00:00
from celery_once import QueueOnce
2019-01-11 19:16:01 +00:00
from django.utils import timezone
from telebot import TeleBot
2019-01-19 06:52:00 +00:00
from djconfig import config
2019-01-11 19:16:01 +00:00
from config.celery import app
2019-01-26 09:36:44 +00:00
2019-01-26 09:43:15 +00:00
@app.task(base=QueueOnce, once={'graceful': True})
2019-01-26 09:36:44 +00:00
def check_feeds():
2019-01-26 09:38:13 +00:00
from feeds.models import Feed
2019-01-26 09:36:44 +00:00
feeds = Feed.objects.filter(lock=False)
2019-03-14 06:53:06 +00:00
enqueued = []
2019-01-26 09:36:44 +00:00
for feed in feeds:
2019-03-14 06:53:06 +00:00
if feed.run_check():
enqueued.append(str(feed))
return f'Following tasks were enqueued: {enqueued}'
2019-01-11 19:16:01 +00:00
@app.task()
def execute_feed(feed_pk):
from feeds.models import Feed
2019-01-25 16:33:22 +00:00
2019-01-25 16:33:54 +00:00
config._reload_maybe()
2019-01-11 19:16:01 +00:00
2019-04-10 23:07:37 +00:00
feed = Feed.objects.get(pk=feed_pk)
with sentry_sdk.configure_scope() as scope:
scope.set_extra('feed', str(feed))
try:
bot = TeleBot(config.feed_bot_token, threaded=False)
print(f'Last ID for "{feed}" = "{feed.last_id}"')
for last_id in feed.config.execute(bot, feed.chat_id, feed.last_id):
if last_id:
feed.last_id = last_id
feed.save()
print(f'Saved last ID for "{feed}" = "{feed.last_id}"')
feed.last_check = timezone.now()
2019-02-04 09:15:53 +00:00
feed.save()
2019-04-10 23:07:37 +00:00
except Exception as e:
sentry_sdk.capture_exception(e)
traceback.print_exc()
finally:
if feed:
feed.lock = False
feed.save()