mirror of
https://github.com/goauthentik/authentik
synced 2026-05-10 00:52:05 +02:00
* start db cache Signed-off-by: Jens Langhammer <jens@goauthentik.io> * update codeowners Signed-off-by: Jens Langhammer <jens@goauthentik.io> * handle db error in keys Signed-off-by: Jens Langhammer <jens@goauthentik.io> * implement rest of the methods Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix unrelated warning on startup for cache Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix migrations? Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add readme Signed-off-by: Jens Langhammer <jens@goauthentik.io> * dynamic dependency...? Signed-off-by: Jens Langhammer <jens@goauthentik.io> * types Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rip out django_redis Signed-off-by: Jens Langhammer <jens@goauthentik.io> * format Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix tests? Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix get default Signed-off-by: Jens Langhammer <jens@goauthentik.io> * some cleanup Signed-off-by: Jens Langhammer <jens@goauthentik.io> * simplify to use ORM Signed-off-by: Jens Langhammer <jens@goauthentik.io> * remove old migrations that use cache instead of doing dynamic things Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix migration Signed-off-by: Jens Langhammer <jens@goauthentik.io> * Update packages/django-postgres-cache/django_postgres_cache/models.py Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * Update packages/django-postgres-cache/django_postgres_cache/migrations/0001_initial.py Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * fix redis imports Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * more redis removal Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * lint Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io> Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> Co-authored-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
from typing import Any
|
|
|
|
from django.core.cache.backends.db import DatabaseCache as BaseDatabaseCache
|
|
from django.db.utils import ProgrammingError
|
|
from django.utils.module_loading import import_string
|
|
from django.utils.timezone import now
|
|
|
|
from django_postgres_cache.models import CacheEntry
|
|
|
|
|
|
class DatabaseCache(BaseDatabaseCache):
|
|
|
|
def __init__(self, table: str, params: dict[str, Any]) -> None:
|
|
super().__init__(table, params)
|
|
self.reverse_key_func = import_string(params["REVERSE_KEY_FUNCTION"])
|
|
self._table = CacheEntry._meta.db_table
|
|
self.cache_model_class = CacheEntry
|
|
|
|
def _cull(self, *args: Any, **kwargs: Any) -> None:
|
|
"""Stubbed out cull method as we cull in a background task"""
|
|
pass
|
|
|
|
def get(self, key: str, default: Any | None = None, version: int | None = None) -> Any:
|
|
try:
|
|
return super().get(key, default=default, version=version)
|
|
except ProgrammingError:
|
|
return default
|
|
|
|
def keys(self, keys_pattern: str, version: int | None = None) -> list[str]:
|
|
try:
|
|
return self._keys(keys_pattern, version=version)
|
|
except ProgrammingError:
|
|
return []
|
|
|
|
def _keys(self, keys_pattern: str, version: int | None = None) -> list[str]:
|
|
keys_pattern = self.make_key(keys_pattern.replace("*", ".*"), version=version)
|
|
|
|
return [
|
|
self.reverse_key_func(key)
|
|
for key in CacheEntry.objects.filter(cache_key__regex=keys_pattern).values_list(
|
|
"cache_key", flat=True
|
|
)
|
|
]
|
|
|
|
def ttl(self, key: str, version: int | None = None) -> int | None:
|
|
"""Get TTL left for a given key and version"""
|
|
key = self.make_and_validate_key(key, version=version)
|
|
entry = CacheEntry.objects.filter(cache_key=key).first()
|
|
if not entry:
|
|
return None
|
|
return int((entry.expires - now()).total_seconds())
|