Improve application management-related logic
This commit is contained in:
		
							parent
							
								
									7235438a4a
								
							
						
					
					
						commit
						5ab9ba8c21
					
				
					 4 changed files with 34 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -22,6 +22,10 @@ class UnsupportedApplicationVersionError(Exception):
 | 
			
		|||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ApplicationAlreadyInstalledError(Exception):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MissingSubscriptionError(Exception):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
from core.Errors import FileIntegrityError, UnsupportedApplicationVersionError
 | 
			
		||||
from core.Errors import FileIntegrityError, UnsupportedApplicationVersionError, ApplicationAlreadyInstalledError
 | 
			
		||||
from core.controllers.ApplicationController import ApplicationController
 | 
			
		||||
from core.models.session.Application import Application
 | 
			
		||||
from core.models.session.ApplicationVersion import ApplicationVersion
 | 
			
		||||
from core.observers.ApplicationVersionObserver import ApplicationVersionObserver
 | 
			
		||||
from core.observers.ConnectionObserver import ConnectionObserver
 | 
			
		||||
| 
						 | 
				
			
			@ -19,11 +20,21 @@ class ApplicationVersionController:
 | 
			
		|||
        return ApplicationVersion.find(application_code, version_number)
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def install(application_version: ApplicationVersion, application_version_observer: Optional[ApplicationVersionObserver] = None, connection_observer: Optional[ConnectionObserver] = None):
 | 
			
		||||
    def get_all(application: Optional[Application] = None):
 | 
			
		||||
        return ApplicationVersion.all(application)
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def install(application_version: ApplicationVersion, reinstall: bool = False, application_version_observer: Optional[ApplicationVersionObserver] = None, connection_observer: Optional[ConnectionObserver] = None):
 | 
			
		||||
 | 
			
		||||
        if not application_version.is_supported():
 | 
			
		||||
            raise UnsupportedApplicationVersionError('The application version in question is not supported.')
 | 
			
		||||
 | 
			
		||||
        if reinstall is True:
 | 
			
		||||
            ApplicationVersionController.uninstall(application_version)
 | 
			
		||||
 | 
			
		||||
        if application_version.is_installed():
 | 
			
		||||
            raise ApplicationAlreadyInstalledError('The application in question is already installed.')
 | 
			
		||||
 | 
			
		||||
        from core.controllers.ConnectionController import ConnectionController
 | 
			
		||||
        ConnectionController.with_preferred_connection(application_version, task=ApplicationVersionController.__install, application_version_observer=application_version_observer, connection_observer=connection_observer)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,6 +39,11 @@ class Application(Model):
 | 
			
		|||
        Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition)
 | 
			
		||||
        return Model._query_all('SELECT * FROM applications', Application.factory)
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def exists(code: str):
 | 
			
		||||
        Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition)
 | 
			
		||||
        return Model._query_exists('SELECT * FROM applications WHERE code = ?', [code])
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def truncate():
 | 
			
		||||
        Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition, drop_existing=True)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
from core.Constants import Constants
 | 
			
		||||
from core.models.Model import Model
 | 
			
		||||
from core.models.session.Application import Application
 | 
			
		||||
from dataclasses import dataclass, field
 | 
			
		||||
from dataclasses_json import config, Exclude
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +82,17 @@ class ApplicationVersion(Model):
 | 
			
		|||
        Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition)
 | 
			
		||||
        return Model._query_one('SELECT * FROM application_versions WHERE application_code = ? AND version_number = ? LIMIT 1', ApplicationVersion.factory, [application_code, version_number])
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def all(application: Optional[Application] = None):
 | 
			
		||||
 | 
			
		||||
        Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition)
 | 
			
		||||
 | 
			
		||||
        if application is None:
 | 
			
		||||
            return Model._query_all('SELECT * FROM application_versions', ApplicationVersion.factory)
 | 
			
		||||
 | 
			
		||||
        else:
 | 
			
		||||
            return Model._query_all('SELECT * FROM application_versions WHERE application_code = ?', ApplicationVersion.factory, [application.code])
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def exists(application_code: str, version_number: str):
 | 
			
		||||
        Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue