Skip to content

Commit

Permalink
fix: prioritize scheduler execution
Browse files Browse the repository at this point in the history
  • Loading branch information
huenique committed Nov 8, 2021
1 parent 05068b5 commit 5fd42d7
Showing 1 changed file with 44 additions and 26 deletions.
70 changes: 44 additions & 26 deletions dayong/tasks/aptasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,17 @@
from dayong.models import ScheduledTask
from dayong.operations import DatabaseImpl

CONFIG = DayongDynamicLoader.load()
CLIENT = discord.Client()

config = DayongDynamicLoader.load()
sched = AsyncIOScheduler()
rest = RESTClient()
email = None


async def get_scheduled(table_model):
db = DatabaseImpl()
await db.connect(config)
await db.connect(CONFIG)
await db.create_table()
result = await db.get_row(table_model, "task_name")
return result.one()
return (await db.get_row(table_model, "task_name")).one()


async def get_guild_channel(target_channel):
Expand All @@ -35,7 +34,29 @@ async def get_guild_channel(target_channel):
return channel


@sched.scheduled_job("interval", days=1)
async def check_email_cred():
global email

try:
result = await get_scheduled(ScheduledTask(channel_name="", task_name="medium"))
except NoResultFound:
return

email_host = CONFIG.imap_domain_name
email_addr = CONFIG.email
email_pass = CONFIG.email_password
channel = await get_guild_channel(result.channel_name)

if email_addr is None or email_pass is None:
await channel.send(
"Can't retrieve content on email subscription. Please provide your email "
"credentials to do so 🔑"
)
return

email = EmailClient(email_host, email_addr, email_pass)


async def get_devto_article():
try:
result = await get_scheduled(ScheduledTask(channel_name="", task_name="dev"))
Expand All @@ -45,7 +66,7 @@ async def get_devto_article():
if bool(result.run) is False:
return

content = await RESTClient().get_devto_article(sort_by_date=True)
content = await email.get_devto_article(sort_by_date=True)
channel = await get_guild_channel(result.channel_name)

if not isinstance(channel, TextChannel):
Expand All @@ -55,13 +76,14 @@ async def get_devto_article():
f"{get_devto_article.__name__} delivering content to: {result.channel_name}"
)
for content in content.content:
print(content)
await channel.send(content)
await asyncio.sleep(60)
await asyncio.sleep(30)


@sched.scheduled_job("interval", days=1)
async def get_medium_daily_digest():
if email is None:
return

try:
result = await get_scheduled(ScheduledTask(channel_name="", task_name="medium"))
except NoResultFound:
Expand All @@ -70,27 +92,23 @@ async def get_medium_daily_digest():
if bool(result.run) is False:
return

email = config.email
email_password = config.email_password
channel = await get_guild_channel(result.channel_name)

if email is None or email_password is None:
await channel.send(
"Can't retrieve content. Please check for missing email credentials 😕"
)
return

client = EmailClient(config.imap_domain_name, email, email_password)
content = await client.get_medium_daily_digest()
content = await email.get_medium_daily_digest()

logger.info(
f"{get_medium_daily_digest.__name__} delivering content to: {result.channel_name}"
)
for content in content.content:
await channel.send(content)
await asyncio.sleep(60)
await asyncio.sleep(30)


@CLIENT.event
async def on_ready():
sched.start()
await check_email_cred()
scheduler = AsyncIOScheduler()
scheduler.add_job(get_devto_article, "interval", days=1)
scheduler.add_job(get_medium_daily_digest, "interval", days=1)
scheduler.start()


CLIENT.run(DayongDynamicLoader.load().bot_token)
CLIENT.run(CONFIG.bot_token)

0 comments on commit 5fd42d7

Please sign in to comment.