Improve client version-related logic
This commit is contained in:
		
							parent
							
								
									6b09780eac
								
							
						
					
					
						commit
						ef140fe11d
					
				
					 4 changed files with 38 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -1,3 +1,7 @@
 | 
			
		|||
class UnknownClientVersionError(Exception):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UnknownConnectionTypeError(Exception):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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):
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue