Source code for AutoArchive._application.archiving._command_executor
# _command_executor.py
#
# Project: AutoArchive
# License: GNU GPLv3
#
# Copyright (C) 2003 - 2015 Róbert Čerňanský
""":class:`_CommandExecutor` class."""
__all__ = ["_CommandExecutor"]
# {{{ INCLUDES
import shlex
from AutoArchive._infrastructure.ui import VerbosityLevels
from AutoArchive._infrastructure.configuration import Options
# }}} INCLUDES
# {{{ CLASSES
[docs]class _CommandExecutor:
def __init__(self, archiveSpec, externalCommandExecutor, componentUi):
self.__archiveSpec = archiveSpec
self.__externalCommandExecutor = externalCommandExecutor
self.__componentUi = componentUi
self.__beforeCommand = None
self.__afterCommand = None
beforeCommandString = archiveSpec[Options.COMMAND_BEFORE_BACKUP]
afterCommandString = archiveSpec[Options.COMMAND_AFTER_BACKUP]
if beforeCommandString is not None:
self.__beforeCommand = shlex.split(archiveSpec[Options.COMMAND_BEFORE_BACKUP])
if afterCommandString is not None:
self.__afterCommand = shlex.split(archiveSpec[Options.COMMAND_AFTER_BACKUP])
[docs] def executeBeforeCommand(self):
if self.__beforeCommand is not None:
self.__informVerboseUser(self.__archiveSpec[Options.COMMAND_BEFORE_BACKUP])
self.__externalCommandExecutor.commandMessage += self.__onCommandMessage
self.__externalCommandExecutor.execute(self.__beforeCommand[0],
self.__beforeCommand[1:] if len(self.__beforeCommand) > 1 else None)
self.__externalCommandExecutor.commandMessage -= self.__onCommandMessage
[docs] def executeAfterCommand(self):
if self.__afterCommand is not None:
self.__informVerboseUser(self.__archiveSpec[Options.COMMAND_AFTER_BACKUP])
self.__externalCommandExecutor.commandMessage += self.__onCommandMessage
self.__externalCommandExecutor.execute(self.__afterCommand[0],
self.__afterCommand[1:] if len(self.__afterCommand) > 1 else None)
self.__externalCommandExecutor.commandMessage -= self.__onCommandMessage
def __onCommandMessage(self, command, message, isError):
if isError:
self.__componentUi.showWarning(message)
elif self.__componentUi.verbosity != VerbosityLevels.Quiet:
self.__componentUi.presentLine(message)
def __informVerboseUser(self, commandString):
if self.__componentUi.verbosity == VerbosityLevels.Verbose:
self.__componentUi.showVerbose(str.format("Executing command '{}'", commandString))
# }}} CLASSES