53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
from abc import ABC, abstractmethod
|
|
from typing import Optional
|
|
|
|
from cpl_core.configuration.configuration_abc import ConfigurationABC
|
|
from cpl_core.console.console import Console
|
|
from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC
|
|
from cpl_core.environment import ApplicationEnvironmentABC
|
|
|
|
|
|
class ApplicationABC(ABC):
|
|
r"""ABC for the Application class
|
|
|
|
Parameters
|
|
----------
|
|
config: :class:`cpl_core.configuration.configuration_abc.ConfigurationABC`
|
|
Contains object loaded from appsettings
|
|
services: :class:`cpl_core.dependency_injection.service_provider_abc.ServiceProviderABC`
|
|
Contains instances of prepared objects
|
|
"""
|
|
|
|
@abstractmethod
|
|
def __init__(self, config: ConfigurationABC, services: ServiceProviderABC):
|
|
self._configuration: Optional[ConfigurationABC] = config
|
|
self._environment: Optional[ApplicationEnvironmentABC] = self._configuration.environment
|
|
self._services: Optional[ServiceProviderABC] = services
|
|
|
|
def run(self):
|
|
r"""Entry point
|
|
|
|
Called by custom Application.main
|
|
"""
|
|
try:
|
|
self.configure()
|
|
self.main()
|
|
except KeyboardInterrupt:
|
|
Console.close()
|
|
|
|
@abstractmethod
|
|
def configure(self):
|
|
r"""Configure the application
|
|
|
|
Called by :class:`cpl_core.application.application_abc.ApplicationABC.run`
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def main(self):
|
|
r"""Custom entry point
|
|
|
|
Called by :class:`cpl_core.application.application_abc.ApplicationABC.run`
|
|
"""
|
|
pass
|