Improve client version-related logic

This commit is contained in:
codeking 2025-02-22 22:28:16 +01:00
parent 6b09780eac
commit ef140fe11d
4 changed files with 38 additions and 2 deletions

View file

@ -1,3 +1,7 @@
class UnknownClientVersionError(Exception):
pass
class UnknownConnectionTypeError(Exception):
pass

View file

@ -1,4 +1,4 @@
from core.Constants import Constants
from core.Errors import UnknownClientVersionError
from core.controllers.ApplicationController import ApplicationController
from core.controllers.ApplicationVersionController import ApplicationVersionController
from core.controllers.ClientVersionController import ClientVersionController
@ -8,6 +8,7 @@ from core.controllers.SubscriptionPlanController import SubscriptionPlanControll
from core.observers import ClientObserver
from core.observers.ConnectionObserver import ConnectionObserver
from typing import Optional
import os
import pathlib
@ -17,6 +18,26 @@ class ClientController:
def get_working_directory():
return str(pathlib.Path(__file__).resolve().parent.parent.parent)
@staticmethod
def get_version():
version_number = os.environ.get('HV_CLIENT_VERSION')
if version_number is None:
raise UnknownClientVersionError('The client version could not be determined.')
return ClientVersionController.get_or_new(version_number)
@staticmethod
def can_be_updated():
try:
version = ClientController.get_version()
except UnknownClientVersionError:
return False
return not ClientVersionController.is_latest(version)
@staticmethod
def sync(client_observer: ClientObserver = None, connection_observer: ConnectionObserver = None):

View file

@ -17,6 +17,16 @@ class ClientVersionController:
def get(version_number: str):
return ClientVersion.find(version_number)
@staticmethod
def get_or_new(version_number: str):
client_version = ClientVersionController.get(version_number)
if client_version is None:
return ClientVersion(version_number)
return client_version
@staticmethod
def get_all():
return ClientVersion.all()

View file

@ -20,7 +20,8 @@ _table_definition: str = """
@dataclass
class ClientVersion(Model):
version_number: str
released_at: datetime = field(
released_at: Optional[datetime] = field(
default=None,
metadata=config(
encoder=datetime.isoformat,
decoder=datetime.fromisoformat,