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