Skip to main content

Automatic schema migration and version control for 51 schema languages and 248 programming languages

Project description

panproto

PyPI Python MIT

Native Python bindings for panproto. Define schemas, detect breaking changes, and automatically convert data between schema versions. Supports 51 schema languages (OpenAPI, ATProto, Protobuf, JSON Schema, and more) and can parse source code in 248 programming languages via tree-sitter.

Built with PyO3 for direct access to the Rust engine (no WASM, no subprocess). Requires Python 3.13+.

Installation

pip install panproto

Quick start

import panproto as pp

# Build two versions of a schema
builder = pp.SchemaBuilder("atproto")
builder.vertex("post", "record", nsid="app.bsky.feed.post")
builder.vertex("post:body", "object")
builder.vertex("post:body.text", "string")
builder.edge("post", "post:body", "record-schema")
builder.edge("post:body", "post:body.text", "prop", name="text")
builder.constraint("post:body.text", "maxLength", "3000")
old_schema = builder.build()

# ... build new_schema similarly, with renamed fields ...

# Check whether the change is breaking
report = pp.diff_and_classify(old_schema, new_schema, protocol)
print(report.compatible)        # True or False
print(report.report_text())     # human-readable summary

# Auto-generate a bidirectional converter.
# Returns (lens, alignment_quality, coerce_proposals); the last is empty
# unless `stringency="exploratory"` is passed.
lens, quality, coerce_proposals = pp.auto_generate_lens(old_schema, new_schema, protocol)
view, complement = lens.get(instance)
restored = lens.put(view, complement)

# Parse and emit data in any supported format
io = pp.IoRegistry()
schema = io.parse_schema("json-schema", json_schema_str)
output = io.emit_schema("json-schema", schema)

# Version control
repo = pp.VcsRepository.init("/path/to/repo")
repo.add(schema)
repo.commit("add post schema", "your-name")
repo.branch("feature")
repo.merge("feature", "your-name")

API overview

Schema and protocols

Function / Class What it does
list_builtin_protocols() List all 76+ built-in protocol names.
get_builtin_protocol(name) Load a protocol definition by name.
define_protocol(...) Define a custom protocol.
SchemaBuilder(protocol) Build schemas with vertex(), edge(), constraint(), then build().
Schema An immutable schema with vertex, edge, and constraint accessors.
Protocol A schema language definition with edge rules and feature flags.

Breaking change detection

Function / Class What it does
diff_schemas(old, new) Compute a structural diff between two schemas.
diff_and_classify(old, new, protocol) Diff and classify changes as breaking or non-breaking.
SchemaDiff The diff result: added, removed, and changed elements.
CompatReport Compatibility report with details on each breaking change.

Migration and lenses

Function / Class What it does
auto_generate_lens(src, tgt, protocol) Generate a bidirectional converter between two schemas.
Lens A converter with get(instance) (forward) and put(view, complement) (backward).
Complement The data dropped during forward conversion, needed for lossless backward conversion.
MigrationBuilder Build a migration by specifying vertex and edge mappings.
compile_migration(src, tgt, migration) Compile a migration for application.
compose_migrations(m1, m2) Chain two migrations into one.
check_existence(src, tgt, migration, protocol) Validate that a migration is well-formed.

Data I/O

Function / Class What it does
Instance A data record with from_json(), to_json(), and validate().
IoRegistry Parse and emit schemas and data in any of the 76+ supported formats.

Theory engine

Function / Class What it does
create_theory(name, sorts, ops, eqs) Define a custom schema language theory.
Theory A theory with sort, operation, and equation accessors.
colimit_theories(t1, t2, shared) Combine two theories into one.
check_morphism(morphism, domain, codomain) Validate a structure-preserving map between theories.
Model A concrete model of a theory.

Version control

Function / Class What it does
VcsRepository.init(path) Initialize a new panproto repository.
VcsRepository.open(path) Open an existing repository.
repo.add(schema) Stage a schema for commit.
repo.commit(message, author) Create a new commit.
repo.branch(name) Create a branch.
repo.merge(branch, author) Merge a branch into the current one.

Documentation

Full documentation at panproto.dev.

License

MIT

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

panproto-0.34.1-cp313-abi3-win_amd64.whl (5.5 MB view details)

Uploaded CPython 3.13+Windows x86-64

panproto-0.34.1-cp313-abi3-manylinux_2_28_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ x86-64

panproto-0.34.1-cp313-abi3-manylinux_2_28_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

panproto-0.34.1-cp313-abi3-macosx_11_0_arm64.whl (6.5 MB view details)

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.34.1-cp313-abi3-macosx_10_12_x86_64.whl (6.4 MB view details)

Uploaded CPython 3.13+macOS 10.12+ x86-64

File details

Details for the file panproto-0.34.1-cp313-abi3-win_amd64.whl.

File metadata

  • Download URL: panproto-0.34.1-cp313-abi3-win_amd64.whl
  • Upload date:
  • Size: 5.5 MB
  • Tags: CPython 3.13+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for panproto-0.34.1-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f406edd300730f31e2ad3a4623001cec6639070a857f1a5e43f7fa50fe97dc8a
MD5 19e2c6e081b020561994cf0ab3430c94
BLAKE2b-256 956c7765d8bdbae8a17443e8808eac79f85bd0250454ad91d6602358dbd7832d

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.34.1-cp313-abi3-win_amd64.whl:

Publisher: python-wheels.yml on panproto/panproto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file panproto-0.34.1-cp313-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for panproto-0.34.1-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e70cd8d9d89db8f204abc376e0dd475908e9e7069d73750a7e2eda0afc5a2687
MD5 15673f7da0a1700c6dccc8465017f528
BLAKE2b-256 c30ec89188b8b0ade71ecf2ac9abee3a0977e4f9c8eb1115394ae59ae10d35e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.34.1-cp313-abi3-manylinux_2_28_x86_64.whl:

Publisher: python-wheels.yml on panproto/panproto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file panproto-0.34.1-cp313-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for panproto-0.34.1-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1fc1bfe07a94f6d7a0156767f86164af7225f139130f6473a461933c17e5ec28
MD5 45869fc5a576dd7a14470a51eadad6ec
BLAKE2b-256 0fa5c403822baf1534bfd07aeda0e9de1f7d70a21317aeaf543c6e4a5b759466

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.34.1-cp313-abi3-manylinux_2_28_aarch64.whl:

Publisher: python-wheels.yml on panproto/panproto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file panproto-0.34.1-cp313-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for panproto-0.34.1-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ed475f232e929e67a3bfd69b9dc877ee4058ee56b2abfe758008234548160bad
MD5 d6716ce5e2c30d8e3572dbf7af6fb15a
BLAKE2b-256 d9e34df89be9033e29d6e128ec3cae8b5c38638aebf732f6b9c3b1ea19eedcbe

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.34.1-cp313-abi3-macosx_11_0_arm64.whl:

Publisher: python-wheels.yml on panproto/panproto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file panproto-0.34.1-cp313-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for panproto-0.34.1-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ecc97055e7c70755432e0b9547ddf80ad7f52f37e578bfdc4c555f6adfd0441d
MD5 ce40bfb6505b608d7f79a40a89ba4b79
BLAKE2b-256 91d85660b847055196dee419b3b2e6db9606698488742b84911b789f6d3d0dea

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.34.1-cp313-abi3-macosx_10_12_x86_64.whl:

Publisher: python-wheels.yml on panproto/panproto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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