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

Uploaded CPython 3.13+Windows x86-64

panproto-0.30.0-cp313-abi3-manylinux_2_28_x86_64.whl (6.4 MB view details)

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

panproto-0.30.0-cp313-abi3-manylinux_2_28_aarch64.whl (6.3 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

panproto-0.30.0-cp313-abi3-macosx_11_0_arm64.whl (5.8 MB view details)

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.30.0-cp313-abi3-macosx_10_12_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.13+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: panproto-0.30.0-cp313-abi3-win_amd64.whl
  • Upload date:
  • Size: 4.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.30.0-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 af958b88fb8fe10d08c854b70c8b7f1c4ab0a1c42c592c9464fee4c20ec7ff91
MD5 90f2266c474f6ebc9d8e751907dd81dd
BLAKE2b-256 494963f794e49cbb7c2bc2c7db06a043d457ddb824cfe3679b6983b5f1a3e83e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.30.0-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dc034cd1efa77ec0d9b0a866661e311cec44b1edeb3f41ed62cbaaff305d2005
MD5 57bca14f1d2b8a310d6f99added8f4cb
BLAKE2b-256 e0787dcfeacf892ec9a2557aa7abb361f98cb6f3084d3dfeb199243b7cc84ebd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.30.0-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d08d7a1a151057cc31453e8f2f5e780a8c3b465dd1cfeb644299dfb81da46941
MD5 1e081767817b8f0b3edce316796ec055
BLAKE2b-256 2f87a18341350f94498a9138495c2632f111e334a46ab60c8a56b5de23c2acf2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.30.0-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2d35b89d666eb05ed4fc63f760917d43c7e7d0dbd85e082aa47268fbdd3e34da
MD5 f3fc8a4d3b341206d30f5173e1f9e313
BLAKE2b-256 b589f87d464a3fac5967789c244c1e9a6f2ba14dd274ab0812b5656248806a5b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.30.0-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 19fab7b20f8de2fcd5510d9de363f7cad8ff127a23447bce38c0b916a429b04d
MD5 257a7f1523c2ba712a9c672abe6c5e77
BLAKE2b-256 df9e048a2b8bee54964655f01ceb63e443cfa04dc4de39ae4e769768f29cdfba

See more details on using hashes here.

Provenance

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