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): class UnknownConnectionTypeError(Exception):
pass 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.ApplicationController import ApplicationController
from core.controllers.ApplicationVersionController import ApplicationVersionController from core.controllers.ApplicationVersionController import ApplicationVersionController
from core.controllers.ClientVersionController import ClientVersionController from core.controllers.ClientVersionController import ClientVersionController
@ -8,6 +8,7 @@ from core.controllers.SubscriptionPlanController import SubscriptionPlanControll
from core.observers import ClientObserver from core.observers import ClientObserver
from core.observers.ConnectionObserver import ConnectionObserver from core.observers.ConnectionObserver import ConnectionObserver
from typing import Optional from typing import Optional
import os
import pathlib import pathlib
@ -17,6 +18,26 @@ class ClientController:
def get_working_directory(): def get_working_directory():
return str(pathlib.Path(__file__).resolve().parent.parent.parent) 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 @staticmethod
def sync(client_observer: ClientObserver = None, connection_observer: ConnectionObserver = None): def sync(client_observer: ClientObserver = None, connection_observer: ConnectionObserver = None):

View file

@ -17,6 +17,16 @@ class ClientVersionController:
def get(version_number: str): def get(version_number: str):
return ClientVersion.find(version_number) 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 @staticmethod
def get_all(): def get_all():
return ClientVersion.all() return ClientVersion.all()

View file

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