Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Repeatedly synchronize local workspace with a (slow) remote machine. It is available as PyPI package and hosted on GitHub.
VS Code Remote Development and similar tools are great as long as your remote machine is powerful enough. But if your target is a Raspberry Pi, Jetson Nano/Xavier/Orin, Beagle Board or similar, it feels like coding in jelly. Especially if you run powerful extensions like Pylance, GitHub Copilot or Duet AI. LiveSync solves this by watching your code for changes and just copying the modifications to the slow remote machine. So you can develop on your own machine (and run tests there in the background) while all your changes appear also on the remote. It works best if you have some kind of reload mechanism in place on the target (NiceGUI, FastAPI or Flask for example).
livesync <source> <username>@<host>
LiveSync uses rsync (SSH) to copy the files, so the <username>@<host>
must be accessible via SSH (ideally by key, not password or passphrase, because it will be called over and over).
Press CTRL-C
to abort the synchronization.
Positional arguments:
<source>
local folder<target>
target user, host and path (e.g. user@host:~/path; path defaults to source folder name in home directory)<rsync_args>
arbitrary rsync parameters after "--"Options:
--ssh-port SSH_PORT
SSH port on target (default: 22)--on-change ON_CHANGE
command to be executed on remote host after any file change (default: None)--mutex-interval MUTEX_INTERVAL
interval in which mutex is updated (default: 10 seconds)--ignore-mutex
ignore mutex (use with caution) (default: False)--no-watch
don't keep watching the copied folders for changes after the sync (default: False)Simple example (where robot
is the ssh hostname of the target system):
from livesync import Folder, sync
sync(
Folder('.', 'robot:~/navigation'),
Folder('../rosys', 'robot:~/rosys'),
)
The sync
call will block until the script is aborted.
Only if watch=False
is used, the sync
call will end after copying the folders to the target once.
The Folder
class allows to set the port
and an on_change
bash command which is executed after a sync has been performed.
Via the rsync_args
build method you can pass additional options to configure rsync.
Advanced example:
import argparse
from livesync import Folder, sync
parser = argparse.ArgumentParser(description='Sync local code with robot.')
parser.add_argument('robot', help='Robot hostname')
args = parser.parse_args()
touch = 'touch ~/robot/main.py'
sync(
Folder('.', f'{args.robot}:~/navigation', on_change='touch ~/navigation/main.py'),
Folder('../rosys', f'{args.robot}:~/rosys').rsync_args(add='-L', remove='--checksum'),
mutex_interval=30,
)
.syncignore
file in any source directory to skip additional files and directories from syncing..syncignore
file doesn't exist, it is automatically created containing .git/
, __pycache__/
, .DS_Store
, *.tmp
, and .env
.python3 -m pip install livesync
For development we suggest to use the following instructions instead of the normal pip installation:
git clone git@github.com:zauberzeug/livesync.git
cd livesync
python3 -m pip uninstall livesync # remove previous installed version
python3 -m pip install -e .
Now you can change the code and call the livesync
command from your $PATH
variable with the modified code.
We have build a small testing infrastructure with two docker containers. See tests/README.md for details.
Just create and push a new tag with the new version name (v0.2.1 for example). After a successful build a new release will be created. This should be edited to describe the changes in the release notes.
FAQs
Repeatedly synchronize local workspace with a (slow) remote machine
We found that LiveSync demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.