Source code for AutoArchive._application.archiving.actions.action_utils

# action_utils.py
#
# Project: AutoArchive
# License: GNU GPLv3
#
# Copyright (C) 2003 - 2023 Róbert Čerňanský



from AutoArchive._infrastructure.configuration import Options
from AutoArchive._infrastructure.service._service_accessor import ServiceAccessor
from AutoArchive._infrastructure.utils import Utils
from AutoArchive._services.external_command_executor import ExternalCommandExecutorServiceIdentification
from .._archiving import _Archiving
from .._command_executor import _CommandExecutor
from ..._action.action_result import ActionResult



[docs] class ActionUtils: def __init__(self, componentUi, applicationContext, serviceAccessor: ServiceAccessor): self.__componentUi = componentUi self.__configuration = applicationContext.configuration self.__commandExecutor = _CommandExecutor(self.__configuration, serviceAccessor.getOrCreateService( ExternalCommandExecutorServiceIdentification, None), self.__componentUi) self.__archiving = _Archiving(componentUi, applicationContext, serviceAccessor, self.__commandExecutor) self.__actionResult = ActionResult(self.__componentUi) @property def actionResult(self) -> ActionResult: return self.__actionResult @property def configuration(self): return self.__configuration @property def archiving(self) -> _Archiving: return self.__archiving @property def commandExecutor(self) -> _CommandExecutor: return self.__commandExecutor @property def componentUi(self): return self.__componentUi
[docs] def getArchiveSpecsForProcessing(self, selectedArchiveSpecs): @Utils.uniq def getAllUniqueArchiveSpecs(): for archiveSpecInfo in selectedArchiveSpecs: yield archiveSpecInfo empty = True for archiveSpecInfo in self.__archiving.getArchiveSpecs(): empty = False yield archiveSpecInfo if empty: self.__componentUi.showWarning("No configured archive specification files were found.") if len(selectedArchiveSpecs) == 0 or self.__configuration[Options.ALL]: try: allUniqueArchiveSpecs = tuple(getAllUniqueArchiveSpecs()) except (RuntimeError, OSError) as ex: self.__componentUi.showError(str.format( "An error occurred while obtaining the list of all archive specification files: {}", ex)) return None return allUniqueArchiveSpecs else: return selectedArchiveSpecs
[docs] def getOrphanedArchives(self, archiveSpecs): return (name for name in self.__archiving.getStoredArchiveNames() if name not in frozenset(self.getValidArchiveNames(archiveSpecs)))
[docs] @Utils.uniq def getValidArchiveNames(self, archiveSpecs): return self.__archiving.filterValidSpecFiles((archSpecInf.path for archSpecInf in archiveSpecs))