diff --git a/core/Errors.py b/core/Errors.py index 2d46fab..d9ea9e7 100644 --- a/core/Errors.py +++ b/core/Errors.py @@ -1,3 +1,7 @@ +class UnknownClientVersionError(Exception): + pass + + class UnknownConnectionTypeError(Exception): pass diff --git a/core/controllers/ClientController.py b/core/controllers/ClientController.py index 91d2b9c..917e499 100644 --- a/core/controllers/ClientController.py +++ b/core/controllers/ClientController.py @@ -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): diff --git a/core/controllers/ClientVersionController.py b/core/controllers/ClientVersionController.py index 2b84cb4..12dc266 100644 --- a/core/controllers/ClientVersionController.py +++ b/core/controllers/ClientVersionController.py @@ -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() diff --git a/core/models/ClientVersion.py b/core/models/ClientVersion.py index 652a11b..45a206a 100644 --- a/core/models/ClientVersion.py +++ b/core/models/ClientVersion.py @@ -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,