Skip to main content

Simple and safe python wrapper for calling system rsync

Project description

sysrsync

All Contributors

Simple and safe native rsync wrapper for Python 3

Quality Gate Status

Requirements

  • rsync
  • python 3.6+

development:

  • poetry (be sure to have both poetry and pip upgraded to the latest version)

Installation

pip install sysrsync

Basic rules

  • Syncs source contents by default, so it adds a trailing slash to the end of source, unless sync_source_contents=False is specified
  • Removes trailing slash from destination
  • Extra arguments are put right after rsync
  • Breaks if source_ssh and destination_ssh are both set

Usage

  • Basic file sync
import sysrsync

sysrsync.run(source='/home/user/foo.txt',
             destination='/home/server/bar')
# runs 'rsync /home/users/foo.txt /home/server/files'
  • sync whole folder
import sysrsync

sysrsync.run(source='/home/user/files',
             destination='/home/server/',
             sync_source_contents=False)
# runs 'rsync /home/user/files /home/server'
  • sync folder contents
import sysrsync

sysrsync.run(source='/home/user/files',
             destination='/home/server/',
             sync_source_contents=True)
# runs 'rsync /home/user/files/ /home/server'
  • ssh with options
import sysrsync

sysrsync.run(source='/home/user/files',
             destination='/home/server/files',
             destination_ssh='myserver',
             options=['-a'])
# runs 'rsync -a /home/users/files/ myserver:/home/server/files'
  • exclusions
import sysrsync

sysrsync.run(source='/home/user/files',
             destination='/home/server/files',
             destination_ssh='myserver',
             options=['-a'],
             exclusions=['file_to_exclude', 'unwanted_file'])
# runs 'rsync -a /home/user/files/ myserver:/home/server/files --exclude file_to_exclude --exclude unwanted_file'
  • Private key
import sysrsync

sysrsync.run(source='/home/user/files',
             destination='/home/server/files',
             destination_ssh='myserver',
             private_key="totally_secure_key")
# runs 'rsync --rsh='ssh -i totally_secure_key' /home/user/files/ myserver:/home/server/files'

API

sysrsync.run

argument type default description
cwd str os.getcwd() working directory in which subprocess will run the rsync command
strict bool True raises RsyncError when rsync return code is different than 0
verbose bool False verbose mode: currently prints rsync command before executing
**kwargs dict Not Applicable arguments that will be forwarded to call to sysrsync.get_rsync_command

returns: subprocess.CompletedProcess

raises:

  • RsyncError when strict = True and rsync return code is different than 0 (Success)

sysrsync.get_rsync_command

argument type default description
source str - Source folder or file
destination str - Destination folder
source_ssh Optional[str] None Remote ssh client where source is located
destination_ssh Optional[str] None Remote ssh client where destination is located
exclusions Optional[Iterable[str]] None List of excluded patterns as in rsync's --exclude
sync_source_contents bool True Abstracts the elusive trailing slash behaviour that source normally has when using rsync directly, i.e. when a trailing slash is present in source, the folder's content is synchronized with destination. When no trailing slash is present, the folder itself is synchronized with destination.
options Optional[Iterable[str]] None List of options to be used right after rsync call, e.g. ['-a', '-v'] translates to rsync -a -v
private_key Optional[str] None Configures an explicit key to be used with rsync --rsh command
rsh_port  Optional[int] None Specify port to be used for --rsh command
strict_host_key_checking Optional[bool] None set StrictHostKeyChecking property for rsh #cf. https://superuser.com/questions/125324/how-can-i-avoid-sshs-host-verification-for-known-hosts

returns: List[str] -> the compiled list of commands to be used directly in subprocess.run

raises:

  • RemotesError when both source_ssh and destination_ssh are set. Normally linux rsync distribution disallows source and destination to be both remotes.
  • PrivateKeyError when private_key doesn't exist

Contributing

  • Fork project
  • Install dependencies with poetry install
  • Make changes
  • Lint with poetry run pylint ./sysrsync
  • Test with poetry run python -m unittest
  • Run end-to-end tests with bash end-to-end-tests/run-tests.sh
  • Submit changes with a pull request

Contributors ✨

Thanks goes to these wonderful people (emoji key):

plazmakeks
plazmakeks

💻
Steve Henderson
Steve Henderson

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sysrsync-1.1.1.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

sysrsync-1.1.1-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file sysrsync-1.1.1.tar.gz.

File metadata

  • Download URL: sysrsync-1.1.1.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.10.10 Linux/6.1.24-1-lts

File hashes

Hashes for sysrsync-1.1.1.tar.gz
Algorithm Hash digest
SHA256 435f9eb620e68ffb18ca5cbad32b113396a432361c7722038eab65c97dd83bd5
MD5 0295cbaee846bcca7c62a6b8ad687571
BLAKE2b-256 24a0eaf4f0691639d603ba3da73c4ebbd3da22dfae09565ab7ba38bc28d17de2

See more details on using hashes here.

File details

Details for the file sysrsync-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: sysrsync-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.10.10 Linux/6.1.24-1-lts

File hashes

Hashes for sysrsync-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9c8877f162dce9c480804445fca56cd19bf41b998d2172651468ccebfdc60850
MD5 de3c6a3cae8a3cd39ea46ac60f42424d
BLAKE2b-256 ce825939e68632beebdb6f61a52246c0243e8490d9f75e0f1a214dda0113d5f2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page