Metadata-Version: 2.4
Name: securetar
Version: 2026.2.0
Summary: Python module to handle tarfile backups.
Author-email: Pascal Vizeli <pvizeli@syshack.ch>
License: Apache-2.0
Project-URL: Homepage, https://github.com/pvizeli/securetar
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.11.0
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: cryptography
Requires-Dist: PyNaCl
Dynamic: license-file

# Secure Tar

Secure Tarfile library

It's a streaming wrapper around python tarfile and allow secure handling files and support encryption.

```python
from securetar import SecureTarFile, atomic_contents_add
from pathlib import Path

path_to_add = Path(".")

with SecureTarFile("test.tar", "w") as tar_file:
    atomic_contents_add(
        tar_file,
        path_to_add,
        file_filter=lambda _: False,
        arcname=".",
    )

with SecureTarFile("test.tar", "w", b"AES128_KEY_SIZE") as tar_file:
    atomic_contents_add(
        tar_file,
        path_to_add,
        file_filter=lambda _: False,
        arcname=".",
    )
```

A common pattern is to create an outer uncompressed tarfile that contains
a variety of inner tar files. This can be accomplished without writing
out multiple files with the following pattern.

```python
from securetar import SecureTarFile, atomic_contents_add
from pathlib import Path

path_1 = Path("path1")
path_2 = Path("path2")

outer_secure_tar_file = SecureTarFile("pkg.tar", "w", gzip=False)

with outer_secure_tar_file as outer_tar_file:
    with outer_secure_tar_file.create_inner_tar(
        "./backup1.tar.gz", gzip=True
    ) as inner_tar_file:
        atomic_contents_add(
            inner_tar_file,
            path_1,
            file_filter=lambda _: False,
            arcname=".",
        )

    with outer_secure_tar_file.create_inner_tar(
        "./backup2.tar.gz", gzip=True
    ) as inner_tar_file:
        atomic_contents_add(
            inner_tar_file,
            path_2,
            file_filter=lambda _: False,
            arcname=".",
        )

```
