Example #1
0
    def __init__(
        self,
        root=None,
        name=None,
        destinations=None,
        tempdir=None,
        zip_path=None,
        password=None,
        exclude=None,
        encoding_translation=None,
        max_archive_size=None,
    ):  # pragma: no cover -- TODO accesses FS, needs proper mocks for FS and Path object.
        """ Creates context for backup operation.
		See main docstring for details on each parameter.
		"""
        self.root = Path(root).expanduser()
        self.name = name or self.root.name
        self.destinations = [
            Path(os.path.expandvars(location)).expanduser()
            for location in (destinations or [])
        ]
        self.tempdir = Path(tempdir or tempfile.gettempdir()).expanduser()
        self.zip_path = Path(zip_path or r"C:\Program Files\7-Zip\7z.exe")
        self.exclude = list(exclude or [])
        self.encoding_translation = list(encoding_translation or [])
        if len(self.encoding_translation) not in (2, 3):
            raise ValueError(
                'Expected 2 or 3 lines in encoding_translations, got {0} instead.'
                .format(len(self.encoding_translation)))
        self.max_archive_size = max_archive_size
        if isinstance(password, dict):
            if 'file' in password:
                try:
                    password = password['file']
                    password = Path(
                        os.path.expandvars(password)).expanduser().read_text()
                    if password.endswith('\n'):
                        password = password[:-1]
                except Exception as e:
                    raise ValueError(
                        'Failed to read password file: {0}'.format(e))
            else:
                raise ValueError(
                    'Unknown password field configuration! Supported configurations are: plain string, {.file=<...>}'
                )
        self.password = Password(password)