chore: управление открываемыми файлами вынесено в отдельный класс
This commit is contained in:
parent
6999f12354
commit
16910133ac
@ -19,14 +19,12 @@ from utils.qt_settings import dark_style
|
|||||||
|
|
||||||
class BaseMediator:
|
class BaseMediator:
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
monitor: BaseDirectoryMonitor,
|
|
||||||
converter: BaseDataConverter,
|
converter: BaseDataConverter,
|
||||||
# TODO: passport_former
|
# TODO: passport_former
|
||||||
passportFormer: BasePointPassportFormer,
|
passportFormer: BasePointPassportFormer,
|
||||||
plot: BasePlotWidget,
|
plot: BasePlotWidget,
|
||||||
controller: BaseController):
|
controller: BaseController,
|
||||||
self._monitor = monitor
|
file_manager: BaseFileManager):
|
||||||
self._monitor.mediator = self
|
|
||||||
self._converter = converter
|
self._converter = converter
|
||||||
self._converter.mediator = self
|
self._converter.mediator = self
|
||||||
self._passportFormer = passportFormer
|
self._passportFormer = passportFormer
|
||||||
@ -35,6 +33,8 @@ class BaseMediator:
|
|||||||
self._plot.mediator = self
|
self._plot.mediator = self
|
||||||
self._controller = controller
|
self._controller = controller
|
||||||
self._controller.mediator = self
|
self._controller.mediator = self
|
||||||
|
self._file_manager = file_manager
|
||||||
|
self._file_manager.mediator = self
|
||||||
|
|
||||||
def notify(self,
|
def notify(self,
|
||||||
source: Union[BaseDirectoryMonitor, BaseDataConverter, BasePointPassportFormer, BasePlotWidget],
|
source: Union[BaseDirectoryMonitor, BaseDataConverter, BasePointPassportFormer, BasePlotWidget],
|
||||||
@ -52,14 +52,13 @@ class BaseDirectoryMonitor:
|
|||||||
update_timer = QTimer()
|
update_timer = QTimer()
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
mediator: Optional[BaseMediator] = None):
|
file_manager: Optional[BaseFileManager] = None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._directory_path = None
|
self._directory_path = None
|
||||||
self._update_time = None
|
self._update_time = None
|
||||||
self.isActive = False
|
self.isActive = False
|
||||||
self._files = []
|
self._files = []
|
||||||
self._mediator = mediator
|
self._file_manager = file_manager
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def directory_path(self) -> str:
|
def directory_path(self) -> str:
|
||||||
@ -74,14 +73,14 @@ class BaseDirectoryMonitor:
|
|||||||
return self._files
|
return self._files
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def mediator(self) -> BaseMediator:
|
def file_manager(self) -> BaseFileManager:
|
||||||
return self._mediator
|
return self._file_manager
|
||||||
|
|
||||||
@mediator.setter
|
@file_manager.setter
|
||||||
def mediator(self, mediator: BaseMediator) -> None:
|
def file_manager(self, file_manager: BaseFileManager) -> None:
|
||||||
self._mediator = mediator
|
self._file_manager = file_manager
|
||||||
|
|
||||||
def _init_state(self):
|
def init_state(self):
|
||||||
files = os.listdir(self._directory_path)
|
files = os.listdir(self._directory_path)
|
||||||
self._files = files
|
self._files = files
|
||||||
|
|
||||||
@ -92,6 +91,10 @@ class BaseDirectoryMonitor:
|
|||||||
def stop(self):
|
def stop(self):
|
||||||
self.isActive = False
|
self.isActive = False
|
||||||
self.update_timer.stop()
|
self.update_timer.stop()
|
||||||
|
|
||||||
|
def pause(self):
|
||||||
|
self.update_timer.stop()
|
||||||
|
|
||||||
# TODO: Почему монитор директорий обновляет какие-то настройки, графики и т.д.? Помним про
|
# TODO: Почему монитор директорий обновляет какие-то настройки, графики и т.д.? Помним про
|
||||||
# принцип единичной ответственности.
|
# принцип единичной ответственности.
|
||||||
def update_settings(self, data: list[dict]) -> None:
|
def update_settings(self, data: list[dict]) -> None:
|
||||||
@ -361,6 +364,10 @@ class BasePlotWidget:
|
|||||||
|
|
||||||
class BaseController(QObject):
|
class BaseController(QObject):
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
mediator: Optional[BaseMediator] = None):
|
||||||
|
self._mediator = mediator
|
||||||
|
|
||||||
def send_widgets(self, widgets: list[QWidget]) -> None:
|
def send_widgets(self, widgets: list[QWidget]) -> None:
|
||||||
...
|
...
|
||||||
|
|
||||||
@ -384,6 +391,49 @@ class BaseController(QObject):
|
|||||||
def update_status(self, msg: Union[str, float]) -> None:
|
def update_status(self, msg: Union[str, float]) -> None:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mediator(self) -> BaseMediator:
|
||||||
|
return self._mediator
|
||||||
|
|
||||||
|
@mediator.setter
|
||||||
|
def mediator(self, mediator: BaseMediator) -> None:
|
||||||
|
self._mediator = mediator
|
||||||
|
|
||||||
|
|
||||||
|
class BaseFileManager:
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
mediator: Optional[BaseMediator] = None,
|
||||||
|
monitor: Optional[BaseDirectoryMonitor] = None):
|
||||||
|
self._mediator = mediator
|
||||||
|
self._monitor = monitor
|
||||||
|
self._paths_library = set()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def paths_library(self) -> set:
|
||||||
|
return self._paths_library
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mediator(self) -> BaseMediator:
|
||||||
|
return self._mediator
|
||||||
|
|
||||||
|
@mediator.setter
|
||||||
|
def mediator(self, mediator: BaseMediator) -> None:
|
||||||
|
self._mediator = mediator
|
||||||
|
|
||||||
|
@property
|
||||||
|
def monitor(self) -> BaseDirectoryMonitor:
|
||||||
|
return self._monitor
|
||||||
|
|
||||||
|
@monitor.setter
|
||||||
|
def monitor(self, monitor: BaseDirectoryMonitor) -> None:
|
||||||
|
self._monitor = monitor
|
||||||
|
|
||||||
|
def add_new_paths(self, paths:list[str]):
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class BaseIdealDataBuilder(OptAlgorithm):
|
class BaseIdealDataBuilder(OptAlgorithm):
|
||||||
|
|
||||||
def __init__(self, params: list[dict]):
|
def __init__(self, params: list[dict]):
|
||||||
|
|||||||
@ -2,17 +2,19 @@ import os
|
|||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from base.base import BaseDirectoryMonitor
|
from base.base import BaseDirectoryMonitor, BaseFileManager
|
||||||
|
|
||||||
|
|
||||||
class DirectoryMonitor(BaseDirectoryMonitor):
|
class DirectoryMonitor(BaseDirectoryMonitor):
|
||||||
|
|
||||||
def _init_state(self):
|
def init_state(self):
|
||||||
|
if not os.path.exists(self._directory_path):
|
||||||
|
logger.error(f"Путь {self._directory_path} не существует.")
|
||||||
|
raise FileNotFoundError(f"Путь {self._directory_path} не существует.")
|
||||||
|
|
||||||
self._files = [
|
self._files = [
|
||||||
os.path.join(self._directory_path, file)
|
os.path.join(self._directory_path, file)
|
||||||
for file in os.listdir(self._directory_path)
|
for file in os.listdir(self._directory_path)
|
||||||
# TODO: FileNotFoundError: [Errno 2] No such file or directory: 'D:/downloads/a22'
|
|
||||||
# при выборе real time mode.
|
|
||||||
if file.lower().endswith('.csv')
|
if file.lower().endswith('.csv')
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -28,50 +30,53 @@ class DirectoryMonitor(BaseDirectoryMonitor):
|
|||||||
new_files = sorted(list(filter(lambda x: x not in self._files, current_files)))
|
new_files = sorted(list(filter(lambda x: x not in self._files, current_files)))
|
||||||
if new_files:
|
if new_files:
|
||||||
logger.info(f"New files detected: {new_files}")
|
logger.info(f"New files detected: {new_files}")
|
||||||
self._mediator.notify(self, new_files)
|
self._file_manager.add_new_paths(new_files)
|
||||||
self._files = current_files
|
self._files = current_files
|
||||||
if not current_files:
|
if not current_files:
|
||||||
self._files = []
|
self._files = []
|
||||||
|
|
||||||
# TODO: Почему монитор директории обновляет какие-то настройки, графики, стартует что-то?
|
|
||||||
# Это не должно быть в его зоне ответственности.
|
|
||||||
# TODO: Может стоит сделать какой-то класс, который будет заниматься обновлениями?
|
|
||||||
def update_settings(self, data: list[dict]) -> None:
|
|
||||||
if self.isActive:
|
|
||||||
self.stop()
|
|
||||||
_, system_params = data
|
|
||||||
self._directory_path = system_params['trace_storage_path'][0]
|
|
||||||
self._update_time = system_params['monitor_update_period'][0]
|
|
||||||
|
|
||||||
if not os.path.exists(self._directory_path):
|
class FileManager(BaseFileManager):
|
||||||
logger.error(f"Путь {self._directory_path} не существует.")
|
|
||||||
raise FileNotFoundError(f"Путь {self._directory_path} не существует.")
|
|
||||||
else:
|
|
||||||
self._init_state()
|
|
||||||
self.start()
|
|
||||||
else:
|
|
||||||
_, system_params = data
|
|
||||||
self._directory_path = system_params['trace_storage_path'][0]
|
|
||||||
self._update_time = system_params['monitor_update_period'][0]
|
|
||||||
|
|
||||||
def update_plots(self):
|
def update_plots(self):
|
||||||
if self._files is not None:
|
if self._paths_library is not None:
|
||||||
self._mediator.notify(self, self._files)
|
self._mediator.notify(self, list(self._paths_library))
|
||||||
|
|
||||||
def custom_csv_extract_only(self, path: str):
|
def open_custom_file(self, path:str):
|
||||||
self._files.append(path)
|
self._paths_library.add(path)
|
||||||
if path is not None:
|
self._mediator.notify(self, [path if path else ''])
|
||||||
self._mediator.notify(self, [path])
|
|
||||||
else:
|
|
||||||
self._mediator.notify(self, [''])
|
|
||||||
|
|
||||||
def start_raport(self) -> None:
|
def start_raport_mode(self) -> None:
|
||||||
self.stop()
|
self._monitor.stop()
|
||||||
self._files = ['']
|
self._paths_library.clear()
|
||||||
self._mediator.notify(self, [''])
|
self._paths_library.add('')
|
||||||
|
self._mediator.notify(self, list(self._paths_library))
|
||||||
|
|
||||||
|
def start_seeking_mode(self) -> None:
|
||||||
|
self._monitor.init_state()
|
||||||
|
self._monitor.start()
|
||||||
|
|
||||||
|
def update_monitor_settings(self, settings:list[dict]) -> None:
|
||||||
|
_, system_params = settings
|
||||||
|
directory_path = system_params['trace_storage_path'][0]
|
||||||
|
update_time = system_params['monitor_update_period'][0]
|
||||||
|
|
||||||
|
if not os.path.exists(directory_path):
|
||||||
|
logger.error(f"Путь {directory_path} не существует.")
|
||||||
|
raise FileNotFoundError(f"Путь {directory_path} не существует.")
|
||||||
|
|
||||||
|
if update_time <= 0.01:
|
||||||
|
logger.error(f"Путь {directory_path} не существует.")
|
||||||
|
|
||||||
|
if self._monitor.isActive: self._monitor.pause()
|
||||||
|
self._monitor.directory_path = directory_path
|
||||||
|
self._monitor.update_time = update_time
|
||||||
|
if self._monitor.isActive: self._monitor.start()
|
||||||
|
|
||||||
|
def add_new_paths(self, paths):
|
||||||
|
paths_set = set(paths)
|
||||||
|
new = self._paths_library.difference(paths_set)
|
||||||
|
self._paths_library.update(new)
|
||||||
|
self._mediator.notify(list(new))
|
||||||
|
|
||||||
|
|
||||||
def start_seeking(self) -> None:
|
|
||||||
self._init_state()
|
|
||||||
self.start()
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user