Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pycrdt_sticky_xml-0.12.29.tar.gz (153.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pycrdt_sticky_xml-0.12.29-cp312-cp312-macosx_11_0_arm64.whl (723.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Hashes for pycrdt_sticky_xml-0.12.29.tar.gz
Algorithm Hash digest
SHA256 44d86551daf13c9af9a2b1e7bf75974f40772f5796575ed062e988280ce80ff8
MD5 30f52f362284837667f7d80c43a548d7
BLAKE2b-256 6ffc21347873096368251a0a10902ad2e819af136dd126520407cd15aae54315

See more details on using hashes here.

File details

Details for the file pycrdt_sticky_xml-0.12.29-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pycrdt_sticky_xml-0.12.29-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5e73133d30849ec3c63eb3646306cf0438cb1d6dd91dadd4c3141dd101b5da0
MD5 fdddb9b1ad560ca95eb76602469d6156
BLAKE2b-256 d7ea39972aec9c98e74ede5b822233647fec1b0a5e7d8f3f1f270cc26fc67c25

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page