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

Uploaded CPython 3.13+Windows x86-64

panproto-0.37.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.37.0-cp313-abi3-manylinux_2_28_aarch64.whl (7.2 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.37.0-cp313-abi3-macosx_10_12_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.13+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: panproto-0.37.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.37.0-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2a20271a868724ebc4ae62d5e4d0f9cd0d002a3c0344b12b93c0ee671c14e6a0
MD5 7934e5191ef6815cff736e2c6899b09c
BLAKE2b-256 632e0d4bd525011d82a00200907003fdc76773c51d83edbe70edb79bdaa344e5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.37.0-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7494c9b16aacd6bb7f1c9c9e9e76ae3c9fcb4b39b31d4bb74abc9f38e35c345e
MD5 f899a150a66388f8b7a9840c90fdcfd9
BLAKE2b-256 913dd2f5ac7bd76646f2c3c19230db94b3c244df17b32b3c66daa687dd246bb7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.37.0-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1ef59cf9edfeb311eac00d9375fdfddcea0aa292cbf1650cf7c6125ef2288c04
MD5 73c2f3ee37e30ca7de819c99d088d275
BLAKE2b-256 625a6ed706f7b294a0451f5617c663ec017eae06f9af34a9d754ec3461616148

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.37.0-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 162169da9005df887567af9e3d2e842e7a792b255c39d5cffc90632909c6356b
MD5 c139f32ca7d4083de4194a458b0622cc
BLAKE2b-256 06283fa7c393b8022767633a799f2c420834be9b04ce96f9be6f466657c8f7c5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.37.0-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 430fd8e9e7b4439ca85ec5f1197d3a16efc85466817c26762598b5943fcd2191
MD5 a62cd7cc878674e742210c66b360a21f
BLAKE2b-256 952793131d11f61525ffe9671bad75bd6d40faf2a462613c3dfa74613cd043ca

See more details on using hashes here.

Provenance

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