Fix: only cache remote version for version checking (#11320)

This commit is contained in:
shamoon 2025-11-08 16:34:46 -08:00 committed by GitHub
parent e9f846ca24
commit 44f0191bfb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

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