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

Uploaded CPython 3.13+Windows x86-64

panproto-0.38.0-cp313-abi3-manylinux_2_28_x86_64.whl (7.4 MB view details)

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

panproto-0.38.0-cp313-abi3-manylinux_2_28_aarch64.whl (7.2 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

panproto-0.38.0-cp313-abi3-macosx_11_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.38.0-cp313-abi3-macosx_10_12_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.13+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: panproto-0.38.0-cp313-abi3-win_amd64.whl
  • Upload date:
  • Size: 5.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.38.0-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f1414e4fc1b678827e480b6f2c057161c55f5709ee6d75ebf688c8923acf9ad2
MD5 8c8729d736fa16816a42873ee3fe5a9b
BLAKE2b-256 2bbfbbc403952115ad939b16afdd24240cb036436e464354ba5ca9ff7c52c153

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.38.0-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ef0a895c7f056dfb4ae45df55a6ecef4daf114b248fe23123471e8aa2ccb2b98
MD5 9a1a86c5d969fcc7f1c1ea54bb71ae1a
BLAKE2b-256 c1c6d7ef98699c32e3dc9d5893ed35d855896f9cdf65fd039fae8e39d5f71200

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.38.0-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 101bbd7ff425143f349abe75f9b7a1ef364d3d6996d96b4d812b70da8d0b3c19
MD5 9888c5baa4a54161c204419011897166
BLAKE2b-256 8e3e2f2c612c792b1f1fb5c4f135c07866b9e1ae0d608a07b1db8caee99be3fe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.38.0-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 413928aa1c3cc76808dde3bd8ad325e0e0e6fab4efe32431454167f4109ddd7a
MD5 b7e0055be39ff5615e556cb173ccc6b1
BLAKE2b-256 f65dcef452a7cb168d34e48915fd3bbb3e41fdd8faf00b57192de2367fcdefe9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.38.0-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2f544a17ed3d5d81d42e56ae70f19ce6ef468c285a0dacc28cd7ccf52a7e089e
MD5 960e3fa946f8887244407341659e7c5d
BLAKE2b-256 f14e39b20a1a0831b4f8a67b213f260600ae5c42b3c7fa7f18912867332f21f7

See more details on using hashes here.

Provenance

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