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

Uploaded CPython 3.13+Windows x86-64

panproto-0.39.0-cp313-abi3-manylinux_2_28_x86_64.whl (7.4 MB view details)

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

panproto-0.39.0-cp313-abi3-manylinux_2_28_aarch64.whl (7.2 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

panproto-0.39.0-cp313-abi3-macosx_11_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.39.0-cp313-abi3-macosx_10_12_x86_64.whl (6.6 MB view details)

Uploaded CPython 3.13+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: panproto-0.39.0-cp313-abi3-win_amd64.whl
  • Upload date:
  • Size: 5.7 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.39.0-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 21aae7d11606d197f9ed9adcdd6b2560b8f374bfa352a6652c7df1503699ba69
MD5 ae3a4bda2460b95e7d7ffb370b184a87
BLAKE2b-256 8645a5a2e35db1067d5ffbf2110ed5746276bee67fa950b7ba37151153d49a68

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.39.0-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8fd103833bc845162fe7550a23158936ccc74f04d33708b441b5e77dc7339970
MD5 f45e66e141a1ffb4c4be6c72c8b32079
BLAKE2b-256 910fea65a41d59eec4c165c2ae700de5121fc9a6b86bc45ef627db3db7461303

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.39.0-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 607462b017c415e593d61998294688ae327e6e18c16689ac99cf69c89bbe99e0
MD5 558affb88e85d8342d6fc8c7b9681bad
BLAKE2b-256 e39df3d9cd6d7eb5fdf4d5d0e834da16cae6823f9357fb60194ccac4529105ca

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.39.0-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b43f7f3e15a7d1032854c9fe985218d920b505fa95415cff8e2f89f24e739410
MD5 ae61db537620771c929d79634cee09e2
BLAKE2b-256 55ccfb2baa8305a59598a04aa8794361edf9d97852528b7b762bff3364dfad0d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.39.0-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1a422ea542bc4a92f6f577851e14913fa6074ea4687449aa332d8992e4c65efc
MD5 f1c419f24ec99fd55538c38b2a538eec
BLAKE2b-256 580303f6e5534d2b86261c337395ff8019dc9e2d102dc193f1d4a98bb2985f65

See more details on using hashes here.

Provenance

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