Path: blob/master/ invest-robot-contest_TinkoffBotTwitch-main/venv/lib/python3.8/site-packages/tinkoff/invest/logging.py
7826 views
import logging1from collections import namedtuple2from contextvars import ContextVar3from typing import Any, Optional45from .constants import (6MESSAGE,7X_RATELIMIT_LIMIT,8X_RATELIMIT_REMAINING,9X_RATELIMIT_RESET,10X_TRACKING_ID,11)1213__all__ = (14"get_current_tracking_id",15"get_tracking_id_from_call",16"get_tracking_id_from_coro",17"get_metadata_from_call",18"get_metadata_from_aio_error",19"log_request",20"log_error",21)2223logger = logging.getLogger(__name__)2425_TRACKING_ID: ContextVar[Optional[str]] = ContextVar("tracking_id", default=None)26Metadata = namedtuple(27"Metadata",28(29"tracking_id",30"ratelimit_limit",31"ratelimit_remaining",32"ratelimit_reset",33"message",34),35)363738def get_current_tracking_id() -> Optional[str]:39return _TRACKING_ID.get() or None404142def log_request(tracking_id: Optional[str], name: str) -> None:43_TRACKING_ID.set(tracking_id)44logger.info("%s %s", tracking_id, name)454647def log_error(tracking_id: Optional[str], name: str, text: str) -> None:48_TRACKING_ID.set(tracking_id)49logger.error("%s %s %s", tracking_id, name, text)505152def get_tracking_id_from_call(call: Any) -> Optional[str]:53metadata = call.initial_metadata() or call.trailing_metadata()54for item in metadata:55if item.key == X_TRACKING_ID:56return item.value57return None585960async def get_tracking_id_from_coro(coro: Any) -> Optional[str]:61metadata = await coro.initial_metadata() or await coro.trailing_metadata()62for key, value in metadata:63if key == X_TRACKING_ID:64return value65return None666768def get_metadata_from_call(call: Any) -> Optional[Metadata]:69metadata = call.initial_metadata() or call.trailing_metadata()70tracking_id = None71ratelimit_limit = None72ratelimit_remaining = None73ratelimit_reset = None74message = None75for item in metadata:76if item.key == X_TRACKING_ID:77tracking_id = item.value78elif item.key == X_RATELIMIT_LIMIT:79ratelimit_limit = item.value80elif item.key == X_RATELIMIT_REMAINING:81ratelimit_remaining = int(item.value)82elif item.key == X_RATELIMIT_RESET:83ratelimit_reset = int(item.value)84elif item.key == MESSAGE:85message = item.value86if not any(87(tracking_id, ratelimit_limit, ratelimit_remaining, ratelimit_reset, message)88):89return None90return Metadata(91tracking_id, ratelimit_limit, ratelimit_remaining, ratelimit_reset, message92)939495def get_metadata_from_aio_error(err: Any) -> Optional[Metadata]:96metadata = err.initial_metadata() or err.trailing_metadata()97tracking_id = None98ratelimit_limit = None99ratelimit_remaining = None100ratelimit_reset = None101message = None102for key, value in metadata:103if key == X_TRACKING_ID:104tracking_id = value105elif key == X_RATELIMIT_LIMIT:106ratelimit_limit = value107elif key == X_RATELIMIT_REMAINING:108ratelimit_remaining = int(value)109elif key == X_RATELIMIT_RESET:110ratelimit_reset = int(value)111elif key == MESSAGE:112message = value113if not any(114(tracking_id, ratelimit_limit, ratelimit_remaining, ratelimit_reset, message)115):116return None117return Metadata(118tracking_id, ratelimit_limit, ratelimit_remaining, ratelimit_reset, message119)120121122