Source code for aioyookassa.core.utils
import datetime
import uuid
from typing import Any, Dict, List, Optional, Type, TypeVar, Union
from pydantic import BaseModel
T = TypeVar("T")
[docs]
def generate_idempotence_key() -> str:
"""
Generate a unique idempotence key for requests.
:returns: UUID string.
:rtype: str
:seealso: https://yookassa.ru/developers/api/idempotence/
"""
return str(uuid.uuid4())
[docs]
def normalize_params(
params: Union[BaseModel, dict, None], params_class: Optional[Type[BaseModel]] = None
) -> dict:
"""
Normalize params to dictionary.
:param params: Parameters as Pydantic model, dict, or None.
:param params_class: Optional Pydantic model class for validation.
:returns: Dictionary of parameters.
"""
if params is None:
return {}
if isinstance(params, dict):
if params_class:
return params_class.model_validate(params).model_dump(exclude_none=True)
return params
# params is BaseModel at this point due to type annotation
return params.model_dump(exclude_none=True)
[docs]
def remove_none_values(data: Dict[str, Any]) -> Dict[str, Any]:
"""
Remove None values from dictionary.
This utility function removes all keys with None values from a dictionary,
which is commonly needed when building API request parameters.
:param data: Dictionary to clean.
:returns: Dictionary without None values.
:example:
>>> remove_none_values({"a": 1, "b": None, "c": "value"})
{"a": 1, "c": "value"}
"""
return {k: v for k, v in data.items() if v is not None}