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

Uploaded CPython 3.13+Windows x86-64

panproto-0.30.1-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.1-cp313-abi3-manylinux_2_28_aarch64.whl (6.3 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.30.1-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.1-cp313-abi3-win_amd64.whl.

File metadata

  • Download URL: panproto-0.30.1-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.1-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 bb3005f9035759db114de2413c5f605f9a318039e7d96225bdde12f1561e982f
MD5 fc686320e7ccb2a49cccb295d4057c62
BLAKE2b-256 b80f26747caa2167c2a726dd58bf4c5fad4c17db34dbacefa6b5e1d35696af69

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.30.1-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3dc1fdca92d81ee9169b1a5e6293b76bd6bb28fe8d70d9bca7b51585583ca917
MD5 e2c3645007b60602379e6d03cb7d804a
BLAKE2b-256 fba194fea304cf0d6aff495f6105ab3d4e22abe0b1a0a474860cae434f24afd5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.30.1-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 01c287837f21674498d2c5732e4454ce8639904d105eab146e4761f3b740f0e1
MD5 858248041ed051e066d728db593b4c0f
BLAKE2b-256 858adbdb6e85aea794576b7d50454a1610ffe0cd1943b01a052858e24a09014b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.30.1-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b61f0d374a1d5cfa6bbe0f377eb4d7405ea035de213b2fe81b69b655f88104d
MD5 f3758cc62632e8979eb1653c3c908e26
BLAKE2b-256 8621b1c6f60a2ab677c5517e73dc024656da040139ace2ef40f25a65a7af4645

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.30.1-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0f5da4d1d4f125e5b5d6382fbb322f50a9bc77d1e07bdab27490ac677f8dca9c
MD5 a0daa275b7bc6e2bfdfc32d28b67a66a
BLAKE2b-256 8adf4632fbb38109fb087c98276af6e16e706f14b79c591194f037d414bfc2d4

See more details on using hashes here.

Provenance

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