windy-drops-spec
Python bindings (Pydantic v2 models + Literal types) for the windy.drop.v1 manifest format.
Generated from schemas/windy.drop.v1.json — the source of truth.
Install
Not published yet. This package is not on PyPI as of 2026-08-10; the command below is what the install will be once it ships. Until then, run the CLI from a checkout of
sneakyfree/windy-drops.
pip install windy-drops-spec
# or
uv add windy-drops-spec
Usage
from windy_drops_spec import DropManifest, DROP_TYPES
manifest = DropManifest.model_validate({
"schema": "windy.drop.v1",
"id": "kit-oc5-echo-hq",
"name": "Echo HQ",
"type": "control-panel-template",
"version": "1.0.0",
"author": [{"name": "Kit OC5", "callsign": "Echo"}],
"license": "MIT",
})
assert manifest.id == "kit-oc5-echo-hq"
assert manifest.type in DROP_TYPES
Exports
| Export | Kind | Purpose |
|---|---|---|
DropManifest |
Pydantic v2 BaseModel | Runtime validation of any drop manifest |
DROP_TYPES |
tuple | 6 v1 reserved drop types |
DropType |
Literal | Static type for drop types |
PRICING_TYPES |
tuple | 4 pricing types (free / tip-jar / paid / subscription) |
PricingType |
Literal | Static type |
INTEGRITY_BANDS |
tuple | Eternitas integrity bands |
IntegrityBand |
Literal | Static type |
CLEARANCE_LEVELS |
tuple | Eternitas clearance levels |
ClearanceLevel |
Literal | Static type |
Regenerating
The src/windy_drops_spec/_generated.py file is GENERATED from schemas/windy.drop.v1.json. Don't hand-edit.
# Regenerate (datamodel-code-generator is version-pinned — its output
# format drifts across releases, which would fail the CI staleness check)
uvx --with 'datamodel-code-generator==0.70.0' python codegen.py
# Build wheel + sdist
uv build
# Run tests
uv pip install -e .[test] && pytest
CI re-runs codegen.py on every PR and fails if the generated file is stale:
uvx --with 'datamodel-code-generator==0.70.0' python codegen.py
git diff --exit-code -- src/windy_drops_spec/_generated.py
Known limitations (intentional, aligned with windy-drops-artifact-spec)
Both bindings enforce the schema's universal fields, drop-type enum, i18n shape, signature structure, and per-field constraints (length, pattern, enum, min/max). They do NOT enforce JSON Schema if/then dependent constraints (notably "paid pricing requires amount_cents + currency"). That class of validation is enforced server-side at the registry layer (WD-18) per ADR-053. Both bindings are intentionally aligned in what they verify so a manifest accepted by one is accepted by the other (per WD-11 conformance).
Strand reference
Owned by strand WD-2 in docs/DNA_STRAND_MASTER_PLAN.md. Paired with WD-1 (TypeScript Zod bindings on npm as windy-drops-artifact-spec). Cross-binding byte-identity is enforced by WD-11 conformance harness.
License
MIT
Release files for windy-drops-spec 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| windy_drops_spec-0.1.0.tar.gz | 7.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| windy_drops_spec-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.1 kB
Release files / windy_drops_spec-0.1.0.tar.gz
| Download URL | windy_drops_spec-0.1.0.tar.gz |
|---|---|
| Size | 7.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ec7eb57e409b94c2d9d71afbf53d4c864e1e5915201cd8cbd629c0e3ca4274a3
|
|
BLAKE2b-256 checksum How to use checksums |
2461de6bf4d4989e4c209c53c2ec70ff3898c943f80a7bb801a66b95effa946d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / windy_drops_spec-0.1.0-py3-none-any.whl
| Download URL | windy_drops_spec-0.1.0-py3-none-any.whl |
|---|---|
| Size | 8.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7b37b4871210c5def2e0eb340b5eed3531bb118635c52483bf9d9fb8d8a99f3a
|
|
BLAKE2b-256 checksum How to use checksums |
5fb29b998c7081bbf67ba204fb3f3cc6b03042cb498a5e82f1639a1450c23e33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|