Skip to main content

scai-state

SCAI state management library for database migrations.

Installation

pip install scai-state

Usage

from scai_state import CodeUnitRegistry
from scai_state.types import CodeUnit, SourceMetadata, TargetMetadata, ObjectType, Kind

# Initialize a new registry
registry = CodeUnitRegistry.init("/path/to/repo")

# Or open an existing registry
registry = CodeUnitRegistry.open("/path/to/existing/repo")

# Create a code unit
code_unit = CodeUnit(
    kind=Kind.databaseObject,
    source=SourceMetadata(
        objectType=ObjectType.table,
        database="RETAIL_DB",
        schema="dbo",
        name="Customer",
    ),
    target=TargetMetadata(
        objectType=ObjectType.table,
        database="RETAIL",
        schema="DBO",
        name="CUSTOMER",
    ),
)

# Returns the ID (auto-generated if not provided)
id = registry.create(code_unit)

# Load a code unit
cu = registry.load(id)

# List all code units (with optional filter)
results = registry.list("source.objectType = 'table'")

# Update specific fields
registry.update(id, {"planning.wave": 2})

# Delete a code unit
registry.delete(id)

Testing

Integration tests live in tests/ and cover the full Python -> Rust -> disk -> Rust -> Python round-trip:

Test file What it verifies
test_serialization.py FFI round-trip fidelity for all fields, Pydantic alias handling, extensions empty-map preservation
test_errors.py ScaiError.error_code contract across FFI (1001, 1003)
test_batch.py BatchResult wire format with partial failures (1004)
test_crud.py Full CRUD lifecycle, upsert deep-merge semantics
test_query.py find_by_object partial matching with exclude_unset

Run them from the repo root:

./scripts/run-tests.sh python

Or directly:

cd crates/scai-state-python
maturin develop
pytest tests/ -v

Building from Source

This package requires Rust and maturin to build:

# Install maturin
pip install maturin

# Build and install in development mode
cd crates/scai-state-python
maturin develop

License

Apache-2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

snowflake_code_unit_registry-0.8.71.tar.gz (210.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

snowflake_code_unit_registry-0.8.71-cp39-abi3-win_arm64.whl (6.9 MB view details)

Uploaded CPython 3.9+Windows ARM64

snowflake_code_unit_registry-0.8.71-cp39-abi3-win_amd64.whl (7.3 MB view details)

Uploaded CPython 3.9+Windows x86-64

snowflake_code_unit_registry-0.8.71-cp39-abi3-manylinux_2_38_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.38+ x86-64

snowflake_code_unit_registry-0.8.71-cp39-abi3-manylinux_2_38_aarch64.whl (7.2 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.38+ ARM64

snowflake_code_unit_registry-0.8.71-cp39-abi3-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

snowflake_code_unit_registry-0.8.71-cp39-abi3-macosx_10_12_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file snowflake_code_unit_registry-0.8.71.tar.gz.

File metadata

File hashes

Hashes for snowflake_code_unit_registry-0.8.71.tar.gz
Algorithm Hash digest
SHA256 278853dd1749d0a473bc71b1bbb2c2a54a34aa7a10b4f6fa52effa6e45e84283
MD5 85e89e415095d3300a6a1963a559206f
BLAKE2b-256 0bc54aa405f67fff608c0d7b1df359b25eea3adb9d940b19f06561ba06ea4c57

See more details on using hashes here.

File details

Details for the file snowflake_code_unit_registry-0.8.71-cp39-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for snowflake_code_unit_registry-0.8.71-cp39-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 e31efea754e5adf6fc863c70413df124b420e0a296345ceec82cd098291c4c13
MD5 1158e12203622597ea945c7e72270c29
BLAKE2b-256 5f095f1a24da9cd0737fbf98bb8b40d53c0ab99ec9b6410ee980bce0ff7d614e

See more details on using hashes here.

File details

Details for the file snowflake_code_unit_registry-0.8.71-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for snowflake_code_unit_registry-0.8.71-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6762b1d31c2d560468fd158442db238534c49f0d148677199cc85023069c78e2
MD5 0224b433f94f6c84ecef705cc726deac
BLAKE2b-256 b89afd6b3689602c731f16eb50335ffa35b0f1b3bb7da396a3b45110bb91b1b9

See more details on using hashes here.

File details

Details for the file snowflake_code_unit_registry-0.8.71-cp39-abi3-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for snowflake_code_unit_registry-0.8.71-cp39-abi3-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 2de75203dd8b2a851912b9659debf2d8b8a4c85a630d3561683b1d493419b726
MD5 c8a6455d0e2a3328986e03f581c30dc3
BLAKE2b-256 bfb45d8e4c020dae44e934fb4491ea82416e0fbd2cd6c6a721dce3c4449b736c

See more details on using hashes here.

File details

Details for the file snowflake_code_unit_registry-0.8.71-cp39-abi3-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for snowflake_code_unit_registry-0.8.71-cp39-abi3-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 d90166bf921435d473d1bff416549100c7297b8d0f0b518bf0171ecf26566df1
MD5 1e74ec2f63b10fb27d85c9222058bab2
BLAKE2b-256 4df620621cdeab05c059bce9053d9dccecd80091d427909ba1dc7ef80c0a599a

See more details on using hashes here.

File details

Details for the file snowflake_code_unit_registry-0.8.71-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for snowflake_code_unit_registry-0.8.71-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ca9fc9eb84049574d3f901ae103efb2cc8aade6d48b7d297505175b72822fdf3
MD5 8b3f6fd82fa8024fde0f7b5202b7f758
BLAKE2b-256 38854d3f704bce556fae3c13cf86c84047b2bce015174387319e9e7b099d368e

See more details on using hashes here.

File details

Details for the file snowflake_code_unit_registry-0.8.71-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for snowflake_code_unit_registry-0.8.71-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6770554dabcc25e64b49f3d982df89da9eb00590d54a5494d067431b414a450e
MD5 583090c04a6e91b5050114ec7360b1bf
BLAKE2b-256 ce0b4260f1a15f7e49ffb274ca63d6c8cf70c131d8f9f6ba4d5e4f1123586972

See more details on using hashes here.

Release history Release notifications | RSS feed

0.8.78

7 files

0.8.76

7 files

0.8.74

7 files

This release

0.8.71 This release

7 files

0.8.66

7 files

0.8.61

7 files

0.8.59

7 files

0.8.56

7 files

0.8.55

7 files

0.8.49

7 files

0.8.47

7 files

0.8.41

7 files

0.8.38

7 files

0.8.36

7 files

0.8.32

7 files

0.8.30

7 files

0.8.28

7 files

0.8.13

7 files

0.8.9

7 files

0.8.8

7 files

0.8.6

7 files

0.8.1

7 files

0.7.17

7 files

0.7.15

7 files

0.7.12

7 files

0.7.9

7 files

0.7.6

7 files

0.7.5

7 files

0.7.2

7 files

0.7.1

7 files

0.5.12

7 files

0.5.11

7 files

0.5.10

7 files

0.5.9

7 files

0.5.4

7 files

0.5.2

7 files

0.4.12

7 files

0.4.10

7 files

0.4.3

7 files

0.3.21

7 files

0.3.13

7 files

0.3.10

7 files

0.3.0

7 files

0.2.0

7 files

0.1.0

7 files

0.0.1

7 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page