Added menus
This commit is contained in:
		
							
								
								
									
										5
									
								
								src/multi_install.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								src/multi_install.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | export PYTHONPATH=./:$PYTHONPATH | ||||||
|  |  | ||||||
|  | python3.9 multi_install_cli/main.py | ||||||
| @@ -1 +1 @@ | |||||||
| # imports:  | # imports | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								src/multi_install/abc/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/multi_install/abc/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | # imports | ||||||
							
								
								
									
										19
									
								
								src/multi_install/abc/menu_service_abc.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/multi_install/abc/menu_service_abc.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | from abc import ABC, abstractmethod | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class MenuServiceABC(ABC): | ||||||
|  |  | ||||||
|  |     @abstractmethod | ||||||
|  |     def __init__(self): pass | ||||||
|  |  | ||||||
|  |     @abstractmethod | ||||||
|  |     def run(self): pass | ||||||
|  |      | ||||||
|  |     @abstractmethod | ||||||
|  |     def select_os(self) -> str: pass | ||||||
|  |      | ||||||
|  |     @abstractmethod | ||||||
|  |     def main_menu(self) -> str: pass | ||||||
|  |      | ||||||
|  |     @abstractmethod | ||||||
|  |     def select_collection(self) -> str: pass | ||||||
							
								
								
									
										1
									
								
								src/multi_install/config/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/multi_install/config/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | # imports | ||||||
							
								
								
									
										24
									
								
								src/multi_install/config/os_settings.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/multi_install/config/os_settings.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | import traceback | ||||||
|  |  | ||||||
|  | from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC | ||||||
|  | from cpl_core.console import Console | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class OSSettings(ConfigurationModelABC): | ||||||
|  |  | ||||||
|  |     def __init__(self): | ||||||
|  |         ConfigurationModelABC.__init__(self) | ||||||
|  |  | ||||||
|  |         self._operating_systems = [] | ||||||
|  |  | ||||||
|  |     @property | ||||||
|  |     def operating_systems(self) -> list[str]: | ||||||
|  |         return self._operating_systems | ||||||
|  |  | ||||||
|  |     def from_dict(self, settings: dict): | ||||||
|  |         try: | ||||||
|  |             for os in settings['OperatingSystems']: | ||||||
|  |                 self._operating_systems.append(os) | ||||||
|  |         except Exception as e: | ||||||
|  |             Console.error(f'[ ERROR ] [ {__name__} ]: Reading error in {self.__name__} settings') | ||||||
|  |             Console.error(f'[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}') | ||||||
							
								
								
									
										1
									
								
								src/multi_install/service/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/multi_install/service/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | # imports | ||||||
							
								
								
									
										47
									
								
								src/multi_install/service/menu_service.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								src/multi_install/service/menu_service.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | from cpl_core.console import Console | ||||||
|  | from multi_install.abc.menu_service_abc import MenuServiceABC | ||||||
|  | from multi_install.config.os_settings import OSSettings | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class MenuService(MenuServiceABC): | ||||||
|  |  | ||||||
|  |     def __init__(self, os_settings: OSSettings): | ||||||
|  |         self._os_settings = os_settings | ||||||
|  |          | ||||||
|  |         self._is_running = True | ||||||
|  |      | ||||||
|  |     def run(self): | ||||||
|  |         while self._is_running: | ||||||
|  |             os = self.select_os() | ||||||
|  |             if os == 'Exit': | ||||||
|  |                 self._is_running = False | ||||||
|  |                 break | ||||||
|  |              | ||||||
|  |             main_menu = self.main_menu() | ||||||
|  |             if main_menu == 'Exit': | ||||||
|  |                 self._is_running = False | ||||||
|  |                 break | ||||||
|  |      | ||||||
|  |     def select_os(self) -> str: | ||||||
|  |         options = self._os_settings.operating_systems | ||||||
|  |         options.append('Exit') | ||||||
|  |         return Console.select('>', 'Select OS:', options) | ||||||
|  |      | ||||||
|  |     def main_menu(self) -> str: | ||||||
|  |         options = [ | ||||||
|  |             'Install collection', | ||||||
|  |             'Add collection', | ||||||
|  |             'Remove collection', | ||||||
|  |              | ||||||
|  |             'Install application', | ||||||
|  |             'Add application', | ||||||
|  |             'Remove application', | ||||||
|  |             'Add application' | ||||||
|  |         ] | ||||||
|  |         options.append('Exit') | ||||||
|  |         return Console.select('>', 'Select option:', options) | ||||||
|  |      | ||||||
|  |     def select_collection(self) -> str:  | ||||||
|  |         options = [] | ||||||
|  |         options.append('Exit') | ||||||
|  |         return Console.select('>', 'Select collection:', options) | ||||||
| @@ -3,14 +3,18 @@ from cpl_core.configuration import ConfigurationABC | |||||||
| from cpl_core.console import Console | from cpl_core.console import Console | ||||||
| from cpl_core.dependency_injection import ServiceProviderABC | from cpl_core.dependency_injection import ServiceProviderABC | ||||||
|  |  | ||||||
|  | from multi_install.abc.menu_service_abc import MenuServiceABC | ||||||
|  |  | ||||||
|  |  | ||||||
| class Application(ApplicationABC): | class Application(ApplicationABC): | ||||||
|  |  | ||||||
|     def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): |     def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): | ||||||
|         ApplicationABC.__init__(self, config, services) |         ApplicationABC.__init__(self, config, services) | ||||||
|  |          | ||||||
|  |         self._menu_service: MenuServiceABC = services.get_service(MenuServiceABC) | ||||||
|  |  | ||||||
|     def configure(self): |     def configure(self): | ||||||
|         pass |         pass | ||||||
|  |      | ||||||
|     def main(self): |     def main(self): | ||||||
|         Console.write_line('Hello World') |         self._menu_service.run() | ||||||
| @@ -11,5 +11,12 @@ | |||||||
|     "Filename": "log_$start_time.log", |     "Filename": "log_$start_time.log", | ||||||
|     "ConsoleLogLevel": "ERROR", |     "ConsoleLogLevel": "ERROR", | ||||||
|     "FileLogLevel": "WARN" |     "FileLogLevel": "WARN" | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   "OS": { | ||||||
|  |     "OperatingSystems": [ | ||||||
|  |       "Fedora", | ||||||
|  |       "Ubuntu" | ||||||
|  |     ] | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,7 +1,11 @@ | |||||||
|  | import os | ||||||
| from cpl_core.application import StartupABC | from cpl_core.application import StartupABC | ||||||
| from cpl_core.configuration import ConfigurationABC | from cpl_core.configuration import ConfigurationABC | ||||||
| from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC | from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC | ||||||
| from cpl_core.environment import ApplicationEnvironment | from cpl_core.environment import ApplicationEnvironment | ||||||
|  | from multi_install.abc.menu_service_abc import MenuServiceABC | ||||||
|  |  | ||||||
|  | from multi_install.service.menu_service import MenuService | ||||||
|  |  | ||||||
|  |  | ||||||
| class Startup(StartupABC): | class Startup(StartupABC): | ||||||
| @@ -10,7 +14,13 @@ class Startup(StartupABC): | |||||||
|         StartupABC.__init__(self) |         StartupABC.__init__(self) | ||||||
|  |  | ||||||
|     def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC: |     def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC: | ||||||
|  |         environment.set_working_directory(os.path.dirname(__file__)) | ||||||
|  |          | ||||||
|  |         configuration.add_json_file('appsettings.json') | ||||||
|  |          | ||||||
|         return configuration |         return configuration | ||||||
|  |  | ||||||
|     def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC: |     def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC: | ||||||
|  |         services.add_singleton(MenuServiceABC, MenuService) | ||||||
|  |          | ||||||
|         return services.build_service_provider() |         return services.build_service_provider() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user