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

Uploaded CPython 3.13+Windows x86-64

panproto-0.33.0-cp313-abi3-manylinux_2_28_x86_64.whl (7.2 MB view details)

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

panproto-0.33.0-cp313-abi3-manylinux_2_28_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

panproto-0.33.0-cp313-abi3-macosx_11_0_arm64.whl (6.5 MB view details)

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.33.0-cp313-abi3-macosx_10_12_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.13+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: panproto-0.33.0-cp313-abi3-win_amd64.whl
  • Upload date:
  • Size: 5.5 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.33.0-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 546bc7df067045684910f70b1cf877bbb78a94d296bef8da78f726eb82af19a3
MD5 b40f11ce1dee83c15377c63855e23863
BLAKE2b-256 6460d6ca913e801802d58ccc08533af2f316fee63250c012f97d2a8d8c0486d0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.33.0-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bced3aa9a26d3b06e2e7a98e6bc99c0d8c1227cf8688aa05f2ae6733fa7fd48d
MD5 f3c95ac226cc5446407fafcd1c680caa
BLAKE2b-256 23c1ed2182a60e635c727504b9b7bffad2d101f92dc58f57a943c5463ba224a4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.33.0-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 78eae4d196d47531d205bb5de7c1184ad6121889189b83067b914cbf25245b08
MD5 2f72ee9b95d2585396021b1cc0a5539c
BLAKE2b-256 f445683651a5c0561988a1dc6dc8beacda9ba71edd5a5c9a0fa95fc0a29c8b0c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.33.0-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ab5b711a890f89b1dccdff276e5a1328d13432abca5f94f132df39d7a408ef3f
MD5 01b37a74d13fad8d7cb3735db78cc254
BLAKE2b-256 66905db17f6bfc71e875aa24179ab3a8a2aa3684e3e0f4d3bca2efd31757cc59

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.33.0-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8b49a146c4bb9d4633b8aced5fe1f7e795020ca50832a12c757dcf1e7bebf014
MD5 beb2fd7dafd6f8fbe61f186796179029
BLAKE2b-256 bc4233fb33a9bc8edb5dca0eb80b69445c01adee86957e53f6fd1365793479da

See more details on using hashes here.

Provenance

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