Source code for AutoArchive._application.archiving.actions.purge_action
# _purge_action.py
#
# Project: AutoArchive
# License: GNU GPLv3
#
# Copyright (C) 2003 - 2023 Róbert Čerňanský
from AutoArchive._infrastructure.configuration import Options
from AutoArchive._infrastructure.ui import VerbosityLevels
from .action_utils import ActionUtils
from ..._action.action import Action
[docs]
class PurgeAction(Action):
def __init__(self, actionUtils: ActionUtils, selectedArchiveSpecs):
super().__init__(actionUtils.actionResult)
self.__actionUtils = actionUtils
self.__selectedArchiveSpecs = selectedArchiveSpecs
self.__archiving = actionUtils.archiving
self.__componentUi = actionUtils.componentUi
[docs]
def executeAction_(self) -> bool:
result = True
archiveSpecsForProcessing = self.__actionUtils.getArchiveSpecsForProcessing(self.__selectedArchiveSpecs)
if archiveSpecsForProcessing is None:
return False
orphanedArchives = frozenset(self.__actionUtils.getOrphanedArchives(archiveSpecsForProcessing))
knownValidArchiveNames = frozenset(self.__actionUtils.getValidArchiveNames(archiveSpecsForProcessing))
try:
# names of archive specs which were selected by a name, not by path to .aa file
archiveSpecNamesSelectedByName = [asi.name for asi in self.__selectedArchiveSpecs if asi.name is not None]
for archiveSpecName in archiveSpecNamesSelectedByName:
self.__componentUi.setProcessingArchSpec(archiveSpecName)
if archiveSpecName in orphanedArchives:
self.__reportPurgedArchive(archiveSpecName)
self.__archiving.purgeStoredArchiveData(archiveSpecName)
elif archiveSpecName in knownValidArchiveNames:
self.__componentUi.showWarning("Archive is not orphaned. Not purging.")
result = False
else:
self.__componentUi.showInfo("Nothing to purge.")
self.__componentUi.setProcessingArchSpec(None)
if self.__actionUtils.configuration[Options.ALL]:
for orphanedArchive in orphanedArchives:
self.__componentUi.setProcessingArchSpec(orphanedArchive)
# archives specified via name arguments were purged in the loop above so exclude them here
if orphanedArchive not in archiveSpecNamesSelectedByName:
self.__reportPurgedArchive(orphanedArchive)
self.__archiving.purgeStoredArchiveData(orphanedArchive)
self.__componentUi.setProcessingArchSpec(None)
except OSError as ex:
self.__componentUi.showError(str.format("Purge failed: {}", ex.strerror))
result = False
return result
def __reportPurgedArchive(self, processingArchSpec):
if self.__componentUi.verbosity == VerbosityLevels.Verbose:
self.__componentUi.showVerbose(str.format("Purging {}.", processingArchSpec))