Valid8r offers a clean and composable approach to input validation in Python. Utilizing the Maybe monad for error handling, it eliminates the complexity of traditional try-except blocks, providing clear and structured feedback for input errors. Ideal for developers seeking type-safe parsing and easy integrations.
Valid8r is a powerful Python library designed to facilitate clean and composable input validation using functional programming patterns. By employing the Maybe monad for error handling, Valid8r enhances input validation, enabling developers to avoid cumbersome try-except blocks and boolean validation chains. Instead, it provides elegant and type-safe parsers that clearly communicate errors, making validation processes more efficient and user-friendly.
Key Features
- Type-Safe Parsing: Each parser returns a
Maybe[T]type, which indicates success or failure distinctly, leading to explicit and composable error handling. - Rich Structured Results: Network parsers yield dataclasses containing parsed components, eliminating the need for manual parsing of URLs or emails.
- Chainable Validators: Utilize operators like
&(and),|(or), and~(not) to craft complex validation logic effortlessly. - Framework Integrations: Valid8r includes built-in support for Pydantic and optional integration for Click, providing versatility in numerous applications.
- Interactive Prompts: The library features built-in prompting functionalities with automatic retries, enhancing user interaction during input collection.
Parsing and Validation Examples
Basic Parsing
from valid8r import parsers
from valid8r.core.maybe import Success, Failure
# Parse integers with automatic error handling
match parsers.parse_int("42"):
case Success(value):
print(f"Parsed: {value}") # Parsed: 42
case Failure(error):
print(f"Error: {error}")
Validation with Combinators
from valid8r import validators
# Combine validators using operators
age_validator = validators.minimum(0) & validators.maximum(120)
result = age_validator(42)
assert result.is_success()
Interactive Prompting
from valid8r import prompt, parsers, validators
# Prompt with validation and automatic retry
email = prompt.ask(
"Email address: ",
parser=parsers.parse_email,
retry=2 # Retry twice on invalid input
)
Environment Variable Parsing
Load and validate configurations from environment variables:
from valid8r.integrations.env import EnvSchema, EnvField, load_env_config
from valid8r import parsers, validators
schema = EnvSchema(fields={
'port': EnvField(
parser=lambda x: parsers.parse_int(x).bind(validators.between(1024, 65535)),
default=8080
),
'database_url': EnvField(parser=parsers.parse_str, required=True),
})
result = load_env_config(schema, prefix='APP_')
Documentation
Complete documentation and additional examples can be found on the Valid8r Documentation Site.
Community and Contribution
Valid8r welcome contributions and encourages community interaction. Join discussions on GitHub to ask questions, suggest features, or share implementations.
Explore the Contributing.md for detailed contribution guidelines and the ROADMAP.md for future plans and updates.
Valid8r is actively maintained and continues to evolve, with ongoing developments towards enhancing input validation capabilities and functionalities.
No comments yet.
Sign in to be the first to comment.