diff options
| -rw-r--r-- | core/models/config.py | 35 | ||||
| -rw-r--r-- | stator/runner.py | 3 | 
2 files changed, 36 insertions, 2 deletions
| 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 @@ -89,19 +90,39 @@ class Config(models.Model):          )      @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, @@ -109,6 +130,16 @@ class Config(models.Model):          )      @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]          if isinstance(value, File): 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: | 
