|
| 1 | +""" |
| 2 | +Deprecation utilities for AgentOps SDK. |
| 3 | +""" |
| 4 | + |
| 5 | +import functools |
| 6 | +from typing import Set, Callable, Any |
| 7 | +from agentops.logging import logger |
| 8 | + |
| 9 | +# Track which deprecation warnings have been shown to avoid spam |
| 10 | +_shown_warnings: Set[str] = set() |
| 11 | + |
| 12 | + |
| 13 | +def deprecated(message: str): |
| 14 | + """ |
| 15 | + Decorator to mark functions as deprecated. |
| 16 | +
|
| 17 | + Args: |
| 18 | + message: Deprecation message to show |
| 19 | + """ |
| 20 | + |
| 21 | + def decorator(func: Callable) -> Callable: |
| 22 | + @functools.wraps(func) |
| 23 | + def wrapper(*args: Any, **kwargs: Any) -> Any: |
| 24 | + warning_key = f"{func.__module__}.{func.__name__}" |
| 25 | + if warning_key not in _shown_warnings: |
| 26 | + logger.warning(f"{func.__name__}() is deprecated and will be removed in v4 in the future. {message}") |
| 27 | + _shown_warnings.add(warning_key) |
| 28 | + return func(*args, **kwargs) |
| 29 | + |
| 30 | + return wrapper |
| 31 | + |
| 32 | + return decorator |
| 33 | + |
| 34 | + |
| 35 | +def warn_deprecated_param(param_name: str, replacement: str = None): |
| 36 | + """ |
| 37 | + Warn about deprecated parameter usage. |
| 38 | +
|
| 39 | + Args: |
| 40 | + param_name: Name of the deprecated parameter |
| 41 | + replacement: Suggested replacement parameter |
| 42 | + """ |
| 43 | + warning_key = f"param.{param_name}" |
| 44 | + if warning_key not in _shown_warnings: |
| 45 | + if replacement: |
| 46 | + message = f"Parameter '{param_name}' is deprecated and will be removed in v4 in the future. Use '{replacement}' instead." |
| 47 | + else: |
| 48 | + message = f"Parameter '{param_name}' is deprecated and will be removed in v4 in the future." |
| 49 | + logger.warning(message) |
| 50 | + _shown_warnings.add(warning_key) |
0 commit comments