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

Uploaded PyPymanylinux: glibc 2.28+ ARM64

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

Uploaded PyPymanylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13+Windows x86-64

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

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13+macOS 11.0+ ARM64

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

Uploaded CPython 3.13+macOS 10.12+ x86-64

panproto-0.26.0-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.26.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for panproto-0.26.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 da7ddb3db34e63e1dd596ddcbe636cbf941df4d0d2b9d0b41929d199d085a8d5
MD5 6d2218976ad1fea61f12bb7ac1af09cb
BLAKE2b-256 a35eda9d2ac2248c934182ffe8abe8fa6bfc22b61ab01fb4b10f34389b75d0b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.26.0-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.26.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for panproto-0.26.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 57782108b512370f39a527c7343ae131cbcbf6aea4d0266ef1e3b06ce672efc3
MD5 80bd3123692415376766b408fe8e044d
BLAKE2b-256 2b56a6ea6cecd0fdafe661ebfec8e439b030e588f0220cc94ca2431236316dc9

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.26.0-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.26.0-cp313-abi3-win_amd64.whl.

File metadata

  • Download URL: panproto-0.26.0-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.7

File hashes

Hashes for panproto-0.26.0-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c533a638a6988c5d9c0cff12aa0143ead8ce4810d2d2deb32848b9ecec761983
MD5 d16fe620961f2fb2cb364dcc350bbdfd
BLAKE2b-256 80a7293e941c7411ab0240dbb3e4efc77d3713b1579dc48f6ab9461d8ae5ef90

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.26.0-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d225a865bca17988d34bf35564674b01169a74d3a90bdf31dd26a9d82ff59c92
MD5 c185af4b573509e0e351983e3d7e30e4
BLAKE2b-256 2e153dbe723f54fe4f933ebd0dc7a23e7411c0857f679bfcba2c5206e80f3f92

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.26.0-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4fb1a2f8e22176e6255aa36c6e8ae0aa48a8c82adf059f3f5eecb84a2e31d3ff
MD5 66e5d123998695ca32a016d65176bdbd
BLAKE2b-256 c0c90842ebf82fb7b208b2fdf1d665eeff287cf238469d148b50fd9b2ff393ff

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for panproto-0.26.0-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 56e949855faca3c4318830bdfd808bf296198c464185bd2c00921c4153596cae
MD5 43dcb0a43c6290f544af26e056e41d3a
BLAKE2b-256 a70b56627e44381c1c2eef7e3a0a61aabc16f37011970ab22c1ae5b38b23b7d4

See more details on using hashes here.

Provenance

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

File details

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

File metadata

File hashes

Hashes for panproto-0.26.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b301f73454f4c0247f96df2413a5fdbc6058d7a994e0abbd0dbc86aa385cfac7
MD5 4df7aa75e080a11a0544d323abe804d5
BLAKE2b-256 cfee9df59fcef575d25b2b69e5494c8210b0eb9cca99d6487c5d5884f263319e

See more details on using hashes here.

Provenance

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