跳转到主要内容

基于yrs(Rust)构建的Y-CRDT的Python绑定

项目描述

PyPI version

Ypy

Ypy是Y-CRDT的Python绑定。它提供了分布式数据类型,使得设备之间能够实现实时协作。Ypy可以与任何具有Y-CRDT绑定的其他平台同步数据,从而实现无缝的跨域通信。该库是Yrs的轻量级包装,利用了Rust的安全性和性能。

🧪 项目仍处于实验阶段。在1.0稳定版本发布之前,预计API将发生变化。

安装

pip install y-py

入门指南

Ypy提供了与Yjs相同的大多数共享数据类型。所有对象都在YDoc中共享,并在事务块中进行修改。

import y_py as Y

d1 = Y.YDoc()
# Create a new YText object in the YDoc
text = d1.get_text('test')
# Start a transaction in order to update the text
with d1.begin_transaction() as txn:
    # Add text contents
    text.extend(txn, "hello world!")

# Create another document
d2 = Y.YDoc()
# Share state with the original document
state_vector = Y.encode_state_vector(d2)
diff = Y.encode_state_as_update(d1, state_vector)
Y.apply_update(d2, diff)

value = str(d2.get_text('test'))

assert value == "hello world!"

开发环境搭建

  1. 安装RustPython
  2. 使用maturin来构建Ypy: pip install maturin
  3. 创建库的开发版本: maturin develop

测试

所有测试都位于/tests目录中。要运行测试,请安装pytest并从项目根目录运行命令行工具

pip install pytest
pytest

使用Hatch

如果您使用的是hatch,则在pyproject.toml中定义了一个test环境矩阵,该矩阵将在py37py312的虚拟环境中运行命令。

hatch run test:maturin develop
hatch run test:pytest

构建Ypy

将库构建为wheel,并将其存储在target/wheels

maturin build

WASM中的Ypy (Pyodide)

作为基于Rust的库,Ypy无法构建“纯Python”的wheel。CI过程构建和上传多个wheel到PyPI,但PyPI不支持托管必要的emscripten / wasm32 wheel(有关更多信息和新动态,请参阅https://github.com/pypi/warehouse/issues/10416)。目前,Ypy将构建emscripten wheel并将二进制文件作为资产附加到相应的发布条目中。不幸的是,直接从GitHub下载链接安装将导致CORS错误,因此您需要使用代理来拉取二进制文件并从emscripten文件系统写入/安装,或者将二进制文件托管在CORS可访问的地方,以便您的应用程序访问。

您可以在pyodide.org的终端模拟器中尝试使用Pyodide运行Ypy

Welcome to the Pyodide terminal emulator 🐍
Python 3.10.2 (main, Sep 15 2022 23:28:12) on WebAssembly/Emscripten
Type "help", "copyright", "credits" or "license" for more information.
>>> wheel_url = 'https://github.com/y-crdt/ypy/releases/download/v0.5.5/y_py-0.5.5-cp310-cp310-emscripten_3_1_14_wasm32.whl'
>>> wheel_name = wheel_url.split('/')[-1]
>>> wheel_name
'y_py-0.5.5-cp310-cp310-emscripten_3_1_14_wasm32.whl'
>>> 
>>> proxy_url = f'https://api.allorigins.win/raw?url={wheel_url}'
>>> proxy_url
'https://api.allorigins.win/raw?url=https://github.com/y-crdt/ypy/releases/download/v0.5.5/y_py-0.5.5-cp310-cp310-emscripten_3_1_14_wasm32.whl'
>>> 
>>> import pyodide
>>> resp = await pyodide.http.pyfetch(proxy_url)
>>> resp.status
200
>>> 
>>> content = await resp.bytes()
>>> len(content)
360133
>>> content[:50]
b'PK\x03\x04\x14\x00\x00\x00\x08\x00\xae\xb2}U\x92l\xa7E\xe6\x04\x00\x00u\t\x00\x00\x1d\x00\x00\x00y_py-0.5.5.dist-info'
>>>
>>> with open(wheel_name, 'wb') as f:
...   f.write(content)
... 
360133
>>> 
>>> import micropip
>>> await micropip.install(f'emfs:./{wheel_name}')
>>> 
>>> import y_py as Y
>>> Y
<module 'y_py' from '/lib/python3.10/site-packages/y_py/__init__.py'>
>>> 
>>> d1 = Y.YDoc()
>>> text = d1.get_text('test')
>>> with d1.begin_transaction() as txn:
    text.extend(txn, "hello world!")
... 
>>> d2 = Y.YDoc()
>>> state_vector = Y.encode_state_vector(d2)
>>> diff = Y.encode_state_as_update(d1, state_vector)
>>> Y.apply_update(d2, diff)
>>> d2.get_text('test')
YText(hello world!)

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

y_py-0.6.2.tar.gz (53.0 kB 查看哈希)

构建分发

y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB 查看哈希)

上传于 PyPy manylinux: glibc 2.17+ x86-64

y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ s390x

y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ppc64le

y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARMv7l

y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.5+ i686

y_py-0.6.2-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (1.5 MB 查看哈希值)

上传于 PyPy macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

y_py-0.6.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl (758.4 kB 查看哈希值)

上传于 PyPy macOS 10.7+ x86-64

y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ s390x

y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.8 MB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ ppc64le

y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ ARMv7l

y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ ARM64

y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.5+ i686

y_py-0.6.2-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (1.5 MB 查看哈希值)

上传时间: PyPy macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

y_py-0.6.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl (758.2 kB 查看哈希值)

上传时间: PyPy macOS 10.7+ x86-64

y_py-0.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ x86-64

y_py-0.6.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.0 MB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ s390x

y_py-0.6.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.8 MB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ ppc64le

y_py-0.6.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ ARMv7l

y_py-0.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ ARM64

y_py-0.6.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.5+ i686

y_py-0.6.2-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (1.5 MB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

y_py-0.6.2-cp312-cp312-macosx_10_7_x86_64.whl (752.6 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.7+ x86-64

y_py-0.6.2-cp311-none-win_amd64.whl (550.4 kB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

y_py-0.6.2-cp311-none-win32.whl (521.4 kB 查看哈希值)

上传于 CPython 3.11 Windows x86

y_py-0.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

y_py-0.6.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ s390x

y_py-0.6.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ppc64le

y_py-0.6.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARMv7l

y_py-0.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

y_py-0.6.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.5+ i686

y_py-0.6.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (1.5 MB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

y_py-0.6.2-cp311-cp311-macosx_10_7_x86_64.whl (757.2 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.7+ x86-64

y_py-0.6.2-cp310-none-win_amd64.whl (550.4 kB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

y_py-0.6.2-cp310-none-win32.whl (521.4 kB 查看哈希值)

上传于 CPython 3.10 Windows x86

y_py-0.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

y_py-0.6.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ s390x

y_py-0.6.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ppc64le

y_py-0.6.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARMv7l

y_py-0.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

y_py-0.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.5+ i686

y_py-0.6.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (1.5 MB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

y_py-0.6.2-cp310-cp310-macosx_10_7_x86_64.whl (757.2 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.7+ x86-64

y_py-0.6.2-cp39-none-win_amd64.whl (550.4 kB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

y_py-0.6.2-cp39-none-win32.whl (521.7 kB 查看哈希值)

上传于 CPython 3.9 Windows x86

y_py-0.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

y_py-0.6.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ s390x

y_py-0.6.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ppc64le

y_py-0.6.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ARMv7l

y_py-0.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ARM64

y_py-0.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.5+ i686

y_py-0.6.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (1.5 MB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

y_py-0.6.2-cp39-cp39-macosx_10_7_x86_64.whl (757.6 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.7+ x86-64

y_py-0.6.2-cp38-none-win_amd64.whl (549.3 kB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

y_py-0.6.2-cp38-none-win32.whl (521.6 kB 查看哈希值)

上传于 CPython 3.8 Windows x86

y_py-0.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

y_py-0.6.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ s390x

y_py-0.6.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.8 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ppc64le

y_py-0.6.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARMv7l

y_py-0.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64

y_py-0.6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.5+ i686

y_py-0.6.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (1.5 MB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

y_py-0.6.2-cp38-cp38-macosx_10_7_x86_64.whl (757.5 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.7+ x86-64

y_py-0.6.2-cp37-none-win_amd64.whl (549.4 kB 查看哈希值)

上传于 CPython 3.7 Windows x86-64

y_py-0.6.2-cp37-none-win32.whl (521.6 kB 查看哈希值)

上传于 CPython 3.7 Windows x86

y_py-0.6.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ x86-64

y_py-0.6.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ s390x

y_py-0.6.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.8 MB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ ppc64le

y_py-0.6.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ ARMv7l

y_py-0.6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ ARM64

y_py-0.6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB 查看哈希)

上传于 CPython 3.7m manylinux: glibc 2.5+ i686

y_py-0.6.2-cp37-cp37m-macosx_10_7_x86_64.whl (757.5 kB 查看哈希)

上传于 CPython 3.7m macOS 10.7+ x86-64

由支持