[LYN-4288] Adding error page if resource mapping tool has invalid setup (#1219)

This commit is contained in:
Vincent Liu
2021-06-09 19:29:34 -07:00
committed by GitHub
parent 463e0cfff3
commit ac8ee00aff
16 changed files with 281 additions and 47 deletions
@@ -48,11 +48,15 @@ class ConfigurationManager(object):
def configuration(self, new_configuration: ConfigurationManager) -> None:
self._configuration = new_configuration
def setup(self, config_path: str) -> bool:
def setup(self, profile_name: str, config_path: str) -> bool:
result: bool = True
logger.info("Setting up default configuration ...")
logger.debug("Setting up default configuration ...")
try:
normalized_config_path: str = file_utils.normalize_file_path(config_path);
logger.debug("Setting up boto3 default session ...")
aws_utils.setup_default_session(profile_name)
logger.debug("Setting up config directory and files ...")
normalized_config_path: str = file_utils.normalize_file_path(config_path)
if normalized_config_path:
self._configuration.config_directory = normalized_config_path
else:
@@ -61,6 +65,7 @@ class ConfigurationManager(object):
file_utils.find_files_with_suffix_under_directory(self._configuration.config_directory,
constants.RESOURCE_MAPPING_CONFIG_FILE_NAME_SUFFIX)
logger.debug("Setting up aws account id and region ...")
self._configuration.account_id = aws_utils.get_default_account_id()
self._configuration.region = aws_utils.get_default_region()
except (RuntimeError, FileNotFoundError) as e:
@@ -12,6 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
from __future__ import annotations
import logging
from controller.error_controller import ErrorController
from controller.import_resources_controller import ImportResourcesController
from controller.view_edit_controller import ViewEditController
from model import error_messages
@@ -33,8 +34,9 @@ class ControllerManager(object):
def __init__(self) -> None:
if ControllerManager.__instance is None:
self._view_edit_controller: ViewEditController = ViewEditController()
self._import_resources_controller: ImportResourcesController = ImportResourcesController()
self._error_controller: ErrorController = None
self._view_edit_controller: ViewEditController = None
self._import_resources_controller: ImportResourcesController = None
ControllerManager.__instance = self
else:
raise AssertionError(error_messages.SINGLETON_OBJECT_ERROR_MESSAGE.format("ControllerManager"))
@@ -47,9 +49,17 @@ class ControllerManager(object):
def view_edit_controller(self) -> ViewEditController:
return self._view_edit_controller
def setup(self) -> None:
logger.info("Setting up ViewEdit and ImportResource controllers ...")
self._view_edit_controller.setup()
self._import_resources_controller.setup()
self._import_resources_controller.add_import_resources_sender.connect(
self._view_edit_controller.add_import_resources_receiver)
def setup(self, setup_error: bool) -> None:
if setup_error:
logger.debug("Setting up Error controllers ...")
self._error_controller = ErrorController()
self._error_controller.setup()
else:
logger.debug("Setting up ViewEdit and ImportResource controllers ...")
self._view_edit_controller = ViewEditController()
self._import_resources_controller = ImportResourcesController()
self._view_edit_controller.setup()
self._import_resources_controller.setup()
self._import_resources_controller.add_import_resources_sender.connect(
self._view_edit_controller.add_import_resources_receiver)
@@ -37,10 +37,13 @@ class ThreadManager(object):
else:
raise AssertionError(error_messages.SINGLETON_OBJECT_ERROR_MESSAGE.format("ThreadManager"))
def setup(self, thread_count: int = 1) -> None:
# Based on prototype use case, we just need 1 thread
logger.info(f"Setting up thread pool with MaxThreadCount={thread_count} ...")
self._thread_pool.setMaxThreadCount(thread_count)
def setup(self, setup_error: bool, thread_count: int = 1) -> None:
if setup_error:
logger.debug("Skip thread pool creation, as there is major setup error.")
else:
# Based on prototype use case, we just need 1 thread
logger.debug(f"Setting up thread pool with MaxThreadCount={thread_count} ...")
self._thread_pool.setMaxThreadCount(thread_count)
"""Reserves a thread and uses it to run runnable worker, unless this thread will make
the current thread count exceed max thread count. In that case, runnable is added to a run queue instead."""
@@ -16,6 +16,7 @@ from PySide2.QtGui import QIcon
from PySide2.QtWidgets import (QMainWindow, QStackedWidget, QWidget)
from model import (error_messages, view_size_constants)
from view.error_page import ErrorPage
from view.import_resources_page import ImportResourcesPage
from view.view_edit_page import ViewEditPage
@@ -27,6 +28,10 @@ class ViewManagerConstants(object):
IMPORT_RESOURCES_PAGE_INDEX: int = 1
# Error page will be a single page
ERROR_PAGE_INDEX: int = 0
class ViewManager(object):
"""
View manager maintains the main stacked pages for this tool, which
@@ -58,21 +63,32 @@ class ViewManager(object):
ViewManager.__instance = self
else:
raise AssertionError(error_messages.SINGLETON_OBJECT_ERROR_MESSAGE.format("ViewManager"))
def get_error_page(self) -> QWidget:
return self._resource_mapping_stacked_pages.widget(ERROR_PAGE_INDEX)
def get_view_edit_page(self) -> QWidget:
return self._resource_mapping_stacked_pages.widget(ViewManagerConstants.VIEW_AND_EDIT_PAGE_INDEX)
def get_import_resources_page(self) -> QWidget:
return self._resource_mapping_stacked_pages.widget(ViewManagerConstants.IMPORT_RESOURCES_PAGE_INDEX)
def setup(self) -> None:
logger.debug("Setting up ViewEdit and ImportResources view pages ...")
self._resource_mapping_stacked_pages.addWidget(ViewEditPage())
self._resource_mapping_stacked_pages.addWidget(ImportResourcesPage())
def setup(self, setup_error: bool) -> None:
if setup_error:
logger.debug("Setting up Error view pages ...")
self._resource_mapping_stacked_pages.addWidget(ErrorPage())
self._main_window.adjustSize() # fit error page size
else:
logger.debug("Setting up ViewEdit and ImportResources view pages ...")
self._resource_mapping_stacked_pages.addWidget(ViewEditPage())
self._resource_mapping_stacked_pages.addWidget(ImportResourcesPage())
def show(self) -> None:
def show(self, setup_error: bool) -> None:
"""Show up the tool view by setting default page index and showing main widget"""
self._resource_mapping_stacked_pages.setCurrentIndex(ViewManagerConstants.VIEW_AND_EDIT_PAGE_INDEX)
if setup_error:
self._resource_mapping_stacked_pages.setCurrentIndex(ERROR_PAGE_INDEX)
else:
self._resource_mapping_stacked_pages.setCurrentIndex(ViewManagerConstants.VIEW_AND_EDIT_PAGE_INDEX)
self._main_window.show()
def switch_to_view_edit_page(self) -> None: