forked from erp-dev/erp
feat: error_code + api doc + printing-job fields
This commit is contained in:
63
flower/app_version.py
Normal file
63
flower/app_version.py
Normal file
@@ -0,0 +1,63 @@
|
||||
from django.conf import settings
|
||||
from django.core.cache import cache
|
||||
from rest_framework.permissions import AllowAny
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
|
||||
|
||||
APP_VERSION_CACHE_KEY = "app_version:latest"
|
||||
|
||||
|
||||
def _coerce_version_part(value) -> int:
|
||||
return max(0, int(value or 0))
|
||||
|
||||
|
||||
def build_app_version_payload(*, major, minor, build, download_url: str) -> dict:
|
||||
return {
|
||||
"latest_version": {
|
||||
"major": _coerce_version_part(major),
|
||||
"minor": _coerce_version_part(minor),
|
||||
"build": _coerce_version_part(build),
|
||||
},
|
||||
"download_url": str(download_url or "").strip(),
|
||||
}
|
||||
|
||||
|
||||
def get_app_version_payload() -> dict:
|
||||
cached_payload = cache.get(APP_VERSION_CACHE_KEY)
|
||||
if isinstance(cached_payload, dict):
|
||||
try:
|
||||
version = cached_payload["latest_version"]
|
||||
return build_app_version_payload(
|
||||
major=version["major"],
|
||||
minor=version["minor"],
|
||||
build=version["build"],
|
||||
download_url=cached_payload.get("download_url", ""),
|
||||
)
|
||||
except (KeyError, TypeError, ValueError):
|
||||
pass
|
||||
|
||||
return build_app_version_payload(
|
||||
major=getattr(settings, "APP_LATEST_VERSION_MAJOR", 0),
|
||||
minor=getattr(settings, "APP_LATEST_VERSION_MINOR", 0),
|
||||
build=getattr(settings, "APP_LATEST_VERSION_BUILD", 0),
|
||||
download_url=getattr(settings, "APP_DOWNLOAD_URL", ""),
|
||||
)
|
||||
|
||||
|
||||
def set_cached_app_version_payload(*, major, minor, build, download_url: str) -> dict:
|
||||
payload = build_app_version_payload(
|
||||
major=major,
|
||||
minor=minor,
|
||||
build=build,
|
||||
download_url=download_url,
|
||||
)
|
||||
cache.set(APP_VERSION_CACHE_KEY, payload, timeout=None)
|
||||
return payload
|
||||
|
||||
|
||||
class AppVersionView(APIView):
|
||||
permission_classes = [AllowAny]
|
||||
|
||||
def get(self, request):
|
||||
return Response(get_app_version_payload())
|
||||
Reference in New Issue
Block a user