#!/usr/bin/env python
# -*- coding: utf-8 -*-
class ArchiveError(Exception):
pass
class CRCError(Exception):
pass
class WrongPassword(Exception):
pass
class AbtractExtractor:
__version__ = "0.1"
@staticmethod
def checkDeps():
""" Check if system statisfy dependencies
:return: boolean
"""
return True
@staticmethod
def getTargets(files_ids):
""" Filter suited targets from list of filename id tuple list
:param files_ids: List of filepathes
:return: List of targets, id tuple list
"""
raise NotImplementedError
def __init__(self, m, file, out, fullpath, overwrite, excludefiles, renice):
"""Initialize extractor for specific file
:param m: ExtractArchive Hook plugin
:param file: Absolute filepath
:param out: Absolute path to destination directory
:param fullpath: extract to fullpath
:param overwrite: Overwrite existing archives
:param renice: Renice value
"""
self.m = m
self.file = file
self.out = out
self.fullpath = fullpath
self.overwrite = overwrite
self.excludefiles = excludefiles
self.renice = renice
self.files = [] #: Store extracted files here
def init(self):
""" Initialize additional data structures """
pass
def checkArchive(self):
"""Check if password if needed. Raise ArchiveError if integrity is
questionable.
:return: boolean
:raises ArchiveError
"""
return False
def checkPassword(self, password):
""" Check if the given password is/might be correct.
If it can not be decided at this point return true.
:param password:
:return: boolean
"""
return True
def extract(self, progress, password=None):
"""Extract the archive. Raise specific errors in case of failure.
:param progress: Progress function, call this to update status
:param password password to use
:raises WrongPassword
:raises CRCError
:raises ArchiveError
:return:
"""
raise NotImplementedError
def getDeleteFiles(self):
"""Return list of files to delete, do *not* delete them here.
:return: List with paths of files to delete
"""
raise NotImplementedError
def getExtractedFiles(self):
"""Populate self.files at some point while extracting"""
return self.files