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
lens = 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.32.0-cp313-abi3-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.13+Windows x86-64

panproto-0.32.0-cp313-abi3-manylinux_2_28_x86_64.whl (7.0 MB view details)

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

panproto-0.32.0-cp313-abi3-manylinux_2_28_aarch64.whl (6.9 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

panproto-0.32.0-cp313-abi3-macosx_11_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.32.0-cp313-abi3-macosx_10_12_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.13+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: panproto-0.32.0-cp313-abi3-win_amd64.whl
  • Upload date:
  • Size: 5.3 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.32.0-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 44994dd51120473da4c14c74daa2b8146802fdf95fafcbc2d5246a5ff6094682
MD5 f1c5350bbc05936505080fb5f3098d27
BLAKE2b-256 3dadef0094d083ca56a45f7c3dbe29f98c708e1b45d72ce2a2262870ab8f780a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.32.0-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5ed60131bf6f2f09637b3c7089a480c5fd268b3c51c0787ead5f00c37a285b0a
MD5 da29a658ac61026a7577aadf89de3d2d
BLAKE2b-256 76ab888894e4e6a69c4e1dd009c95f39cc574dec32b5e30af258be16d8a4e016

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.32.0-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 914b940614932e916fd0718bf4ba2a4d9a72a54bd6bb685fd7d249bb7844af8c
MD5 432575f17df9c8e9252257a228dcf202
BLAKE2b-256 1c3066618b8fb8aebb62d728a9765c3dc5fd83d2d1d3b41666cdcd6b4f03317f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.32.0-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 32097bf7f08eb3f46d09c17689c8f00175b996a73d2dadf8d4ea4bfd699bcca9
MD5 f8cb8f224b87f209e687e8534d171c6f
BLAKE2b-256 498561696068b993a5b88ee1ee1105ba93185b2372672c6b5d6e462aebb33409

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.32.0-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 dcd8afe06b024a2f66d0ae463d0d423701b82777c8496abe5cfc3b17b4b9d16a
MD5 a7bbddc8aba0a01f88ce2555c4e4b9eb
BLAKE2b-256 a7d60813ea832cf4e4885b8bf529c54a7cf3bf9a7b63c4bca4252cefdef929a3

See more details on using hashes here.

Provenance

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