Pyvider Cty Package - Core data types and serialization.
Project description
🐍🏗️ pyvider.cty
⚠️ PREVIEW RELEASE ⚠️
This is a preview release of pyvider.cty. While the core functionality is complete and well-tested, this release is intended for early adopters and feedback gathering. Please report any issues or suggestions.
Overview
pyvider.cty is a pure-Python implementation of the go-cty type system, providing strong type validation and serialization capabilities for configuration data. It's designed to work seamlessly with Terraform providers and other HashiCorp ecosystem tools.
Features
- 🎯 Complete Type System: Primitives, collections, and structural types.
- 🔄 Cross-Language Compatibility: Interoperates with go-cty via JSON and MessagePack.
- 🛡️ Type Safety: Strong validation at value creation.
- 🏷️ Marks System: Attach metadata without modifying values.
- 🗺️ Path Navigation: Type-safe access to nested data.
- ⚡ Full Standard Library: A comprehensive suite of functions for data manipulation.
Installation
uv add pyvider-cty
Quick Start
from pyvider.cty import CtyObject, CtyString, CtyNumber, CtyList
from pyvider.cty.exceptions import CtyValidationError
# 1. Define a type schema for a user profile.
# 'age' is an optional attribute.
user_type = CtyObject(
attribute_types={
"name": CtyString(),
"age": CtyNumber(),
"hobbies": CtyList(element_type=CtyString())
},
optional_attributes={"age"}
)
# 2. Create raw Python data that matches the schema.
user_data = {
"name": "Alice",
"hobbies": ["reading", "hiking"]
}
# 3. Validate the data. This returns an immutable CtyValue.
try:
user_val = user_type.validate(user_data)
print("✅ Validation successful!")
# 4. Access data from the CtyValue.
# Accessing attributes returns another CtyValue. Use .raw_value to get the Python type.
print(f"Name: {user_val['name'].raw_value}")
# The optional 'age' attribute is present but is a null CtyValue.
print(f"Age: {user_val['age'].raw_value} (Is Null: {user_val['age'].is_null})")
print("Hobbies:")
for hobby_val in user_val['hobbies']:
print(f"- {hobby_val.raw_value}")
except CtyValidationError as e:
print(f"❌ Validation failed: {e}")
Documentation
The complete user guide can be found in the docs/ directory, starting with the index.
Known Limitations
- Python 3.13+ Required: Due to advanced type features used.
- Performance: The library is not yet optimized for performance-critical applications involving very large or deeply nested data structures. Performance is reasonable for typical use cases.
Contributing
We welcome contributions! Please see our Contributing Guidelines for details.
License
Apache License 2.0. See LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyvider_cty-0.0.113.tar.gz.
File metadata
- Download URL: pyvider_cty-0.0.113.tar.gz
- Upload date:
- Size: 49.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60fdf9910c7b591e684b94654aa6e5e2dc43d56559e701c56db8ed7bc208b594
|
|
| MD5 |
fe0a82431abf7ed934f94fab115a80a2
|
|
| BLAKE2b-256 |
a5770883fbd199b91d8909b10cfb68c8e0326be2cc571b44881c8af58340c3dc
|
File details
Details for the file pyvider_cty-0.0.113-py3-none-any.whl.
File metadata
- Download URL: pyvider_cty-0.0.113-py3-none-any.whl
- Upload date:
- Size: 65.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16da333e99612cb5b72be9cb9ce6318cf5c170931fff449e4a15bd5ef7ef4b95
|
|
| MD5 |
418d9fbf915b65b997aeb765f9833a93
|
|
| BLAKE2b-256 |
9577dd9c0bf4df1663fe8320d861076ad810b1384ba92f055d7a29c2dcc22716
|