Python bindings for Yrs with sticky_index support for XML types
Project description
pycrdt-sticky-xml
A fork of pycrdt that adds sticky_index support for XML types (XmlElement and XmlText).
What's New
This fork extends the original pycrdt library by adding sticky_index functionality to XML types:
- XmlElement.sticky_index(): Create sticky indices for XML element children
- XmlText.sticky_index(): Create sticky indices within XML text content
Installation
From PyPI (when published)
pip install pycrdt-sticky-xml
Development Installation
For development, you need Rust installed (via rustup):
# Clone the repository
git clone https://github.com/yourusername/pycrdt-sticky-xml.git
cd pycrdt-sticky-xml
# Install with uv (recommended)
uv pip install -e .
# Or build with maturin
source "$HOME/.cargo/env" # If Rust installed via rustup
uv run maturin develop
Note: The Python module is imported as pycrdt_sticky_xml (with underscores), even though the package name uses hyphens.
Usage
from pycrdt_sticky_xml import Doc, XmlFragment, XmlElement, XmlText, Assoc
# Create a document with XML content
doc = Doc()
frag = doc.get("content", type=XmlFragment)
# Add XML text
text = XmlText("Hello World")
frag.children.append(text)
# Create a sticky index at position 5
idx = text.sticky_index(5, Assoc.AFTER)
# Insert text before the sticky position
text.insert(0, "Say ")
# The sticky index maintains its semantic position
print(idx.get_index()) # Now points to position 9 (after "Say Hello")
Features
- All features from the original pycrdt
- Sticky indices for XmlElement children
- Sticky indices for XmlText content
- Full compatibility with Yrs collaborative editing
Running Tests
# Install test dependencies
uv pip install pydantic pytest-mypy-testing trio
# Run tests
uv run pytest
# Run specific test file
uv run pytest tests/test_xml.py -v
Original Project
This is a fork of pycrdt. All credit for the core functionality goes to the original authors.
License
MIT License (same as original pycrdt)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pycrdt_sticky_xml-0.12.29.tar.gz.
File metadata
- Download URL: pycrdt_sticky_xml-0.12.29.tar.gz
- Upload date:
- Size: 153.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44d86551daf13c9af9a2b1e7bf75974f40772f5796575ed062e988280ce80ff8
|
|
| MD5 |
30f52f362284837667f7d80c43a548d7
|
|
| BLAKE2b-256 |
6ffc21347873096368251a0a10902ad2e819af136dd126520407cd15aae54315
|
File details
Details for the file pycrdt_sticky_xml-0.12.29-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: pycrdt_sticky_xml-0.12.29-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 723.1 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5e73133d30849ec3c63eb3646306cf0438cb1d6dd91dadd4c3141dd101b5da0
|
|
| MD5 |
fdddb9b1ad560ca95eb76602469d6156
|
|
| BLAKE2b-256 |
d7ea39972aec9c98e74ede5b822233647fec1b0a5e7d8f3f1f270cc26fc67c25
|