diff --git a/src/documents/views.py b/src/documents/views.py index c007a4cee..822647fdb 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -23,6 +23,7 @@ from django.conf import settings 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 @@ -51,7 +52,6 @@ from django.utils.timezone import make_aware 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 @@ -2426,7 +2426,6 @@ class UiSettingsView(GenericAPIView): ) -@method_decorator(cache_page(60 * 15), name="dispatch") @extend_schema_view( get=extend_schema( description="Get the current version of the Paperless-NGX server", @@ -2436,31 +2435,34 @@ class UiSettingsView(GenericAPIView): ), ) 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(