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.0-cp313-abi3-win_amd64.whl (5.5 MB view details)

Uploaded CPython 3.13+Windows x86-64

panproto-0.34.0-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.0-cp313-abi3-manylinux_2_28_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.34.0-cp313-abi3-macosx_10_12_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.13+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: panproto-0.34.0-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.0-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 44b8f003abb156a09568dd8cdcd9c7b1747d1505a78dafb3fd3876d61557accf
MD5 9d5213772e18ab89405d1cf12a8540bc
BLAKE2b-256 07e0f39c2ff74cc91eb41d273def67bd1b405353fb86a7ca4337555dc774ed71

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.34.0-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d4afc12864fa3a2c8f9f398fc0c6595bf92540584846a3f0c75e14b63069a9c3
MD5 8c87250ef67f2ae5360bbf3a1f394012
BLAKE2b-256 b97945c786c0fc3221a39c3578065cfcd3ef7079aeb0fef766b3762fe1d3b745

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.34.0-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d3d06774961c1a8dc9035148a63d8a06cd43d6e55a671a667af150500f19e865
MD5 d012e0e4ac46480a72ff369333020a04
BLAKE2b-256 79dbaf2ab9e0cf42169dede00b4ac76318a975c2dcd2810f1a18d1fa1b71be90

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.34.0-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5a1f2f1e9f891230080a25560a65f5fa814405543f8e44114ce70bed8411a368
MD5 874a397bf4c1d085fcaff39df9b7087a
BLAKE2b-256 6a8bb88f50a4c31bc00341f70597b97ff6b01210b8655391706ee26e28925ee0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.34.0-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6f0385842511151eead4562668f54479b893da2a507fbf41cd89581941dee8b3
MD5 e87c07447006182c75b6ae5e1cc742b2
BLAKE2b-256 70121a9fc7f7b67fc8f5f05599c66314c25617b08d26eba9c93c7b7c8bcf28d9

See more details on using hashes here.

Provenance

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