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

Uploaded CPython 3.13+Windows x86-64

panproto-0.31.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.31.0-cp313-abi3-manylinux_2_28_aarch64.whl (6.9 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.31.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.31.0-cp313-abi3-win_amd64.whl.

File metadata

  • Download URL: panproto-0.31.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.31.0-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 064dd74ce774d7ee2d8dbd878e585542423ad9131fd929a6ba891d2a0b5b3bac
MD5 468e85e7e61b30d14d307c98c9bd91c7
BLAKE2b-256 b4da467167d0e6be231f0c4819bc636a60848776112aac4d5a8d55da1db0b0c9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.31.0-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1c178dbdc61e49095b00d8a9ea47dba5dca9b9c9b4439fbd293a3f86247b23be
MD5 91be449274d9491897df02f3cce66a1d
BLAKE2b-256 8a6746a7bc30e9df100751e78d15702a0e1df0c8fc93566d109ac17253ef1b6f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.31.0-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5461e0c1753959e9518fcf85ea243bcba6c1d09755fb13894d26d2b91d154d29
MD5 ac34ec665a559d7782776ccb2d86e358
BLAKE2b-256 c7c1eb4f0e3749d16bf615095159275067e5ae21aa6c354be1d902801b1b64f5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.31.0-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f41db6d3eb1ef1749ba6f6b032d828f937e4f0b3080116aec7c4e692e310ae64
MD5 4e582721ff0dd0486bade7ef37ee9732
BLAKE2b-256 d6a5fdd0785b4086348a938f14ec325d8a62ef7765e5dd0cbcfb59a90c2ff584

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.31.0-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bbaa936d706a4aa29d98f0c1ab55486823359e67f16ec068bd1dcf37e37e7e9e
MD5 0f367c39cb3db294121f6b252c39e58d
BLAKE2b-256 8a3edd7cafa64177d4969223d2865f98e748233bff3550f975231019db171798

See more details on using hashes here.

Provenance

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