Skip to main content

reop

reop is a lightweight Python library inspired by Rust's Result and Option patterns. The name combines "Result" and "Option", representing the two core concepts of the library.

Why Use reop?

The Problem

Python's try/except for error handling and the frequent use of None as a placeholder for missing values are flexible, but they often lack clarity:

Implicit failures: A function might fail, but this is not explicit in its return type. Unclear intent: None values can propagate silently, making debugging harder. Ad-hoc error handling: Handling errors consistently across large codebases is challenging.

The Solution

With reop, you can leverage Rust-inspired patterns for safer and clearer error handling:

Explicit Error Handling: Functions return Result[ValueType, ErrorType] to indicate success or failure explicitly. No unexpected exceptions—errors are part of the function's return type. Structured Value Management: Use Option to represent values that may or may not exist. No more unchecked None values—intent is always explicit. Composable and Readable Code: Chain operations on Result and Option objects with methods like map, and_then, and or_else.

Installation

pip install reop

Usage

Using Result for Explicit Error Handling

from reop import Result, result_wrapper

@result_wrapper
def divide(a: int, b: int) -> float:
    return a / b

# Example 1: Successful division
result = divide(10, 2)
if result.is_ok:
    print(f"Success: {result.unwrap()}")  # Output: Success: 5.0

# Example 2: Division by zero
result = divide(10, 0)
if result.is_err:
    print(f"Error: {result.unwrap_err()}")  # Output: Error: division by zero

Using Option for Optional Values

from reop import Option, option_wrapper

@option_wrapper
def find_value(key: str, data: dict) -> Optional[int]:
    return data.get(key)

# Example 1: Key exists
option = find_value("a", {"a": 42})
if option.is_some:
    print(f"Found: {option.unwrap()}")  # Output: Found: 42

# Example 2: Key does not exist
option = find_value("b", {"a": 42})
print(option.unwrap_or(0))  # Output: 0

Key Benefits of reop

Improved Clarity: Make function intentions and possible failure cases explicit. Safer Code: Avoid unexpected None values or unhandled exceptions. Rust-inspired: Adopt proven patterns from Rust for Python programming. Composable Methods: Chain operations for clean and concise workflows.

Metadata

Release files for reop 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for reop 1.0.0
File Size Uploaded
reop-1.0.0.tar.gz 2.3 kB Details

Release files / reop-1.0.0.tar.gz

Download URL reop-1.0.0.tar.gz
Size 2.3 kB
Tags Source
SHA-256 checksum
How to use checksums
03e16357784aa4a943b070a7a3469c0ed7d48b291db0cc0044e399d2c5f5b18c
BLAKE2b-256 checksum
How to use checksums
d26a5d92e43c8f02fbae9c8ba20d0ddb6381d9f8122b0418b566478b12526cad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.11.10

Release history Release notifications | RSS feed

This release

1.0.0 This release

1 release file

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