Skip to main content

pisync is a simple library to aid in writing incremental backup scripts to local or remote machines. The only dependencies are rsync, python >= v3.6, fabric, and ssh keys copied over to a unix machine if doing a remote backup. Note: no dependencies are required on the remote machine.

Installation

pip install pisync

Example Usage

from pisync import LocalConfig, RemoteConfig, backup

local_docs = LocalConfig(
    source_dir="/home/ethan/Documents", # local machine
    destination_dir="/tmp/backup_test", # local machine
    exclude_file_patterns=[
        "**/node_modules",
        "junk/",
    ],
    log_file="/tmp/backup-logs/backups.log" # local machine
)

remote_docs = RemoteConfig(
    user_at_hostname="ethan@hydrogen.local", # remote machine
    source_dir="/home/ethan/Documents", # local machine
    destination_dir="/tmp/backup_test", # remote machine
    exclude_file_patterns=[
        "**/node_modules",
        "junk/",
    ],
    log_file="/tmp/backup-logs/backups.log" # local machine
)

backup(local_docs)
backup(remote_docs)

Also see an example config for how I backup my home server both locally and to an offsite raspberry pi.

Notes

Safety

  • Creating a LocalConfig or RemoteConfig object will fail if source_dir or destination_dir do not exist or are not directories.
  • If destination_dir is not empty, it is assumed that a previous backup exists.
    • The backup will not run if destination_dir is not empty and there is not a symlink destination_dir/latest pointing to the latest backup.
    • The contents of source_dir are compared to destination_dir/latest during the incremental backup and the changes are written to destination_dir/<current date/time>.
    • Therefore, you need to ensure that destination_dir is empty which will start a fresh complete backup, or you can manually create the destination_dir/latest symlink to continue incrementally.

Logging

  • By default, a default log file will be created (if it does not exists) and appended to at ~/.local/share/backup/rsync-backups.log.
  • NOTE: If you run your script as sudo, the home directory of the root user is probably /root rather than your ~/ directory.
  • If you want the log file to still go the your home directory when you run as root, use this sudo -E python3 ./run_backups.py
  • You can also specify the log file location in your config.
    • Hard coding the log file path solves some of the quirks that you can run into when using a cron job.

Running tests

The unit/integration tests require password-less login to localhost as the "remote" machine.

ssh-copy-id $USER@localhost
git clone https://github.com/erietz/pisync
cd pisync
pip install -e .
make test

Metadata

Release files for pisync 0.0.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pisync 0.0.9
File Size Uploaded
pisync-0.0.9.tar.gz 22.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pisync 0.0.9
File Interpreter ABI Platform
pisync-0.0.9-py3-none-any.whl Python 3 none any Details

Total release size: 42.9 kB

Release files / pisync-0.0.9.tar.gz

Download URL pisync-0.0.9.tar.gz
Size 22.3 kB
Tags Source
SHA-256 checksum
How to use checksums
de1a21df5efd43d3fce2aced6b621dbe99b7c0631ff9f01247aacdf52bbb4d36
BLAKE2b-256 checksum
How to use checksums
aaef8810edd32c2b814d82c4a62ff7b3ec65252882519a949dd23ff71c8fb307
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.27.0

Release files / pisync-0.0.9-py3-none-any.whl

Download URL pisync-0.0.9-py3-none-any.whl
Size 20.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
50cfcaaeb9effef8cd3f1b038d8d79b6839f13dcec31b8abaa3b3a01cd88e76f
BLAKE2b-256 checksum
How to use checksums
1a65f47a005a42a75930d077fee75955b68a6e67b16d3cfc748f885f38a10837
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.27.0

Release history Release notifications | RSS feed

This release

0.0.9 This release

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

0.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page