Skip to main content

Schema migration engine grounded in generalized algebraic theories

Project description

panproto

PyPI Python MIT

Native Python bindings for panproto, a schema migration engine grounded in generalized algebraic theories. Built with PyO3 for zero-overhead access to the Rust core.

Requires Python 3.13+.

Installation

pip install panproto

Quick start

import panproto as pp

# List all 76+ built-in protocols
protocols = pp.list_builtin_protocols()

# Build a schema using the fluent builder
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()

# Auto-generate a lens between two schema versions
lens = pp.auto_generate_lens(old_schema, new_schema, protocol)
view, complement = lens.get(instance)
restored = lens.put(view, complement)

# Diff two schemas and classify changes
diff = pp.diff_schemas(old_schema, new_schema)
report = pp.diff_and_classify(old_schema, new_schema, protocol)

# Build and compile migrations
mig_builder = pp.MigrationBuilder()
mig_builder.map_vertex("post:body.text", "post:body.content")
migration = mig_builder.build()
compiled = pp.compile_migration(old_schema, new_schema, migration)

# Parse and emit data across protocols
io = pp.IoRegistry()
schema = io.parse_schema("json-schema", json_schema_str)
output = io.emit_schema("json-schema", schema)

# GAT operations
theory = pp.create_theory("MyTheory", sorts, operations, equations)
colimit = pp.colimit_theories(theory_a, theory_b, shared)

# Schematic version control
repo = pp.VcsRepository.init("/path/to/repo")
repo.add(schema)
repo.commit("add post schema", "author")

API overview

Schema and protocols

Function / Class Description
list_builtin_protocols() List all 76+ built-in protocol names
get_builtin_protocol(name) Get a protocol definition by name
define_protocol(...) Define a custom protocol
SchemaBuilder(protocol) Fluent schema construction (vertex, edge, constraint, hyper_edge)
Schema Immutable schema with vertex/edge/constraint access
Protocol Protocol definition with edge rules and feature flags

Migration and lenses

Function / Class Description
auto_generate_lens(src, tgt, protocol) Auto-generate a bidirectional lens between schemas
Lens Lens with get(instance) and put(view, complement)
Complement Data discarded during get, needed by put
MigrationBuilder Build migrations with vertex/edge mappings
compile_migration(src, tgt, migration) Compile a migration for application
compose_migrations(m1, m2) Compose two migrations sequentially
check_existence(src, tgt, migration, protocol) Validate migration existence conditions

Breaking change detection

Function / Class Description
diff_schemas(old, new) Structural diff between two schemas
diff_and_classify(old, new, protocol) Diff with breaking/non-breaking classification
SchemaDiff Diff result with added/removed/changed elements
CompatReport Compatibility report with breaking change details

Instance I/O

Function / Class Description
Instance W-type instance with from_json, to_json, validate
IoRegistry Parse/emit schemas and instances across all protocols

GAT engine

Function / Class Description
create_theory(name, sorts, ops, eqs) Create a GAT theory
Theory Theory with sort/operation/equation access
colimit_theories(t1, t2, shared) Compute theory pushout
check_morphism(morphism, domain, codomain) Verify a theory morphism
Model Model of a theory with carrier sets

Version control

Function / Class Description
VcsRepository.init(path) Initialize a panproto repository
VcsRepository.open(path) Open an existing repository
repo.add(schema) Stage a schema
repo.commit(message, author) Create a commit
repo.branch(name) Create a branch
repo.merge(branch, author) Merge a branch

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.27.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl (6.3 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

panproto-0.27.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl (6.3 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

panproto-0.27.3-cp313-abi3-win_amd64.whl (4.7 MB view details)

Uploaded CPython 3.13+Windows x86-64

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

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13+macOS 11.0+ ARM64

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

Uploaded CPython 3.13+macOS 10.12+ x86-64

panproto-0.27.3-cp311-cp311-manylinux_2_28_x86_64.whl (6.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

File details

Details for the file panproto-0.27.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for panproto-0.27.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ff4ca65e9d79bdd356bbea8561f719432008269bb349f5f90223e9314452323e
MD5 c63ee5eea9231ed358e6b6128c3f6fe4
BLAKE2b-256 2cdfe19525a1c01a3a0f5c9495af5daf9e5a1a0754fea41258536f6667e4a937

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.27.3-pp310-pypy310_pp73-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.27.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for panproto-0.27.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bb5eb53f4522c34ef92eb708c6f82c8d2afee67b9a9293ce2db8cf32dde8e30c
MD5 11c77562cc6d57c013d4556320d8c6f6
BLAKE2b-256 2563fa202b93c710ea4e839d4d386f2cb1f61790dcd1a67420d129863c267a4d

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.27.3-pp39-pypy39_pp73-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.27.3-cp313-abi3-win_amd64.whl.

File metadata

  • Download URL: panproto-0.27.3-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.27.3-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d3064f85a8e9a8322ed083254965f6fbf68768c44431c5fe92651d25b29f625b
MD5 5d39b90157172dccef40d9f05dc4f23d
BLAKE2b-256 03c7f5a60933dc79bf57acdd57f2877264fd4ca07293adeee5463df8810163c9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.27.3-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 32c0bd4df031020aabc6c4ca8c11f042e4d5d19470d1f519f2e2dffe6c737683
MD5 2d822501eb1b42ec43332f08346dcba2
BLAKE2b-256 5275b822f4c556b1860220ac4557094439a3617428f2461f315867dc96deff8b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.27.3-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9807f457419c52892e90d3a04e5b0e65d134e04b9efb4ffd7b101def1c6ed7ef
MD5 39a34461b2117b6984ed9899782a3abf
BLAKE2b-256 be63556febe1e4150bda75742be778e0fc7bfba6b648d938203320d8cdf5620a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.27.3-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3c9a00a2cf7e4f7f659941653af9c3beb9de887108b37b837f5846146aa4fa86
MD5 bd59243da544398ac05f68bf094d5658
BLAKE2b-256 fe19fd5bf0d105fa40ed9b9e11a2e3be8bc6e4fd9371cfa29317a087380a932a

See more details on using hashes here.

Provenance

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

File details

Details for the file panproto-0.27.3-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for panproto-0.27.3-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 934789437579e9456a551ddc6ddae152423d7ea3e6924a65a26992c985efaa66
MD5 9835a72d95b267a23924c60b59ea87b8
BLAKE2b-256 c7b75c86cf1306f9d62f6f68ca92b383f0135b22acc46462f6889448644fab23

See more details on using hashes here.

Provenance

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

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