diff --git a/core/models/config.py b/core/models/config.py index dca8a0c..0a8d624 100644 --- a/core/models/config.py +++ b/core/models/config.py @@ -2,6 +2,7 @@ from functools import partial from typing import ClassVar import pydantic +from asgiref.sync import sync_to_async from django.core.files import File from django.db import models from django.templatetags.static import static @@ -88,26 +89,56 @@ class Config(models.Model): {"identity__isnull": True, "user__isnull": True}, ) + @classmethod + async def aload_system(cls): + """ + Async loads the system config options object + """ + return await sync_to_async(cls.load_values)( + cls.SystemOptions, + {"identity__isnull": True, "user__isnull": True}, + ) + @classmethod def load_user(cls, user): """ Loads a user config options object """ return cls.load_values( - cls.SystemOptions, + cls.UserOptions, + {"identity__isnull": True, "user": user}, + ) + + @classmethod + async def aload_user(cls, user): + """ + Async loads the user config options object + """ + return await sync_to_async(cls.load_values)( + cls.UserOptions, {"identity__isnull": True, "user": user}, ) @classmethod def load_identity(cls, identity): """ - Loads a user config options object + Loads an identity config options object """ return cls.load_values( cls.IdentityOptions, {"identity": identity, "user__isnull": True}, ) + @classmethod + async def aload_identity(cls, identity): + """ + Async loads an identity config options object + """ + return await sync_to_async(cls.load_values)( + cls.IdentityOptions, + {"identity": identity, "user__isnull": True}, + ) + @classmethod def set_value(cls, key, value, options_class, filters): config_field = options_class.__fields__[key] diff --git a/stator/runner.py b/stator/runner.py index 21c6128..a954a2e 100644 --- a/stator/runner.py +++ b/stator/runner.py @@ -8,6 +8,7 @@ from typing import List, Optional, Type from django.utils import timezone from core import exceptions +from core.models import Config from stator.models import StatorModel @@ -44,6 +45,8 @@ class StatorRunner: while True: # Do we need to do cleaning? if (time.monotonic() - self.last_clean) >= self.schedule_interval: + # Refresh the config + Config.system = await Config.aload_system() print(f"{self.handled} tasks processed so far") print("Running cleaning and scheduling") for model in self.models: