🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
DemoInstallSign in
Socket

sysrsync

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sysrsync

Simple and safe python wrapper for calling system rsync

1.1.1
PyPI
Maintainers
1

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

argumenttypedefaultdescription
cwdstros.getcwd()working directory in which subprocess will run the rsync command
strictboolTrueraises RsyncError when rsync return code is different than 0
verboseboolFalseverbose mode: currently prints rsync command before executing
**kwargsdictNot Applicablearguments 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

argumenttypedefaultdescription
sourcestr-Source folder or file
destinationstr-Destination folder
source_sshOptional[str]NoneRemote ssh client where source is located
destination_sshOptional[str]NoneRemote ssh client where destination is located
exclusionsOptional[Iterable[str]]NoneList of excluded patterns as in rsync's --exclude
sync_source_contentsboolTrueAbstracts 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.
optionsOptional[Iterable[str]]NoneList of options to be used right after rsync call, e.g. ['-a', '-v'] translates to rsync -a -v
private_keyOptional[str]NoneConfigures an explicit key to be used with rsync --rsh command
rsh_port Optional[int]NoneSpecify port to be used for --rsh command
strict_host_key_checkingOptional[bool]Noneset 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!

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts