Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/synodriver/pyrsync
python binding to librsync
https://github.com/synodriver/pyrsync
cffi cpython cython librsync pypy
Last synced: about 2 months ago
JSON representation
python binding to librsync
- Host: GitHub
- URL: https://github.com/synodriver/pyrsync
- Owner: synodriver
- Created: 2022-07-16T15:58:36.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-27T11:50:13.000Z (9 months ago)
- Last Synced: 2024-10-11T11:26:09.051Z (2 months ago)
- Topics: cffi, cpython, cython, librsync, pypy
- Language: Python
- Homepage:
- Size: 495 KB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.markdown
- Changelog: changename.py
Awesome Lists containing this project
README
✨ pyrsync ✨
The python binding for librsync
[![pypi](https://img.shields.io/pypi/v/python-rsync.svg)](https://pypi.org/project/python-rsync/)
![python](https://img.shields.io/pypi/pyversions/python-rsync)
![implementation](https://img.shields.io/pypi/implementation/python-rsync)
![wheel](https://img.shields.io/pypi/wheel/python-rsync)
![license](https://img.shields.io/github/license/synodriver/pyrsync.svg)
![action](https://img.shields.io/github/workflow/status/synodriver/pyrsync/build%20wheel)## Install
```bash
pip install python-rsync
```## Usage
```python
from io import BytesIO
from pyrsync import delta, get_signature_args, signature, patchs = b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" * 50
d = b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" * 50 + b"2"
src = BytesIO(s)
dst = BytesIO(d)
magic, block_len, strong_len = get_signature_args(len(s))
sig = BytesIO()
signature(dst, sig, strong_len, magic, block_len) # sig由dst产生
dst.seek(0, 0)
sig.seek(0, 0)
_delta = BytesIO()
delta(src, sig, _delta) # src和sig对比产生delta
src.seek(0, 0)
_delta.seek(0, 0)
out = BytesIO()
patch(dst, _delta, out)
assert out.getvalue() == src.getvalue()
```## Public functions
```python
from typing import IOclass LibrsyncError(Exception):
code: Any
def __init__(self, result) -> None: ...RS_JOB_BLOCKSIZE: int
RS_DELTA_MAGIC: int
RS_MD4_SIG_MAGIC: int
RS_BLAKE2_SIG_MAGIC: int
RS_RK_MD4_SIG_MAGIC: int
RS_RK_BLAKE2_SIG_MAGIC: intdef get_signature_args(old_fsize: int, magic: int = 0, block_len: int = 0, strong_len: int = 0) -> tuple: ...
def signature(input:IO, output:IO, strong_len: int, sig_magic: int, block_size: int = ...) -> None: ...
def delta(input:IO, sigfile:IO, output) -> None: ...
def patch(input:IO, delta:IO, output) -> None: ...
```### Compile
```
python -m pip install setuptools wheel cython cffi
git clone https://github.com/synodriver/pyrsync
cd pyrsync
git submodule update --init --recursive
python setup.py bdist_wheel --use-cython --use-cffi
```### Backend Choose
Use ```RSYNC_USE_CFFI``` env var to use cffi backend, otherwise it's depend on your python implementation.