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

Uploaded CPython 3.13+Windows x86-64

panproto-0.36.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.36.0-cp313-abi3-manylinux_2_28_aarch64.whl (7.1 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

panproto-0.36.0-cp313-abi3-macosx_11_0_arm64.whl (6.6 MB view details)

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.36.0-cp313-abi3-macosx_10_12_x86_64.whl (6.4 MB view details)

Uploaded CPython 3.13+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: panproto-0.36.0-cp313-abi3-win_amd64.whl
  • Upload date:
  • Size: 5.6 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.36.0-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 102523db198533452d2321daa2ed5a91e00ac837ef6ade4223eacbbb2fb7c54b
MD5 f08647c06c5e001497978a3cad9f38f8
BLAKE2b-256 b7f096560695be9ffce2fbb4187c26c58d3ab06c71a1c486ddad369da68f2b79

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.36.0-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 be4e2d6ef15ea5575d5add8f9ac396605722f4f6339aa88c1bb9594e57b32dc1
MD5 7fdbcd86333478584b069bf8deed1e29
BLAKE2b-256 72f7822c3a7baae0d7be1db5ce3fbf09302e8370ab370c243054f0214044ca48

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.36.0-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 db5478b28a4782730f6fcb0b5d4df9068344fddbf9370f388f7a52b04d4f6ca2
MD5 471fc849671eb80ac5e0187f52c8fb8a
BLAKE2b-256 8b0dfb6e421c67190dfb18cb2d42109a10cc601378819761d986ce1b029e572b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.36.0-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b687fd0d1daef512fa4840934480170cca99cd47b11f0d3edffaf1a0181edcf0
MD5 d0797e4103a92df7740f406373f9bae2
BLAKE2b-256 8a9efeb0ff10e8cf7d120852ee81f4698e1c74190802615bfe0876127f36a6ac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.36.0-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9e1a2fff6064d5304c245e7748c1c0d6649d8d1e8d167eeabe9eee23f61628ae
MD5 7759847330b39b18906efe6e4a51ff52
BLAKE2b-256 080ca5e6438513f4d6862023769cebb024e907dde37b5770e2cba063607d2893

See more details on using hashes here.

Provenance

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