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 250 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.40.0-cp313-abi3-win_amd64.whl (6.8 MB view details)

Uploaded CPython 3.13+Windows x86-64

panproto-0.40.0-cp313-abi3-manylinux_2_28_x86_64.whl (8.5 MB view details)

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

panproto-0.40.0-cp313-abi3-manylinux_2_28_aarch64.whl (8.2 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

panproto-0.40.0-cp313-abi3-macosx_11_0_arm64.whl (7.7 MB view details)

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.40.0-cp313-abi3-macosx_10_12_x86_64.whl (7.6 MB view details)

Uploaded CPython 3.13+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: panproto-0.40.0-cp313-abi3-win_amd64.whl
  • Upload date:
  • Size: 6.8 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.40.0-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6813275bbc12a519736b599346d76a578dd85f3ff96b6d5ff57f0e838084e287
MD5 21b2fe259458a2ac9f6fee510bcd2003
BLAKE2b-256 f2c847932f76d15b49116595d230c657d2854a773fb9553a43101c68ca5184c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.40.0-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.40.0-cp313-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for panproto-0.40.0-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3926489a0c2e5705027ba1afd79c4238d68249a4bbee61696f4acdd261835c3d
MD5 cb886294f8bf58cdd7bc6d567497afcf
BLAKE2b-256 f71c2f40d7a55157e55a95988cddce427d7949ecfc46eadb1c19fb4bd1db2355

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.40.0-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.40.0-cp313-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for panproto-0.40.0-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f4e794260b2bb9fded9e4a8a3c84da146f63d16176c4f499c3594473e0251d93
MD5 2f181d6386d29ad7fbaf0fc421c57092
BLAKE2b-256 50b2d7ba2aefaa4cde512a7f7a369fefaa225319ca3ca97784a27bd487265c3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.40.0-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.40.0-cp313-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for panproto-0.40.0-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 871b6355925b1bf4e4a7a29bb750aeb0152eec047faa48c93c354261ac9b9c29
MD5 78720f808dbe111823fec567e31f526c
BLAKE2b-256 a3466c4d947742e18b3ce260b9cfebf04c4dad22dbe82f5e4a68082eafd8fbb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.40.0-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.40.0-cp313-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for panproto-0.40.0-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2816e78cfabc03706055fd5a4c076910127b1888b117a9bcb0541ef0b5f0edae
MD5 7fa42d3eb4225a4b9a846e4714f320d5
BLAKE2b-256 52990134d5af407cd74e64f232aac8481581c62b38c160121a3cda825e64ddd1

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.40.0-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