import asyncio from apscheduler.schedulers.asyncio import AsyncIOScheduler from django.core.management.base import BaseCommand from core.clients.aggregators.nordigen import NordigenClient from core.models import Aggregator from core.util import logs log = logs.get_logger("scheduling") INTERVAL = 5 async def job(): print("Running schedule.") aggregators = Aggregator.objects.filter(enabled=True, fetch_accounts=True) for aggregator in aggregators: if aggregator.service == "nordigen": instance = await NordigenClient(aggregator) await instance.get_all_account_info(store=True) else: raise NotImplementedError(f"No such client library: {aggregator.service}") aggregator.fetch_accounts = False aggregator.save() class Command(BaseCommand): def handle(self, *args, **options): """ Start the scheduling process. """ scheduler = AsyncIOScheduler() log.debug(f"Scheduling checking process job every {INTERVAL} seconds") scheduler.add_job(job, "interval", seconds=INTERVAL) scheduler.start() loop = asyncio.get_event_loop() try: loop.run_forever() except (KeyboardInterrupt, SystemExit): log.info("Process terminating") finally: loop.close()