We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
In my blog, there are some recurring tasks (such as e.g. the refresh of the Covid19 statistics).
They are implemented as management tasks by implemeting them under the app in covid/management/commands/refresh_covid.py
:
covid/management/commands/refresh_covid.py
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = 'Refreshes the covid info in the database'
def handle(self, *args, **options):
self._log_info("Refreshing the covid info")
# Run the actual refresh routine
self._log_info("Refreshed the covid info")
def _log_info(self, *msg):
full_msg = ' '.join(msg)
self.stdout.write(self.style.SUCCESS(full_msg))
By implementing the commands this way, I can easily run them using manage.py
:
$ ./manage.py refresh_covid
However, when I want to trigger them manually or execute them automatically using tools such as apscheduler, you need a way to call them from code.
This can be achieved by using the django.core.management
module:
from django.core import management
from apscheduler.schedulers.background import BackgroundScheduler
def hourly_covid_refresh():
management.call('refresh_covid')
def start():
scheduler = BackgroundScheduler()
scheduler.add_job(hourly_covid_refresh, 'cron', minute='0', hour='*', day='*', week='*', month='*')
scheduler.start()
If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts, subscribe use the RSS feed.