A comprehensive collection of Python decorators and utility functions to enhance your development workflow.
pip install python-wrapPythonWrap provides a rich set of decorators that can be used either as decorators or as standalone functions:
@timing: Measure function execution time@profile: Profile function performance@benchmark: Compare execution times@measure_memory: Track memory usage
@retry: Retry failed operations@retry_on_exception: Retry on specific exceptions@timeout: Set execution time limits@revert_on_failure: Automatic state rollback on failure
@memoize: Cache function results@cache: Time-based result caching@once: Single execution guarantee
@log_args: Log function arguments@log_return: Log return values@trace: Log call stack traces@audit: Comprehensive function call auditing
@check_type: Runtime type checking@validate_args: Custom argument validation
@deprecate: Mark deprecated functions@no_debug: Disable debug output@mock_data: Easy data mocking@rate_limit: Control execution frequency
@run_in_thread: Asynchronous execution@transactional: Atomic operations
frompython_wrapimporttiming, retry, memoize# As a decorator@timingdefslow_operation(): time.sleep(1) return"Done"# As a decorator with parameters@retry(max_attempts=3, delay=1.0)defunreliable_operation(): returnapi_call() # Simple decorator@memoizedeffibonacci(n): ifn<2: returnnreturnfibonacci(n-1) +fibonacci(n-2)frompython_wrapimporttiming, retry, memoize# Using timing as a functiondefslow_operation(): time.sleep(1) return"Done"result=timing(slow_operation)() # Using retry as a functiondefunreliable_operation(): returnapi_call() result=retry(unreliable_operation, max_attempts=3, delay=1.0)() # Using memoize as a functiondeffibonacci(n): ifn<2: returnnreturnfibonacci(n-1) +fibonacci(n-2) memoized_fib=memoize(fibonacci) result=memoized_fib(10)frompython_wrapimportvalidate_args, check_type, timeout# As decorators@validate_args(x=lambdax: x>0, y=lambday: y<100)defprocess_numbers(x, y): returnx+y@check_type(name=str, age=int)defcreate_user(name, age): return{"name": name, "age": age} # As functionsdeflong_running_task(): process_large_dataset() timed_task=timeout(5)(long_running_task) result=timed_task()frompython_wrapimporttiming, retry, log_args# As decorators@timing@retry(max_attempts=3)@log_argsdefcomplex_operation(x, y): returnexpensive_calculation(x, y) # As functionsdefcomplex_operation(x, y): returnexpensive_calculation(x, y) # Compose functionsmonitored_op=timing(retry(log_args(complex_operation), max_attempts=3)) result=monitored_op(1, 2)Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.