from django.contrib.auth.models import Group
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
+from django.core.cache import cache
from django.db import connections
from django.db.migrations.loader import MigrationLoader
from django.db.migrations.recorder import MigrationRecorder
from django.utils.translation import get_language
from django.views import View
from django.views.decorators.cache import cache_control
-from django.views.decorators.cache import cache_page
from django.views.decorators.http import condition
from django.views.decorators.http import last_modified
from django.views.generic import TemplateView
)
-@method_decorator(cache_page(60 * 15), name="dispatch")
@extend_schema_view(
get=extend_schema(
description="Get the current version of the Paperless-NGX server",
),
)
class RemoteVersionView(GenericAPIView):
+ cache_key = "remote_version_view_latest_release"
+
def get(self, request, format=None):
- remote_version = "0.0.0"
- is_greater_than_current = False
current_version = packaging_version.parse(version.__full_version_str__)
- try:
- resp = httpx.get(
- "https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest",
- headers={"Accept": "application/json"},
- )
- resp.raise_for_status()
+ remote_version = cache.get(self.cache_key)
+ if remote_version is None:
try:
+ resp = httpx.get(
+ "https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest",
+ headers={"Accept": "application/json"},
+ )
+ resp.raise_for_status()
data = resp.json()
remote_version = data["tag_name"]
# Some early tags used ngx-x.y.z
remote_version = remote_version.removeprefix("ngx-")
except ValueError as e:
logger.debug(f"An error occurred parsing remote version json: {e}")
- except httpx.HTTPError as e:
- logger.debug(f"An error occurred checking for available updates: {e}")
+ except httpx.HTTPError as e:
+ logger.debug(f"An error occurred checking for available updates: {e}")
+
+ if remote_version:
+ cache.set(self.cache_key, remote_version, 60 * 15)
+ else:
+ remote_version = "0.0.0"
is_greater_than_current = (
- packaging_version.parse(
- remote_version,
- )
- > current_version
+ packaging_version.parse(remote_version) > current_version
)
return Response(