Skip to main content

Python implementation of core ProseMirror modules for collaborative editing

Project description

prosemirror-py

CI Code Coverage Python Version PyPI Package License Fellow Careers

This package provides Python implementations of the following ProseMirror packages:

The original implementation has been followed as closely as possible during translation to simplify keeping this package up-to-date with any upstream changes.

Why?

ProseMirror provides a powerful toolkit for building rich-text editors, but it's JavaScript-only. Until now, the only option for manipulating and working with ProseMirror documents from Python was to embed a JS runtime. With this translation, you can now define schemas, parse documents, and apply transforms directly via a native Python API.

Status

The full ProseMirror test suite has been translated and passes. This project only supports Python 3. The code has type annotations to support mypy or other typechecking tools.

Usage

Since this library is a direct port, the best place to learn how to use it is the official ProseMirror documentation. Here is a simple example using the included "basic" schema:

from prosemirror.transform import Transform
from prosemirror.schema.basic import schema

# Create a document containing a single paragraph with the text "Hello, world!"
doc = schema.node("doc", {}, [
    schema.node("paragraph", {}, [
        schema.text("Hello, world!")
    ])
])

# Create a Transform which will be applied to the document.
tr = Transform(doc)

# Delete the text from position 3 to 5. Adds a ReplaceStep to the transform.
tr.delete(3, 5)

# Make the first three characters bold. Adds an AddMarkStep to the transform.
tr.add_mark(1, 4, schema.mark("strong"))

# This transform can be converted to JSON to be sent and applied elsewhere.
assert [step.to_json() for step in tr.steps] == [{
    'stepType': 'replace',
    'from': 3,
    'to': 5
}, {
    'stepType': 'addMark',
    'mark': {'type': 'strong', 'attrs': {}},
    'from': 1,
    'to': 4
}]

# The resulting document can also be converted to JSON.
assert tr.doc.to_json() == {
    'type': 'doc',
    'content': [{
        'type': 'paragraph',
        'content': [{
            'type': 'text',
            'marks': [{'type': 'strong', 'attrs': {}}],
            'text': 'Heo'
        }, {
            'type': 'text',
            'text': ', world!'
        }]
    }]
}

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

prosemirror-0.4.0.tar.gz (50.1 kB view details)

Uploaded Source

Built Distribution

prosemirror-0.4.0-py3-none-any.whl (61.7 kB view details)

Uploaded Python 3

File details

Details for the file prosemirror-0.4.0.tar.gz.

File metadata

  • Download URL: prosemirror-0.4.0.tar.gz
  • Upload date:
  • Size: 50.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for prosemirror-0.4.0.tar.gz
Algorithm Hash digest
SHA256 d3e84607b04be5a9239d89fa5a8209c284d531cc9f1bee36e23539c755a81768
MD5 998a248292c49012139a40321994ac90
BLAKE2b-256 d18f65f5d51b5e638b72b6650d58277892e3db81b341724ba7f57519afc0e8c1

See more details on using hashes here.

File details

Details for the file prosemirror-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: prosemirror-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 61.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for prosemirror-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6f9fc628adb0fb20a9d1e7cc0df76ba83c03cdd951456ba304e951d587cac9c7
MD5 9b7a9b6d9f6568d8a309143fc4a8ff8d
BLAKE2b-256 10c76aab944dfb15638f98e34515c81571350cd9bcb6a8263e2319958b30c45f

See more details on using hashes here.

Supported by

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