Пример #1
0
 def create(self, path, mails, compression='xz', server=None):
     path = Path.cwd() / path
     with TemporaryDirectory(prefix="mailarchive-") as tmpdir:
         with tmp_chdir(tmpdir), tmp_umask(0o077):
             basedir = Path(path.name.split('.')[0])
             maildir = Maildir(basedir, create=True)
             self.mailindex = MailIndex(server=server)
             last_folder = None
             for folder, msgbytes in mails:
                 if folder != last_folder:
                     mailfolder = maildir.add_folder(folder)
                     last_folder = folder
                 sha256 = hashlib.sha256(msgbytes).hexdigest()
                 key = mailfolder.add(msgbytes)
                 msg = mailfolder.get_message(key)
                 idx_item = {
                     "Date": msg.get("Date"),
                     "From": msg.get("From"),
                     "MessageId": msg.get("Message-Id"),
                     "Subject": msg.get("Subject"),
                     "To": msg.get("To"),
                     "checksum": {
                         "sha256": sha256
                     },
                     "folder": folder,
                     "key": key,
                 }
                 self.mailindex.append(idx_item)
             with TemporaryFile(dir=tmpdir) as tmpf:
                 self.mailindex.write(tmpf)
                 tmpf.seek(0)
                 self.add_metadata(".mailindex.yaml", tmpf)
                 super().create(path, compression, [basedir])
     return self
Пример #2
0
def test_dir(tmpdir):
    with tmp_chdir(tmpdir):
        rel_paths = archive_paths(Path(""), False)
        abs_paths = archive_paths(Path(""), True)
        for i, data in enumerate(testdata):
            base = next(filter(lambda e: e.type == 'd', data)).path
            setup_testdata(tmpdir, data)
            Archive().create(rel_paths[i], "bz2", [base])
            Archive().create(abs_paths[i], "bz2", [tmpdir / base])
            shutil.rmtree(base)
    return tmpdir
Пример #3
0
 def create(self,
            path,
            compression,
            paths,
            basedir=None,
            workdir=None,
            excludes=None,
            dedup=DedupMode.LINK,
            tags=None):
     if sys.version_info < (3, 5):
         # The 'x' (exclusive creation) mode was added to tarfile
         # in Python 3.5.
         mode = 'w:' + compression
     else:
         mode = 'x:' + compression
     if workdir:
         with tmp_chdir(workdir):
             self._create(workdir / path, mode, paths, basedir, excludes,
                          dedup, tags)
     else:
         self._create(path, mode, paths, basedir, excludes, dedup, tags)
     return self
Пример #4
0
def test_dir(tmpdir):
    setup_testdata(tmpdir, testdata)
    with tmp_chdir(tmpdir):
        Archive().create(Path("archive-rel.tar"), "", [Path("base")])
        Archive().create(Path("archive-abs.tar"), "", [tmpdir / "base"])
    return tmpdir