diff --git a/examples/complex_project/utils.py b/examples/complex_project/utils.py new file mode 100644 index 0000000..6a8bd93 --- /dev/null +++ b/examples/complex_project/utils.py @@ -0,0 +1,57 @@ +"""Utility functions.""" + +from typing import List, TypeVar, Callable +import json + +T = TypeVar('T') + + +def validate_input(data: dict, required_fields: List[str]) -> bool: + """Validate that all required fields are present.""" + for field in required_fields: + if field not in data: + return False + return True + + +def parse_json_safe(json_string: str, default: T = None) -> T: + """Safely parse JSON string.""" + try: + return json.loads(json_string) + except (json.JSONDecodeError, TypeError): + return default + + +def retry_operation(func: Callable, max_retries: int = 3, delay: float = 1.0): + """Retry an operation with exponential backoff.""" + import time + + for attempt in range(max_retries): + try: + return func() + except Exception as e: + if attempt == max_retries - 1: + raise e + + time.sleep(delay * (2 ** attempt)) + + return None + + +class Logger: + """Simple logger utility.""" + + def __init__(self, name: str): + self.name = name + + def info(self, message: str) -> None: + """Log info message.""" + print(f"[INFO] [{self.name}] {message}") + + def error(self, message: str) -> None: + """Log error message.""" + print(f"[ERROR] [{self.name}] {message}") + + def debug(self, message: str) -> None: + """Log debug message.""" + print(f"[DEBUG] [{self.name}] {message}")