Source code for trackmania.ad

import logging
from contextlib import suppress

from typing_extensions import Self

from trackmania.errors import TMIOException

from ._util import _regex_it
from .api import _APIClient
from .base import AdObject
from .config import get_from_cache, set_in_cache
from .constants import _TMIO

_log = logging.getLogger(__name__)

__all__ = ("Ad",)


async def _get_ad_list() -> list[dict]:
    ad_list = []

    _log.debug("Getting all ads")
    ads = get_from_cache("ads")
    if ads is not None:
        for ad_dict in ads.get("ads"):
            ad_list.append(ad_dict)
        return ad_list

    api_client = _APIClient()
    all_ads = await api_client.get(_TMIO.build([_TMIO.TABS.ADS]))
    await api_client.close()

    with suppress(KeyError, TypeError):
        raise TMIOException(all_ads["error"])

    set_in_cache("ads", all_ads, ex=43200)

    for ad_dict in all_ads.get("ads"):
        ad_list.append(ad_dict)

    return ad_list