Skip to content

Commit

Permalink
Add types to backend and models files
Browse files Browse the repository at this point in the history
  • Loading branch information
mikeengland committed Jun 23, 2021
1 parent 85271ee commit cf9bf23
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 11 deletions.
21 changes: 12 additions & 9 deletions setty/backend.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import logging
from typing import Optional, Iterable, Any, TypeVar

from django.conf import settings
from django.core.cache import cache
Expand All @@ -8,26 +9,28 @@

logger = logging.getLogger(__name__)

T = TypeVar('T')


class DatabaseBackend:
"""
The simple DatabaseBackend is backed by the Django model storing these settings
"""

def get_all(self, app_name=None):
def get_all(self, app_name: Optional[str] = None) -> Iterable:
if app_name:
return SettySettings.objects.filter(app_name=app_name).all()
return SettySettings.objects.all()

def get(self, name):
def get(self, name: str) -> Any:
try:
setting = SettySettings.objects.get(name=name).value
except SettySettings.DoesNotExist:
setting = getattr(settings, 'SETTY_NOT_FOUND_VALUE', None)

return setting

def set(self, name, value):
def set(self, name: str, value: T) -> T:
updated_count = SettySettings.objects.filter(name=name).update(value=value)
if not updated_count:
raise SettingDoesNotExistError(
Expand All @@ -42,7 +45,7 @@ class CacheBackend(DatabaseBackend):
database on each get call.
"""

def get(self, name):
def get(self, name: str) -> Any:
cache_key = self._make_cache_key(name)
setting_value = cache.get(cache_key, '__expired__')
if setting_value != '__expired__':
Expand All @@ -51,23 +54,23 @@ def get(self, name):
logger.debug('From Database:', setting_value)
return self._retrieve_and_cache_setting(name)

def _retrieve_and_cache_setting(self, name):
def _retrieve_and_cache_setting(self, name: str) -> Any:
value = super().get(name)
self.set_in_cache(name, value)
return value

def set(self, name, value):
def set(self, name: str, value: T) -> T:
super().set(name, value)
self.set_in_cache(name, value)
return value

def set_in_cache(self, name, value):
def set_in_cache(self, name: str, value: Any) -> None:
cache.set(self._make_cache_key(name), value, getattr(settings, 'SETTY_CACHE_TTL', 3600))

def load_all_settings_into_cache(self):
def load_all_settings_into_cache(self) -> None:
for setting in self.get_all():
self.set_in_cache(setting.name, setting.value)

@staticmethod
def _make_cache_key(name):
def _make_cache_key(name: str) -> str:
return ':'.join([getattr(settings, 'SETTY_CACHE_PREFIX', '_dyn_settings_'), name])
4 changes: 2 additions & 2 deletions setty/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ class SettySettings(models.Model):
updated_time = models.DateTimeField(auto_now=True)

@property
def value_unpacked(self):
def value_unpacked(self) -> str:
return str(self.value)

@value_unpacked.setter
def value_unpacked(self, value):
def value_unpacked(self, value: Any) -> None:
self.value = value

def __str__(self):
Expand Down

0 comments on commit cf9bf23

Please sign in to comment.