diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 3d1bf0a..54d28cb 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.11.2" + ".": "1.11.3" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fe0b4e..5d0576e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## 1.11.3 (2025-12-18) + +Full Changelog: [v1.11.2...v1.11.3](https://github.com/coingecko/coingecko-python/compare/v1.11.2...v1.11.3) + +### Bug Fixes + +* ensure streams are always closed ([e51d469](https://github.com/coingecko/coingecko-python/commit/e51d46991166ae87d5dadd827f803ce0f293ea88)) +* Remove incorrect comment ([12a638c](https://github.com/coingecko/coingecko-python/commit/12a638cc2b314240ea9c5ddf460bfab88542b797)) +* **types:** allow pyright to infer TypedDict types within SequenceNotStr ([dfe9c19](https://github.com/coingecko/coingecko-python/commit/dfe9c19b68627e99139837f8b00b2d35948e2e87)) +* use async_to_httpx_files in patch method ([6482e2b](https://github.com/coingecko/coingecko-python/commit/6482e2b102a82dbea5f8f6951af0ba0809d3b4b0)) + + +### Chores + +* add missing docstrings ([d90bf87](https://github.com/coingecko/coingecko-python/commit/d90bf87cc6149e32d10bbb81f5d12a97fbc14eb9)) +* **deps:** mypy 1.18.1 has a regression, pin to 1.17 ([4fb9fd2](https://github.com/coingecko/coingecko-python/commit/4fb9fd29b779f96b3fa57bba750afbcbcd70e06b)) +* **docs:** use environment variables for authentication in code snippets ([cd2478b](https://github.com/coingecko/coingecko-python/commit/cd2478b3aa36989a4685cab291eeae5cc7521c39)) +* **internal:** add missing files argument to base client ([fdfb733](https://github.com/coingecko/coingecko-python/commit/fdfb733c0826445d3cac26ac220335c19df07a94)) +* speedup initial import ([41bfc15](https://github.com/coingecko/coingecko-python/commit/41bfc1506a5ef1ffe945dbdc9996f12dd425a34d)) +* update lockfile ([def90a4](https://github.com/coingecko/coingecko-python/commit/def90a462f594215307855a485fb0defb2e59f21)) + ## 1.11.2 (2025-11-22) Full Changelog: [v1.11.1...v1.11.2](https://github.com/coingecko/coingecko-python/compare/v1.11.1...v1.11.2) diff --git a/pyproject.toml b/pyproject.toml index 2d070f5..be9a8ec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,20 +1,22 @@ [project] name = "coingecko_sdk" -version = "1.11.2" +version = "1.11.3" description = "The official Python library for the coingecko API" dynamic = ["readme"] license = "Apache-2.0" authors = [ { name = "Coingecko", email = "eason.lim@coingecko.com" }, ] + dependencies = [ - "httpx>=0.23.0, <1", - "pydantic>=1.9.0, <3", - "typing-extensions>=4.10, <5", - "anyio>=3.5.0, <5", - "distro>=1.7.0, <2", - "sniffio", + "httpx>=0.23.0, <1", + "pydantic>=1.9.0, <3", + "typing-extensions>=4.10, <5", + "anyio>=3.5.0, <5", + "distro>=1.7.0, <2", + "sniffio", ] + requires-python = ">= 3.9" classifiers = [ "Typing :: Typed", @@ -46,7 +48,7 @@ managed = true # version pins are in requirements-dev.lock dev-dependencies = [ "pyright==1.1.399", - "mypy", + "mypy==1.17", "respx", "pytest", "pytest-asyncio", diff --git a/requirements-dev.lock b/requirements-dev.lock index adcdef2..57b695c 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -12,40 +12,45 @@ -e file:. aiohappyeyeballs==2.6.1 # via aiohttp -aiohttp==3.12.8 +aiohttp==3.13.2 # via coingecko-sdk # via httpx-aiohttp -aiosignal==1.3.2 +aiosignal==1.4.0 # via aiohttp -annotated-types==0.6.0 +annotated-types==0.7.0 # via pydantic -anyio==4.4.0 +anyio==4.12.0 # via coingecko-sdk # via httpx -argcomplete==3.1.2 +argcomplete==3.6.3 # via nox async-timeout==5.0.1 # via aiohttp -attrs==25.3.0 +attrs==25.4.0 # via aiohttp -certifi==2023.7.22 + # via nox +backports-asyncio-runner==1.2.0 + # via pytest-asyncio +certifi==2025.11.12 # via httpcore # via httpx -colorlog==6.7.0 +colorlog==6.10.1 + # via nox +dependency-groups==1.3.1 # via nox -dirty-equals==0.6.0 -distlib==0.3.7 +dirty-equals==0.11 +distlib==0.4.0 # via virtualenv -distro==1.8.0 +distro==1.9.0 # via coingecko-sdk -exceptiongroup==1.2.2 +exceptiongroup==1.3.1 # via anyio # via pytest -execnet==2.1.1 +execnet==2.1.2 # via pytest-xdist -filelock==3.12.4 +filelock==3.19.1 # via virtualenv -frozenlist==1.6.2 +frozenlist==1.8.0 # via aiohttp # via aiosignal h11==0.16.0 @@ -58,80 +63,87 @@ httpx==0.28.1 # via respx httpx-aiohttp==0.1.9 # via coingecko-sdk -idna==3.4 +humanize==4.13.0 + # via nox +idna==3.11 # via anyio # via httpx # via yarl -importlib-metadata==7.0.0 -iniconfig==2.0.0 +importlib-metadata==8.7.0 +iniconfig==2.1.0 # via pytest markdown-it-py==3.0.0 # via rich mdurl==0.1.2 # via markdown-it-py -multidict==6.4.4 +multidict==6.7.0 # via aiohttp # via yarl -mypy==1.14.1 -mypy-extensions==1.0.0 +mypy==1.17.0 +mypy-extensions==1.1.0 # via mypy -nodeenv==1.8.0 +nodeenv==1.9.1 # via pyright -nox==2023.4.22 -packaging==23.2 +nox==2025.11.12 +packaging==25.0 + # via dependency-groups # via nox # via pytest -platformdirs==3.11.0 +pathspec==0.12.1 + # via mypy +platformdirs==4.4.0 # via virtualenv -pluggy==1.5.0 +pluggy==1.6.0 # via pytest -propcache==0.3.1 +propcache==0.4.1 # via aiohttp # via yarl -pydantic==2.11.9 +pydantic==2.12.5 # via coingecko-sdk -pydantic-core==2.33.2 +pydantic-core==2.41.5 # via pydantic -pygments==2.18.0 +pygments==2.19.2 + # via pytest # via rich pyright==1.1.399 -pytest==8.3.3 +pytest==8.4.2 # via pytest-asyncio # via pytest-xdist -pytest-asyncio==0.24.0 -pytest-xdist==3.7.0 -python-dateutil==2.8.2 +pytest-asyncio==1.2.0 +pytest-xdist==3.8.0 +python-dateutil==2.9.0.post0 # via time-machine -pytz==2023.3.post1 - # via dirty-equals respx==0.22.0 -rich==13.7.1 -ruff==0.9.4 -setuptools==68.2.2 - # via nodeenv -six==1.16.0 +rich==14.2.0 +ruff==0.14.7 +six==1.17.0 # via python-dateutil -sniffio==1.3.0 - # via anyio +sniffio==1.3.1 # via coingecko-sdk -time-machine==2.9.0 -tomli==2.0.2 +time-machine==2.19.0 +tomli==2.3.0 + # via dependency-groups # via mypy + # via nox # via pytest -typing-extensions==4.12.2 +typing-extensions==4.15.0 + # via aiosignal # via anyio # via coingecko-sdk + # via exceptiongroup # via multidict # via mypy # via pydantic # via pydantic-core # via pyright + # via pytest-asyncio # via typing-inspection -typing-inspection==0.4.1 + # via virtualenv +typing-inspection==0.4.2 # via pydantic -virtualenv==20.24.5 +virtualenv==20.35.4 # via nox -yarl==1.20.0 +yarl==1.22.0 # via aiohttp -zipp==3.17.0 +zipp==3.23.0 # via importlib-metadata diff --git a/requirements.lock b/requirements.lock index 066e578..7657fcd 100644 --- a/requirements.lock +++ b/requirements.lock @@ -12,28 +12,28 @@ -e file:. aiohappyeyeballs==2.6.1 # via aiohttp -aiohttp==3.12.8 +aiohttp==3.13.2 # via coingecko-sdk # via httpx-aiohttp -aiosignal==1.3.2 +aiosignal==1.4.0 # via aiohttp -annotated-types==0.6.0 +annotated-types==0.7.0 # via pydantic -anyio==4.4.0 +anyio==4.12.0 # via coingecko-sdk # via httpx async-timeout==5.0.1 # via aiohttp -attrs==25.3.0 +attrs==25.4.0 # via aiohttp -certifi==2023.7.22 +certifi==2025.11.12 # via httpcore # via httpx -distro==1.8.0 +distro==1.9.0 # via coingecko-sdk -exceptiongroup==1.2.2 +exceptiongroup==1.3.1 # via anyio -frozenlist==1.6.2 +frozenlist==1.8.0 # via aiohttp # via aiosignal h11==0.16.0 @@ -45,31 +45,32 @@ httpx==0.28.1 # via httpx-aiohttp httpx-aiohttp==0.1.9 # via coingecko-sdk -idna==3.4 +idna==3.11 # via anyio # via httpx # via yarl -multidict==6.4.4 +multidict==6.7.0 # via aiohttp # via yarl -propcache==0.3.1 +propcache==0.4.1 # via aiohttp # via yarl -pydantic==2.11.9 +pydantic==2.12.5 # via coingecko-sdk -pydantic-core==2.33.2 +pydantic-core==2.41.5 # via pydantic -sniffio==1.3.0 - # via anyio +sniffio==1.3.1 # via coingecko-sdk -typing-extensions==4.12.2 +typing-extensions==4.15.0 + # via aiosignal # via anyio # via coingecko-sdk + # via exceptiongroup # via multidict # via pydantic # via pydantic-core # via typing-inspection -typing-inspection==0.4.1 +typing-inspection==0.4.2 # via pydantic -yarl==1.20.0 +yarl==1.22.0 # via aiohttp diff --git a/src/coingecko_sdk/_base_client.py b/src/coingecko_sdk/_base_client.py index 8a4ca05..ef929a6 100644 --- a/src/coingecko_sdk/_base_client.py +++ b/src/coingecko_sdk/_base_client.py @@ -1244,9 +1244,12 @@ def patch( *, cast_to: Type[ResponseT], body: Body | None = None, + files: RequestFiles | None = None, options: RequestOptions = {}, ) -> ResponseT: - opts = FinalRequestOptions.construct(method="patch", url=path, json_data=body, **options) + opts = FinalRequestOptions.construct( + method="patch", url=path, json_data=body, files=to_httpx_files(files), **options + ) return self.request(cast_to, opts) def put( @@ -1764,9 +1767,12 @@ async def patch( *, cast_to: Type[ResponseT], body: Body | None = None, + files: RequestFiles | None = None, options: RequestOptions = {}, ) -> ResponseT: - opts = FinalRequestOptions.construct(method="patch", url=path, json_data=body, **options) + opts = FinalRequestOptions.construct( + method="patch", url=path, json_data=body, files=await async_to_httpx_files(files), **options + ) return await self.request(cast_to, opts) async def put( diff --git a/src/coingecko_sdk/_client.py b/src/coingecko_sdk/_client.py index a24b8a9..2b7a327 100644 --- a/src/coingecko_sdk/_client.py +++ b/src/coingecko_sdk/_client.py @@ -3,7 +3,7 @@ from __future__ import annotations import os -from typing import Any, Dict, Mapping, cast +from typing import TYPE_CHECKING, Any, Dict, Mapping, cast from typing_extensions import Self, Literal, override import httpx @@ -21,8 +21,8 @@ not_given, ) from ._utils import is_given, get_async_library +from ._compat import cached_property from ._version import __version__ -from .resources import key, ping, entities, token_lists, exchange_rates, asset_platforms, public_treasury from ._streaming import Stream as Stream, AsyncStream as AsyncStream from ._exceptions import APIStatusError from ._base_client import ( @@ -30,14 +30,40 @@ SyncAPIClient, AsyncAPIClient, ) -from .resources.nfts import nfts -from .resources.coins import coins -from .resources.search import search -from .resources.simple import simple -from .resources.global_ import global_ -from .resources.onchain import onchain -from .resources.exchanges import exchanges -from .resources.derivatives import derivatives + +if TYPE_CHECKING: + from .resources import ( + key, + nfts, + ping, + coins, + search, + simple, + global_, + onchain, + entities, + exchanges, + derivatives, + token_lists, + exchange_rates, + asset_platforms, + public_treasury, + ) + from .resources.key import KeyResource, AsyncKeyResource + from .resources.ping import PingResource, AsyncPingResource + from .resources.entities import EntitiesResource, AsyncEntitiesResource + from .resources.nfts.nfts import NFTsResource, AsyncNFTsResource + from .resources.coins.coins import CoinsResource, AsyncCoinsResource + from .resources.token_lists import TokenListsResource, AsyncTokenListsResource + from .resources.search.search import SearchResource, AsyncSearchResource + from .resources.simple.simple import SimpleResource, AsyncSimpleResource + from .resources.exchange_rates import ExchangeRatesResource, AsyncExchangeRatesResource + from .resources.asset_platforms import AssetPlatformsResource, AsyncAssetPlatformsResource + from .resources.global_.global_ import GlobalResource, AsyncGlobalResource + from .resources.onchain.onchain import OnchainResource, AsyncOnchainResource + from .resources.public_treasury import PublicTreasuryResource, AsyncPublicTreasuryResource + from .resources.exchanges.exchanges import ExchangesResource, AsyncExchangesResource + from .resources.derivatives.derivatives import DerivativesResource, AsyncDerivativesResource __all__ = [ "ENVIRONMENTS", @@ -58,24 +84,6 @@ class Coingecko(SyncAPIClient): - asset_platforms: asset_platforms.AssetPlatformsResource - coins: coins.CoinsResource - derivatives: derivatives.DerivativesResource - entities: entities.EntitiesResource - exchange_rates: exchange_rates.ExchangeRatesResource - exchanges: exchanges.ExchangesResource - global_: global_.GlobalResource - key: key.KeyResource - nfts: nfts.NFTsResource - onchain: onchain.OnchainResource - ping: ping.PingResource - public_treasury: public_treasury.PublicTreasuryResource - search: search.SearchResource - simple: simple.SimpleResource - token_lists: token_lists.TokenListsResource - with_raw_response: CoingeckoWithRawResponse - with_streaming_response: CoingeckoWithStreamedResponse - # client options pro_api_key: str | None demo_api_key: str | None @@ -158,23 +166,103 @@ def __init__( _strict_response_validation=_strict_response_validation, ) - self.asset_platforms = asset_platforms.AssetPlatformsResource(self) - self.coins = coins.CoinsResource(self) - self.derivatives = derivatives.DerivativesResource(self) - self.entities = entities.EntitiesResource(self) - self.exchange_rates = exchange_rates.ExchangeRatesResource(self) - self.exchanges = exchanges.ExchangesResource(self) - self.global_ = global_.GlobalResource(self) - self.key = key.KeyResource(self) - self.nfts = nfts.NFTsResource(self) - self.onchain = onchain.OnchainResource(self) - self.ping = ping.PingResource(self) - self.public_treasury = public_treasury.PublicTreasuryResource(self) - self.search = search.SearchResource(self) - self.simple = simple.SimpleResource(self) - self.token_lists = token_lists.TokenListsResource(self) - self.with_raw_response = CoingeckoWithRawResponse(self) - self.with_streaming_response = CoingeckoWithStreamedResponse(self) + @cached_property + def asset_platforms(self) -> AssetPlatformsResource: + from .resources.asset_platforms import AssetPlatformsResource + + return AssetPlatformsResource(self) + + @cached_property + def coins(self) -> CoinsResource: + from .resources.coins import CoinsResource + + return CoinsResource(self) + + @cached_property + def derivatives(self) -> DerivativesResource: + from .resources.derivatives import DerivativesResource + + return DerivativesResource(self) + + @cached_property + def entities(self) -> EntitiesResource: + from .resources.entities import EntitiesResource + + return EntitiesResource(self) + + @cached_property + def exchange_rates(self) -> ExchangeRatesResource: + from .resources.exchange_rates import ExchangeRatesResource + + return ExchangeRatesResource(self) + + @cached_property + def exchanges(self) -> ExchangesResource: + from .resources.exchanges import ExchangesResource + + return ExchangesResource(self) + + @cached_property + def global_(self) -> GlobalResource: + from .resources.global_ import GlobalResource + + return GlobalResource(self) + + @cached_property + def key(self) -> KeyResource: + from .resources.key import KeyResource + + return KeyResource(self) + + @cached_property + def nfts(self) -> NFTsResource: + from .resources.nfts import NFTsResource + + return NFTsResource(self) + + @cached_property + def onchain(self) -> OnchainResource: + from .resources.onchain import OnchainResource + + return OnchainResource(self) + + @cached_property + def ping(self) -> PingResource: + from .resources.ping import PingResource + + return PingResource(self) + + @cached_property + def public_treasury(self) -> PublicTreasuryResource: + from .resources.public_treasury import PublicTreasuryResource + + return PublicTreasuryResource(self) + + @cached_property + def search(self) -> SearchResource: + from .resources.search import SearchResource + + return SearchResource(self) + + @cached_property + def simple(self) -> SimpleResource: + from .resources.simple import SimpleResource + + return SimpleResource(self) + + @cached_property + def token_lists(self) -> TokenListsResource: + from .resources.token_lists import TokenListsResource + + return TokenListsResource(self) + + @cached_property + def with_raw_response(self) -> CoingeckoWithRawResponse: + return CoingeckoWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> CoingeckoWithStreamedResponse: + return CoingeckoWithStreamedResponse(self) @property @override @@ -315,24 +403,6 @@ def _make_status_error( class AsyncCoingecko(AsyncAPIClient): - asset_platforms: asset_platforms.AsyncAssetPlatformsResource - coins: coins.AsyncCoinsResource - derivatives: derivatives.AsyncDerivativesResource - entities: entities.AsyncEntitiesResource - exchange_rates: exchange_rates.AsyncExchangeRatesResource - exchanges: exchanges.AsyncExchangesResource - global_: global_.AsyncGlobalResource - key: key.AsyncKeyResource - nfts: nfts.AsyncNFTsResource - onchain: onchain.AsyncOnchainResource - ping: ping.AsyncPingResource - public_treasury: public_treasury.AsyncPublicTreasuryResource - search: search.AsyncSearchResource - simple: simple.AsyncSimpleResource - token_lists: token_lists.AsyncTokenListsResource - with_raw_response: AsyncCoingeckoWithRawResponse - with_streaming_response: AsyncCoingeckoWithStreamedResponse - # client options pro_api_key: str | None demo_api_key: str | None @@ -415,23 +485,103 @@ def __init__( _strict_response_validation=_strict_response_validation, ) - self.asset_platforms = asset_platforms.AsyncAssetPlatformsResource(self) - self.coins = coins.AsyncCoinsResource(self) - self.derivatives = derivatives.AsyncDerivativesResource(self) - self.entities = entities.AsyncEntitiesResource(self) - self.exchange_rates = exchange_rates.AsyncExchangeRatesResource(self) - self.exchanges = exchanges.AsyncExchangesResource(self) - self.global_ = global_.AsyncGlobalResource(self) - self.key = key.AsyncKeyResource(self) - self.nfts = nfts.AsyncNFTsResource(self) - self.onchain = onchain.AsyncOnchainResource(self) - self.ping = ping.AsyncPingResource(self) - self.public_treasury = public_treasury.AsyncPublicTreasuryResource(self) - self.search = search.AsyncSearchResource(self) - self.simple = simple.AsyncSimpleResource(self) - self.token_lists = token_lists.AsyncTokenListsResource(self) - self.with_raw_response = AsyncCoingeckoWithRawResponse(self) - self.with_streaming_response = AsyncCoingeckoWithStreamedResponse(self) + @cached_property + def asset_platforms(self) -> AsyncAssetPlatformsResource: + from .resources.asset_platforms import AsyncAssetPlatformsResource + + return AsyncAssetPlatformsResource(self) + + @cached_property + def coins(self) -> AsyncCoinsResource: + from .resources.coins import AsyncCoinsResource + + return AsyncCoinsResource(self) + + @cached_property + def derivatives(self) -> AsyncDerivativesResource: + from .resources.derivatives import AsyncDerivativesResource + + return AsyncDerivativesResource(self) + + @cached_property + def entities(self) -> AsyncEntitiesResource: + from .resources.entities import AsyncEntitiesResource + + return AsyncEntitiesResource(self) + + @cached_property + def exchange_rates(self) -> AsyncExchangeRatesResource: + from .resources.exchange_rates import AsyncExchangeRatesResource + + return AsyncExchangeRatesResource(self) + + @cached_property + def exchanges(self) -> AsyncExchangesResource: + from .resources.exchanges import AsyncExchangesResource + + return AsyncExchangesResource(self) + + @cached_property + def global_(self) -> AsyncGlobalResource: + from .resources.global_ import AsyncGlobalResource + + return AsyncGlobalResource(self) + + @cached_property + def key(self) -> AsyncKeyResource: + from .resources.key import AsyncKeyResource + + return AsyncKeyResource(self) + + @cached_property + def nfts(self) -> AsyncNFTsResource: + from .resources.nfts import AsyncNFTsResource + + return AsyncNFTsResource(self) + + @cached_property + def onchain(self) -> AsyncOnchainResource: + from .resources.onchain import AsyncOnchainResource + + return AsyncOnchainResource(self) + + @cached_property + def ping(self) -> AsyncPingResource: + from .resources.ping import AsyncPingResource + + return AsyncPingResource(self) + + @cached_property + def public_treasury(self) -> AsyncPublicTreasuryResource: + from .resources.public_treasury import AsyncPublicTreasuryResource + + return AsyncPublicTreasuryResource(self) + + @cached_property + def search(self) -> AsyncSearchResource: + from .resources.search import AsyncSearchResource + + return AsyncSearchResource(self) + + @cached_property + def simple(self) -> AsyncSimpleResource: + from .resources.simple import AsyncSimpleResource + + return AsyncSimpleResource(self) + + @cached_property + def token_lists(self) -> AsyncTokenListsResource: + from .resources.token_lists import AsyncTokenListsResource + + return AsyncTokenListsResource(self) + + @cached_property + def with_raw_response(self) -> AsyncCoingeckoWithRawResponse: + return AsyncCoingeckoWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncCoingeckoWithStreamedResponse: + return AsyncCoingeckoWithStreamedResponse(self) @property @override @@ -572,79 +722,391 @@ def _make_status_error( class CoingeckoWithRawResponse: + _client: Coingecko + def __init__(self, client: Coingecko) -> None: - self.asset_platforms = asset_platforms.AssetPlatformsResourceWithRawResponse(client.asset_platforms) - self.coins = coins.CoinsResourceWithRawResponse(client.coins) - self.derivatives = derivatives.DerivativesResourceWithRawResponse(client.derivatives) - self.entities = entities.EntitiesResourceWithRawResponse(client.entities) - self.exchange_rates = exchange_rates.ExchangeRatesResourceWithRawResponse(client.exchange_rates) - self.exchanges = exchanges.ExchangesResourceWithRawResponse(client.exchanges) - self.global_ = global_.GlobalResourceWithRawResponse(client.global_) - self.key = key.KeyResourceWithRawResponse(client.key) - self.nfts = nfts.NFTsResourceWithRawResponse(client.nfts) - self.onchain = onchain.OnchainResourceWithRawResponse(client.onchain) - self.ping = ping.PingResourceWithRawResponse(client.ping) - self.public_treasury = public_treasury.PublicTreasuryResourceWithRawResponse(client.public_treasury) - self.search = search.SearchResourceWithRawResponse(client.search) - self.simple = simple.SimpleResourceWithRawResponse(client.simple) - self.token_lists = token_lists.TokenListsResourceWithRawResponse(client.token_lists) + self._client = client + + @cached_property + def asset_platforms(self) -> asset_platforms.AssetPlatformsResourceWithRawResponse: + from .resources.asset_platforms import AssetPlatformsResourceWithRawResponse + + return AssetPlatformsResourceWithRawResponse(self._client.asset_platforms) + + @cached_property + def coins(self) -> coins.CoinsResourceWithRawResponse: + from .resources.coins import CoinsResourceWithRawResponse + + return CoinsResourceWithRawResponse(self._client.coins) + + @cached_property + def derivatives(self) -> derivatives.DerivativesResourceWithRawResponse: + from .resources.derivatives import DerivativesResourceWithRawResponse + + return DerivativesResourceWithRawResponse(self._client.derivatives) + + @cached_property + def entities(self) -> entities.EntitiesResourceWithRawResponse: + from .resources.entities import EntitiesResourceWithRawResponse + + return EntitiesResourceWithRawResponse(self._client.entities) + + @cached_property + def exchange_rates(self) -> exchange_rates.ExchangeRatesResourceWithRawResponse: + from .resources.exchange_rates import ExchangeRatesResourceWithRawResponse + + return ExchangeRatesResourceWithRawResponse(self._client.exchange_rates) + + @cached_property + def exchanges(self) -> exchanges.ExchangesResourceWithRawResponse: + from .resources.exchanges import ExchangesResourceWithRawResponse + + return ExchangesResourceWithRawResponse(self._client.exchanges) + + @cached_property + def global_(self) -> global_.GlobalResourceWithRawResponse: + from .resources.global_ import GlobalResourceWithRawResponse + + return GlobalResourceWithRawResponse(self._client.global_) + + @cached_property + def key(self) -> key.KeyResourceWithRawResponse: + from .resources.key import KeyResourceWithRawResponse + + return KeyResourceWithRawResponse(self._client.key) + + @cached_property + def nfts(self) -> nfts.NFTsResourceWithRawResponse: + from .resources.nfts import NFTsResourceWithRawResponse + + return NFTsResourceWithRawResponse(self._client.nfts) + + @cached_property + def onchain(self) -> onchain.OnchainResourceWithRawResponse: + from .resources.onchain import OnchainResourceWithRawResponse + + return OnchainResourceWithRawResponse(self._client.onchain) + + @cached_property + def ping(self) -> ping.PingResourceWithRawResponse: + from .resources.ping import PingResourceWithRawResponse + + return PingResourceWithRawResponse(self._client.ping) + + @cached_property + def public_treasury(self) -> public_treasury.PublicTreasuryResourceWithRawResponse: + from .resources.public_treasury import PublicTreasuryResourceWithRawResponse + + return PublicTreasuryResourceWithRawResponse(self._client.public_treasury) + + @cached_property + def search(self) -> search.SearchResourceWithRawResponse: + from .resources.search import SearchResourceWithRawResponse + + return SearchResourceWithRawResponse(self._client.search) + + @cached_property + def simple(self) -> simple.SimpleResourceWithRawResponse: + from .resources.simple import SimpleResourceWithRawResponse + + return SimpleResourceWithRawResponse(self._client.simple) + + @cached_property + def token_lists(self) -> token_lists.TokenListsResourceWithRawResponse: + from .resources.token_lists import TokenListsResourceWithRawResponse + + return TokenListsResourceWithRawResponse(self._client.token_lists) class AsyncCoingeckoWithRawResponse: + _client: AsyncCoingecko + def __init__(self, client: AsyncCoingecko) -> None: - self.asset_platforms = asset_platforms.AsyncAssetPlatformsResourceWithRawResponse(client.asset_platforms) - self.coins = coins.AsyncCoinsResourceWithRawResponse(client.coins) - self.derivatives = derivatives.AsyncDerivativesResourceWithRawResponse(client.derivatives) - self.entities = entities.AsyncEntitiesResourceWithRawResponse(client.entities) - self.exchange_rates = exchange_rates.AsyncExchangeRatesResourceWithRawResponse(client.exchange_rates) - self.exchanges = exchanges.AsyncExchangesResourceWithRawResponse(client.exchanges) - self.global_ = global_.AsyncGlobalResourceWithRawResponse(client.global_) - self.key = key.AsyncKeyResourceWithRawResponse(client.key) - self.nfts = nfts.AsyncNFTsResourceWithRawResponse(client.nfts) - self.onchain = onchain.AsyncOnchainResourceWithRawResponse(client.onchain) - self.ping = ping.AsyncPingResourceWithRawResponse(client.ping) - self.public_treasury = public_treasury.AsyncPublicTreasuryResourceWithRawResponse(client.public_treasury) - self.search = search.AsyncSearchResourceWithRawResponse(client.search) - self.simple = simple.AsyncSimpleResourceWithRawResponse(client.simple) - self.token_lists = token_lists.AsyncTokenListsResourceWithRawResponse(client.token_lists) + self._client = client + + @cached_property + def asset_platforms(self) -> asset_platforms.AsyncAssetPlatformsResourceWithRawResponse: + from .resources.asset_platforms import AsyncAssetPlatformsResourceWithRawResponse + + return AsyncAssetPlatformsResourceWithRawResponse(self._client.asset_platforms) + + @cached_property + def coins(self) -> coins.AsyncCoinsResourceWithRawResponse: + from .resources.coins import AsyncCoinsResourceWithRawResponse + + return AsyncCoinsResourceWithRawResponse(self._client.coins) + + @cached_property + def derivatives(self) -> derivatives.AsyncDerivativesResourceWithRawResponse: + from .resources.derivatives import AsyncDerivativesResourceWithRawResponse + + return AsyncDerivativesResourceWithRawResponse(self._client.derivatives) + + @cached_property + def entities(self) -> entities.AsyncEntitiesResourceWithRawResponse: + from .resources.entities import AsyncEntitiesResourceWithRawResponse + + return AsyncEntitiesResourceWithRawResponse(self._client.entities) + + @cached_property + def exchange_rates(self) -> exchange_rates.AsyncExchangeRatesResourceWithRawResponse: + from .resources.exchange_rates import AsyncExchangeRatesResourceWithRawResponse + + return AsyncExchangeRatesResourceWithRawResponse(self._client.exchange_rates) + + @cached_property + def exchanges(self) -> exchanges.AsyncExchangesResourceWithRawResponse: + from .resources.exchanges import AsyncExchangesResourceWithRawResponse + + return AsyncExchangesResourceWithRawResponse(self._client.exchanges) + + @cached_property + def global_(self) -> global_.AsyncGlobalResourceWithRawResponse: + from .resources.global_ import AsyncGlobalResourceWithRawResponse + + return AsyncGlobalResourceWithRawResponse(self._client.global_) + + @cached_property + def key(self) -> key.AsyncKeyResourceWithRawResponse: + from .resources.key import AsyncKeyResourceWithRawResponse + + return AsyncKeyResourceWithRawResponse(self._client.key) + + @cached_property + def nfts(self) -> nfts.AsyncNFTsResourceWithRawResponse: + from .resources.nfts import AsyncNFTsResourceWithRawResponse + + return AsyncNFTsResourceWithRawResponse(self._client.nfts) + + @cached_property + def onchain(self) -> onchain.AsyncOnchainResourceWithRawResponse: + from .resources.onchain import AsyncOnchainResourceWithRawResponse + + return AsyncOnchainResourceWithRawResponse(self._client.onchain) + + @cached_property + def ping(self) -> ping.AsyncPingResourceWithRawResponse: + from .resources.ping import AsyncPingResourceWithRawResponse + + return AsyncPingResourceWithRawResponse(self._client.ping) + + @cached_property + def public_treasury(self) -> public_treasury.AsyncPublicTreasuryResourceWithRawResponse: + from .resources.public_treasury import AsyncPublicTreasuryResourceWithRawResponse + + return AsyncPublicTreasuryResourceWithRawResponse(self._client.public_treasury) + + @cached_property + def search(self) -> search.AsyncSearchResourceWithRawResponse: + from .resources.search import AsyncSearchResourceWithRawResponse + + return AsyncSearchResourceWithRawResponse(self._client.search) + + @cached_property + def simple(self) -> simple.AsyncSimpleResourceWithRawResponse: + from .resources.simple import AsyncSimpleResourceWithRawResponse + + return AsyncSimpleResourceWithRawResponse(self._client.simple) + + @cached_property + def token_lists(self) -> token_lists.AsyncTokenListsResourceWithRawResponse: + from .resources.token_lists import AsyncTokenListsResourceWithRawResponse + + return AsyncTokenListsResourceWithRawResponse(self._client.token_lists) class CoingeckoWithStreamedResponse: + _client: Coingecko + def __init__(self, client: Coingecko) -> None: - self.asset_platforms = asset_platforms.AssetPlatformsResourceWithStreamingResponse(client.asset_platforms) - self.coins = coins.CoinsResourceWithStreamingResponse(client.coins) - self.derivatives = derivatives.DerivativesResourceWithStreamingResponse(client.derivatives) - self.entities = entities.EntitiesResourceWithStreamingResponse(client.entities) - self.exchange_rates = exchange_rates.ExchangeRatesResourceWithStreamingResponse(client.exchange_rates) - self.exchanges = exchanges.ExchangesResourceWithStreamingResponse(client.exchanges) - self.global_ = global_.GlobalResourceWithStreamingResponse(client.global_) - self.key = key.KeyResourceWithStreamingResponse(client.key) - self.nfts = nfts.NFTsResourceWithStreamingResponse(client.nfts) - self.onchain = onchain.OnchainResourceWithStreamingResponse(client.onchain) - self.ping = ping.PingResourceWithStreamingResponse(client.ping) - self.public_treasury = public_treasury.PublicTreasuryResourceWithStreamingResponse(client.public_treasury) - self.search = search.SearchResourceWithStreamingResponse(client.search) - self.simple = simple.SimpleResourceWithStreamingResponse(client.simple) - self.token_lists = token_lists.TokenListsResourceWithStreamingResponse(client.token_lists) + self._client = client + + @cached_property + def asset_platforms(self) -> asset_platforms.AssetPlatformsResourceWithStreamingResponse: + from .resources.asset_platforms import AssetPlatformsResourceWithStreamingResponse + + return AssetPlatformsResourceWithStreamingResponse(self._client.asset_platforms) + + @cached_property + def coins(self) -> coins.CoinsResourceWithStreamingResponse: + from .resources.coins import CoinsResourceWithStreamingResponse + + return CoinsResourceWithStreamingResponse(self._client.coins) + + @cached_property + def derivatives(self) -> derivatives.DerivativesResourceWithStreamingResponse: + from .resources.derivatives import DerivativesResourceWithStreamingResponse + + return DerivativesResourceWithStreamingResponse(self._client.derivatives) + + @cached_property + def entities(self) -> entities.EntitiesResourceWithStreamingResponse: + from .resources.entities import EntitiesResourceWithStreamingResponse + + return EntitiesResourceWithStreamingResponse(self._client.entities) + + @cached_property + def exchange_rates(self) -> exchange_rates.ExchangeRatesResourceWithStreamingResponse: + from .resources.exchange_rates import ExchangeRatesResourceWithStreamingResponse + + return ExchangeRatesResourceWithStreamingResponse(self._client.exchange_rates) + + @cached_property + def exchanges(self) -> exchanges.ExchangesResourceWithStreamingResponse: + from .resources.exchanges import ExchangesResourceWithStreamingResponse + + return ExchangesResourceWithStreamingResponse(self._client.exchanges) + + @cached_property + def global_(self) -> global_.GlobalResourceWithStreamingResponse: + from .resources.global_ import GlobalResourceWithStreamingResponse + + return GlobalResourceWithStreamingResponse(self._client.global_) + + @cached_property + def key(self) -> key.KeyResourceWithStreamingResponse: + from .resources.key import KeyResourceWithStreamingResponse + + return KeyResourceWithStreamingResponse(self._client.key) + + @cached_property + def nfts(self) -> nfts.NFTsResourceWithStreamingResponse: + from .resources.nfts import NFTsResourceWithStreamingResponse + + return NFTsResourceWithStreamingResponse(self._client.nfts) + + @cached_property + def onchain(self) -> onchain.OnchainResourceWithStreamingResponse: + from .resources.onchain import OnchainResourceWithStreamingResponse + + return OnchainResourceWithStreamingResponse(self._client.onchain) + + @cached_property + def ping(self) -> ping.PingResourceWithStreamingResponse: + from .resources.ping import PingResourceWithStreamingResponse + + return PingResourceWithStreamingResponse(self._client.ping) + + @cached_property + def public_treasury(self) -> public_treasury.PublicTreasuryResourceWithStreamingResponse: + from .resources.public_treasury import PublicTreasuryResourceWithStreamingResponse + + return PublicTreasuryResourceWithStreamingResponse(self._client.public_treasury) + + @cached_property + def search(self) -> search.SearchResourceWithStreamingResponse: + from .resources.search import SearchResourceWithStreamingResponse + + return SearchResourceWithStreamingResponse(self._client.search) + + @cached_property + def simple(self) -> simple.SimpleResourceWithStreamingResponse: + from .resources.simple import SimpleResourceWithStreamingResponse + + return SimpleResourceWithStreamingResponse(self._client.simple) + + @cached_property + def token_lists(self) -> token_lists.TokenListsResourceWithStreamingResponse: + from .resources.token_lists import TokenListsResourceWithStreamingResponse + + return TokenListsResourceWithStreamingResponse(self._client.token_lists) class AsyncCoingeckoWithStreamedResponse: + _client: AsyncCoingecko + def __init__(self, client: AsyncCoingecko) -> None: - self.asset_platforms = asset_platforms.AsyncAssetPlatformsResourceWithStreamingResponse(client.asset_platforms) - self.coins = coins.AsyncCoinsResourceWithStreamingResponse(client.coins) - self.derivatives = derivatives.AsyncDerivativesResourceWithStreamingResponse(client.derivatives) - self.entities = entities.AsyncEntitiesResourceWithStreamingResponse(client.entities) - self.exchange_rates = exchange_rates.AsyncExchangeRatesResourceWithStreamingResponse(client.exchange_rates) - self.exchanges = exchanges.AsyncExchangesResourceWithStreamingResponse(client.exchanges) - self.global_ = global_.AsyncGlobalResourceWithStreamingResponse(client.global_) - self.key = key.AsyncKeyResourceWithStreamingResponse(client.key) - self.nfts = nfts.AsyncNFTsResourceWithStreamingResponse(client.nfts) - self.onchain = onchain.AsyncOnchainResourceWithStreamingResponse(client.onchain) - self.ping = ping.AsyncPingResourceWithStreamingResponse(client.ping) - self.public_treasury = public_treasury.AsyncPublicTreasuryResourceWithStreamingResponse(client.public_treasury) - self.search = search.AsyncSearchResourceWithStreamingResponse(client.search) - self.simple = simple.AsyncSimpleResourceWithStreamingResponse(client.simple) - self.token_lists = token_lists.AsyncTokenListsResourceWithStreamingResponse(client.token_lists) + self._client = client + + @cached_property + def asset_platforms(self) -> asset_platforms.AsyncAssetPlatformsResourceWithStreamingResponse: + from .resources.asset_platforms import AsyncAssetPlatformsResourceWithStreamingResponse + + return AsyncAssetPlatformsResourceWithStreamingResponse(self._client.asset_platforms) + + @cached_property + def coins(self) -> coins.AsyncCoinsResourceWithStreamingResponse: + from .resources.coins import AsyncCoinsResourceWithStreamingResponse + + return AsyncCoinsResourceWithStreamingResponse(self._client.coins) + + @cached_property + def derivatives(self) -> derivatives.AsyncDerivativesResourceWithStreamingResponse: + from .resources.derivatives import AsyncDerivativesResourceWithStreamingResponse + + return AsyncDerivativesResourceWithStreamingResponse(self._client.derivatives) + + @cached_property + def entities(self) -> entities.AsyncEntitiesResourceWithStreamingResponse: + from .resources.entities import AsyncEntitiesResourceWithStreamingResponse + + return AsyncEntitiesResourceWithStreamingResponse(self._client.entities) + + @cached_property + def exchange_rates(self) -> exchange_rates.AsyncExchangeRatesResourceWithStreamingResponse: + from .resources.exchange_rates import AsyncExchangeRatesResourceWithStreamingResponse + + return AsyncExchangeRatesResourceWithStreamingResponse(self._client.exchange_rates) + + @cached_property + def exchanges(self) -> exchanges.AsyncExchangesResourceWithStreamingResponse: + from .resources.exchanges import AsyncExchangesResourceWithStreamingResponse + + return AsyncExchangesResourceWithStreamingResponse(self._client.exchanges) + + @cached_property + def global_(self) -> global_.AsyncGlobalResourceWithStreamingResponse: + from .resources.global_ import AsyncGlobalResourceWithStreamingResponse + + return AsyncGlobalResourceWithStreamingResponse(self._client.global_) + + @cached_property + def key(self) -> key.AsyncKeyResourceWithStreamingResponse: + from .resources.key import AsyncKeyResourceWithStreamingResponse + + return AsyncKeyResourceWithStreamingResponse(self._client.key) + + @cached_property + def nfts(self) -> nfts.AsyncNFTsResourceWithStreamingResponse: + from .resources.nfts import AsyncNFTsResourceWithStreamingResponse + + return AsyncNFTsResourceWithStreamingResponse(self._client.nfts) + + @cached_property + def onchain(self) -> onchain.AsyncOnchainResourceWithStreamingResponse: + from .resources.onchain import AsyncOnchainResourceWithStreamingResponse + + return AsyncOnchainResourceWithStreamingResponse(self._client.onchain) + + @cached_property + def ping(self) -> ping.AsyncPingResourceWithStreamingResponse: + from .resources.ping import AsyncPingResourceWithStreamingResponse + + return AsyncPingResourceWithStreamingResponse(self._client.ping) + + @cached_property + def public_treasury(self) -> public_treasury.AsyncPublicTreasuryResourceWithStreamingResponse: + from .resources.public_treasury import AsyncPublicTreasuryResourceWithStreamingResponse + + return AsyncPublicTreasuryResourceWithStreamingResponse(self._client.public_treasury) + + @cached_property + def search(self) -> search.AsyncSearchResourceWithStreamingResponse: + from .resources.search import AsyncSearchResourceWithStreamingResponse + + return AsyncSearchResourceWithStreamingResponse(self._client.search) + + @cached_property + def simple(self) -> simple.AsyncSimpleResourceWithStreamingResponse: + from .resources.simple import AsyncSimpleResourceWithStreamingResponse + + return AsyncSimpleResourceWithStreamingResponse(self._client.simple) + + @cached_property + def token_lists(self) -> token_lists.AsyncTokenListsResourceWithStreamingResponse: + from .resources.token_lists import AsyncTokenListsResourceWithStreamingResponse + + return AsyncTokenListsResourceWithStreamingResponse(self._client.token_lists) Client = Coingecko diff --git a/src/coingecko_sdk/_streaming.py b/src/coingecko_sdk/_streaming.py index 2ca0b88..c727889 100644 --- a/src/coingecko_sdk/_streaming.py +++ b/src/coingecko_sdk/_streaming.py @@ -54,11 +54,12 @@ def __stream__(self) -> Iterator[_T]: process_data = self._client._process_response_data iterator = self._iter_events() - for sse in iterator: - yield process_data(data=sse.json(), cast_to=cast_to, response=response) - - # As we might not fully consume the response stream, we need to close it explicitly - response.close() + try: + for sse in iterator: + yield process_data(data=sse.json(), cast_to=cast_to, response=response) + finally: + # Ensure the response is closed even if the consumer doesn't read all data + response.close() def __enter__(self) -> Self: return self @@ -117,11 +118,12 @@ async def __stream__(self) -> AsyncIterator[_T]: process_data = self._client._process_response_data iterator = self._iter_events() - async for sse in iterator: - yield process_data(data=sse.json(), cast_to=cast_to, response=response) - - # As we might not fully consume the response stream, we need to close it explicitly - await response.aclose() + try: + async for sse in iterator: + yield process_data(data=sse.json(), cast_to=cast_to, response=response) + finally: + # Ensure the response is closed even if the consumer doesn't read all data + await response.aclose() async def __aenter__(self) -> Self: return self diff --git a/src/coingecko_sdk/_types.py b/src/coingecko_sdk/_types.py index 6e133d1..5bb7a15 100644 --- a/src/coingecko_sdk/_types.py +++ b/src/coingecko_sdk/_types.py @@ -243,6 +243,9 @@ class HttpxSendArgs(TypedDict, total=False): if TYPE_CHECKING: # This works because str.__contains__ does not accept object (either in typeshed or at runtime) # https://github.com/hauntsaninja/useful_types/blob/5e9710f3875107d068e7679fd7fec9cfab0eff3b/useful_types/__init__.py#L285 + # + # Note: index() and count() methods are intentionally omitted to allow pyright to properly + # infer TypedDict types when dict literals are used in lists assigned to SequenceNotStr. class SequenceNotStr(Protocol[_T_co]): @overload def __getitem__(self, index: SupportsIndex, /) -> _T_co: ... @@ -251,8 +254,6 @@ def __getitem__(self, index: slice, /) -> Sequence[_T_co]: ... def __contains__(self, value: object, /) -> bool: ... def __len__(self) -> int: ... def __iter__(self) -> Iterator[_T_co]: ... - def index(self, value: Any, start: int = 0, stop: int = ..., /) -> int: ... - def count(self, value: Any, /) -> int: ... def __reversed__(self) -> Iterator[_T_co]: ... else: # just point this to a normal `Sequence` at runtime to avoid having to special case diff --git a/src/coingecko_sdk/_version.py b/src/coingecko_sdk/_version.py index 91a66e9..3ee956f 100644 --- a/src/coingecko_sdk/_version.py +++ b/src/coingecko_sdk/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "coingecko_sdk" -__version__ = "1.11.2" # x-release-please-version +__version__ = "1.11.3" # x-release-please-version diff --git a/src/coingecko_sdk/types/asset_platform_get_response.py b/src/coingecko_sdk/types/asset_platform_get_response.py index 12bd10e..6ecdafd 100644 --- a/src/coingecko_sdk/types/asset_platform_get_response.py +++ b/src/coingecko_sdk/types/asset_platform_get_response.py @@ -9,6 +9,8 @@ class AssetPlatformGetResponseItemImage(BaseModel): + """image of the asset platform""" + large: Optional[str] = None small: Optional[str] = None diff --git a/src/coingecko_sdk/types/coin_get_id_response.py b/src/coingecko_sdk/types/coin_get_id_response.py index e12915d..1cddaf0 100644 --- a/src/coingecko_sdk/types/coin_get_id_response.py +++ b/src/coingecko_sdk/types/coin_get_id_response.py @@ -45,6 +45,8 @@ class CommunityData(BaseModel): + """coin community data""" + facebook_likes: Optional[float] = None """coin facebook likes""" @@ -73,12 +75,16 @@ class DetailPlatforms(BaseModel): class DeveloperDataCodeAdditionsDeletions4Weeks(BaseModel): + """coin code additions and deletions in 4 weeks""" + additions: Optional[float] = None deletions: Optional[float] = None class DeveloperData(BaseModel): + """coin developer data""" + closed_issues: Optional[float] = None """coin repository closed issues""" @@ -111,6 +117,8 @@ class DeveloperData(BaseModel): class Image(BaseModel): + """coin image url""" + large: Optional[str] = None small: Optional[str] = None @@ -119,6 +127,8 @@ class Image(BaseModel): class LinksReposURL(BaseModel): + """coin repository url""" + bitbucket: Optional[List[str]] = None """coin bitbucket repository url""" @@ -127,6 +137,8 @@ class LinksReposURL(BaseModel): class Links(BaseModel): + """links""" + announcement_url: Optional[List[str]] = None """coin announcement url""" @@ -168,6 +180,8 @@ class Links(BaseModel): class MarketDataAth(BaseModel): + """coin all time high (ATH) in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -176,6 +190,8 @@ class MarketDataAth(BaseModel): class MarketDataAthChangePercentage(BaseModel): + """coin all time high (ATH) change in percentage""" + btc: Optional[float] = None eur: Optional[float] = None @@ -184,6 +200,8 @@ class MarketDataAthChangePercentage(BaseModel): class MarketDataAthDate(BaseModel): + """coin all time high (ATH) date""" + btc: Optional[str] = None eur: Optional[str] = None @@ -192,6 +210,8 @@ class MarketDataAthDate(BaseModel): class MarketDataAtl(BaseModel): + """coin all time low (atl) in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -200,6 +220,8 @@ class MarketDataAtl(BaseModel): class MarketDataAtlChangePercentage(BaseModel): + """coin all time low (atl) change in percentage""" + btc: Optional[float] = None eur: Optional[float] = None @@ -208,6 +230,8 @@ class MarketDataAtlChangePercentage(BaseModel): class MarketDataAtlDate(BaseModel): + """coin all time low (atl) date""" + btc: Optional[str] = None eur: Optional[str] = None @@ -216,6 +240,8 @@ class MarketDataAtlDate(BaseModel): class MarketDataCurrentPrice(BaseModel): + """coin current price in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -224,6 +250,8 @@ class MarketDataCurrentPrice(BaseModel): class MarketDataFullyDilutedValuation(BaseModel): + """coin fully diluted valuation (fdv) in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -232,6 +260,8 @@ class MarketDataFullyDilutedValuation(BaseModel): class MarketDataHigh24h(BaseModel): + """coin 24hr price high in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -240,6 +270,8 @@ class MarketDataHigh24h(BaseModel): class MarketDataLow24h(BaseModel): + """coin 24hr price low in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -248,6 +280,8 @@ class MarketDataLow24h(BaseModel): class MarketDataMarketCap(BaseModel): + """coin market cap in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -256,6 +290,8 @@ class MarketDataMarketCap(BaseModel): class MarketDataMarketCapChange24hInCurrency(BaseModel): + """coin 24hr market cap change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -264,6 +300,8 @@ class MarketDataMarketCapChange24hInCurrency(BaseModel): class MarketDataMarketCapChangePercentage24hInCurrency(BaseModel): + """coin 24hr market cap change in percentage""" + btc: Optional[float] = None eur: Optional[float] = None @@ -272,6 +310,8 @@ class MarketDataMarketCapChangePercentage24hInCurrency(BaseModel): class MarketDataPriceChangePercentage14dInCurrency(BaseModel): + """coin 14d price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -280,6 +320,8 @@ class MarketDataPriceChangePercentage14dInCurrency(BaseModel): class MarketDataPriceChangePercentage1hInCurrency(BaseModel): + """coin 1h price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -288,6 +330,8 @@ class MarketDataPriceChangePercentage1hInCurrency(BaseModel): class MarketDataPriceChangePercentage1yInCurrency(BaseModel): + """coin 1y price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -296,6 +340,8 @@ class MarketDataPriceChangePercentage1yInCurrency(BaseModel): class MarketDataPriceChangePercentage200dInCurrency(BaseModel): + """coin 200d price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -304,6 +350,8 @@ class MarketDataPriceChangePercentage200dInCurrency(BaseModel): class MarketDataPriceChangePercentage24hInCurrency(BaseModel): + """coin 24hr price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -312,6 +360,8 @@ class MarketDataPriceChangePercentage24hInCurrency(BaseModel): class MarketDataPriceChangePercentage30dInCurrency(BaseModel): + """coin 30d price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -320,6 +370,8 @@ class MarketDataPriceChangePercentage30dInCurrency(BaseModel): class MarketDataPriceChangePercentage60dInCurrency(BaseModel): + """coin 60d price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -328,6 +380,8 @@ class MarketDataPriceChangePercentage60dInCurrency(BaseModel): class MarketDataPriceChangePercentage7dInCurrency(BaseModel): + """coin 7d price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -336,6 +390,8 @@ class MarketDataPriceChangePercentage7dInCurrency(BaseModel): class MarketDataTotalVolume(BaseModel): + """coin total trading volume in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -344,6 +400,8 @@ class MarketDataTotalVolume(BaseModel): class MarketData(BaseModel): + """coin market data""" + ath: Optional[MarketDataAth] = None """coin all time high (ATH) in currency""" @@ -472,6 +530,8 @@ class MarketData(BaseModel): class TickerConvertedLast(BaseModel): + """coin ticker converted last price""" + btc: Optional[float] = None eth: Optional[float] = None @@ -480,6 +540,8 @@ class TickerConvertedLast(BaseModel): class TickerConvertedVolume(BaseModel): + """coin ticker converted volume""" + btc: Optional[float] = None eth: Optional[float] = None @@ -488,6 +550,8 @@ class TickerConvertedVolume(BaseModel): class TickerMarket(BaseModel): + """coin ticker exchange""" + has_trading_incentive: Optional[bool] = None """coin ticker exchange trading incentive""" diff --git a/src/coingecko_sdk/types/coins/contract_get_response.py b/src/coingecko_sdk/types/coins/contract_get_response.py index 080483b..10cba95 100644 --- a/src/coingecko_sdk/types/coins/contract_get_response.py +++ b/src/coingecko_sdk/types/coins/contract_get_response.py @@ -45,6 +45,8 @@ class CommunityData(BaseModel): + """coin community data""" + facebook_likes: Optional[float] = None """coin facebook likes""" @@ -73,12 +75,16 @@ class DetailPlatforms(BaseModel): class DeveloperDataCodeAdditionsDeletions4Weeks(BaseModel): + """coin code additions and deletions in 4 weeks""" + additions: Optional[float] = None deletions: Optional[float] = None class DeveloperData(BaseModel): + """coin developer data""" + closed_issues: Optional[float] = None """coin repository closed issues""" @@ -111,6 +117,8 @@ class DeveloperData(BaseModel): class Image(BaseModel): + """coin image url""" + large: Optional[str] = None small: Optional[str] = None @@ -119,6 +127,8 @@ class Image(BaseModel): class LinksReposURL(BaseModel): + """coin repository url""" + bitbucket: Optional[List[str]] = None """coin bitbucket repository url""" @@ -127,6 +137,8 @@ class LinksReposURL(BaseModel): class Links(BaseModel): + """links""" + announcement_url: Optional[List[str]] = None """coin announcement url""" @@ -168,6 +180,8 @@ class Links(BaseModel): class MarketDataAth(BaseModel): + """coin all time high (ATH) in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -176,6 +190,8 @@ class MarketDataAth(BaseModel): class MarketDataAthChangePercentage(BaseModel): + """coin all time high (ATH) change in percentage""" + btc: Optional[float] = None eur: Optional[float] = None @@ -184,6 +200,8 @@ class MarketDataAthChangePercentage(BaseModel): class MarketDataAthDate(BaseModel): + """coin all time high (ATH) date""" + btc: Optional[str] = None eur: Optional[str] = None @@ -192,6 +210,8 @@ class MarketDataAthDate(BaseModel): class MarketDataAtl(BaseModel): + """coin all time low (atl) in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -200,6 +220,8 @@ class MarketDataAtl(BaseModel): class MarketDataAtlChangePercentage(BaseModel): + """coin all time low (atl) change in percentage""" + btc: Optional[float] = None eur: Optional[float] = None @@ -208,6 +230,8 @@ class MarketDataAtlChangePercentage(BaseModel): class MarketDataAtlDate(BaseModel): + """coin all time low (atl) date""" + btc: Optional[str] = None eur: Optional[str] = None @@ -216,6 +240,8 @@ class MarketDataAtlDate(BaseModel): class MarketDataCurrentPrice(BaseModel): + """coin current price in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -224,6 +250,8 @@ class MarketDataCurrentPrice(BaseModel): class MarketDataFullyDilutedValuation(BaseModel): + """coin fully diluted valuation (fdv) in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -232,6 +260,8 @@ class MarketDataFullyDilutedValuation(BaseModel): class MarketDataHigh24h(BaseModel): + """coin 24hr price high in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -240,6 +270,8 @@ class MarketDataHigh24h(BaseModel): class MarketDataLow24h(BaseModel): + """coin 24hr price low in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -248,6 +280,8 @@ class MarketDataLow24h(BaseModel): class MarketDataMarketCap(BaseModel): + """coin market cap in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -256,6 +290,8 @@ class MarketDataMarketCap(BaseModel): class MarketDataMarketCapChange24hInCurrency(BaseModel): + """coin 24hr market cap change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -264,6 +300,8 @@ class MarketDataMarketCapChange24hInCurrency(BaseModel): class MarketDataMarketCapChangePercentage24hInCurrency(BaseModel): + """coin 24hr market cap change in percentage""" + btc: Optional[float] = None eur: Optional[float] = None @@ -272,6 +310,8 @@ class MarketDataMarketCapChangePercentage24hInCurrency(BaseModel): class MarketDataPriceChangePercentage14dInCurrency(BaseModel): + """coin 14d price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -280,6 +320,8 @@ class MarketDataPriceChangePercentage14dInCurrency(BaseModel): class MarketDataPriceChangePercentage1hInCurrency(BaseModel): + """coin 1h price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -288,6 +330,8 @@ class MarketDataPriceChangePercentage1hInCurrency(BaseModel): class MarketDataPriceChangePercentage1yInCurrency(BaseModel): + """coin 1y price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -296,6 +340,8 @@ class MarketDataPriceChangePercentage1yInCurrency(BaseModel): class MarketDataPriceChangePercentage200dInCurrency(BaseModel): + """coin 200d price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -304,6 +350,8 @@ class MarketDataPriceChangePercentage200dInCurrency(BaseModel): class MarketDataPriceChangePercentage24hInCurrency(BaseModel): + """coin 24hr price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -312,6 +360,8 @@ class MarketDataPriceChangePercentage24hInCurrency(BaseModel): class MarketDataPriceChangePercentage30dInCurrency(BaseModel): + """coin 30d price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -320,6 +370,8 @@ class MarketDataPriceChangePercentage30dInCurrency(BaseModel): class MarketDataPriceChangePercentage60dInCurrency(BaseModel): + """coin 60d price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -328,6 +380,8 @@ class MarketDataPriceChangePercentage60dInCurrency(BaseModel): class MarketDataPriceChangePercentage7dInCurrency(BaseModel): + """coin 7d price change in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -336,6 +390,8 @@ class MarketDataPriceChangePercentage7dInCurrency(BaseModel): class MarketDataTotalVolume(BaseModel): + """coin total trading volume in currency""" + btc: Optional[float] = None eur: Optional[float] = None @@ -344,6 +400,8 @@ class MarketDataTotalVolume(BaseModel): class MarketData(BaseModel): + """coin market data""" + ath: Optional[MarketDataAth] = None """coin all time high (ATH) in currency""" @@ -472,6 +530,8 @@ class MarketData(BaseModel): class TickerConvertedLast(BaseModel): + """coin ticker converted last price""" + btc: Optional[float] = None eth: Optional[float] = None @@ -480,6 +540,8 @@ class TickerConvertedLast(BaseModel): class TickerConvertedVolume(BaseModel): + """coin ticker converted volume""" + btc: Optional[float] = None eth: Optional[float] = None @@ -488,6 +550,8 @@ class TickerConvertedVolume(BaseModel): class TickerMarket(BaseModel): + """coin ticker exchange""" + has_trading_incentive: Optional[bool] = None """coin ticker exchange trading incentive""" diff --git a/src/coingecko_sdk/types/coins/history_get_response.py b/src/coingecko_sdk/types/coins/history_get_response.py index 7b60ac3..3c03e31 100644 --- a/src/coingecko_sdk/types/coins/history_get_response.py +++ b/src/coingecko_sdk/types/coins/history_get_response.py @@ -19,6 +19,8 @@ class CommunityData(BaseModel): + """coin community data""" + facebook_likes: Optional[float] = None """coin facebook likes""" @@ -36,12 +38,16 @@ class CommunityData(BaseModel): class DeveloperDataCodeAdditionsDeletions4Weeks(BaseModel): + """coin code additions deletions 4 weeks""" + additions: Optional[float] = None deletions: Optional[float] = None class DeveloperData(BaseModel): + """coin developer data""" + closed_issues: Optional[float] = None """coin repository closed issues""" @@ -71,12 +77,16 @@ class DeveloperData(BaseModel): class Image(BaseModel): + """coin image url""" + small: Optional[str] = None thumb: Optional[str] = None class MarketDataCurrentPrice(BaseModel): + """coin current price""" + btc: Optional[float] = None eur: Optional[float] = None @@ -85,6 +95,8 @@ class MarketDataCurrentPrice(BaseModel): class MarketDataMarketCap(BaseModel): + """coin market cap""" + btc: Optional[float] = None eur: Optional[float] = None @@ -93,6 +105,8 @@ class MarketDataMarketCap(BaseModel): class MarketDataTotalVolume(BaseModel): + """coin total volume""" + btc: Optional[float] = None eur: Optional[float] = None @@ -101,6 +115,8 @@ class MarketDataTotalVolume(BaseModel): class MarketData(BaseModel): + """coin market data""" + current_price: Optional[MarketDataCurrentPrice] = None """coin current price""" @@ -112,6 +128,8 @@ class MarketData(BaseModel): class PublicInterestStats(BaseModel): + """coin public interest stats""" + alexa_rank: Optional[float] = None """coin alexa rank""" diff --git a/src/coingecko_sdk/types/coins/market_get_response.py b/src/coingecko_sdk/types/coins/market_get_response.py index 4a5ff67..787862e 100644 --- a/src/coingecko_sdk/types/coins/market_get_response.py +++ b/src/coingecko_sdk/types/coins/market_get_response.py @@ -10,6 +10,8 @@ class MarketGetResponseItemRoi(BaseModel): + """return on investment data""" + currency: str """ROI currency""" diff --git a/src/coingecko_sdk/types/coins/ticker_get_response.py b/src/coingecko_sdk/types/coins/ticker_get_response.py index 4459f29..97e6912 100644 --- a/src/coingecko_sdk/types/coins/ticker_get_response.py +++ b/src/coingecko_sdk/types/coins/ticker_get_response.py @@ -8,6 +8,8 @@ class TickerConvertedLast(BaseModel): + """coin ticker converted last price""" + btc: Optional[float] = None eth: Optional[float] = None @@ -16,6 +18,8 @@ class TickerConvertedLast(BaseModel): class TickerConvertedVolume(BaseModel): + """coin ticker converted volume""" + btc: Optional[float] = None eth: Optional[float] = None @@ -24,6 +28,8 @@ class TickerConvertedVolume(BaseModel): class TickerMarket(BaseModel): + """coin ticker exchange""" + has_trading_incentive: bool """exchange trading incentive""" diff --git a/src/coingecko_sdk/types/exchange_get_id_response.py b/src/coingecko_sdk/types/exchange_get_id_response.py index 320a4d1..3eb72ae 100644 --- a/src/coingecko_sdk/types/exchange_get_id_response.py +++ b/src/coingecko_sdk/types/exchange_get_id_response.py @@ -15,6 +15,8 @@ class TickerTickerConvertedLast(BaseModel): + """coin ticker converted last price""" + btc: Optional[float] = None eth: Optional[float] = None @@ -23,6 +25,8 @@ class TickerTickerConvertedLast(BaseModel): class TickerTickerConvertedVolume(BaseModel): + """coin ticker converted volume""" + btc: Optional[float] = None eth: Optional[float] = None @@ -31,6 +35,8 @@ class TickerTickerConvertedVolume(BaseModel): class TickerTickerMarket(BaseModel): + """coin ticker exchange""" + has_trading_incentive: bool """exchange trading incentive""" diff --git a/src/coingecko_sdk/types/exchanges/ticker_get_response.py b/src/coingecko_sdk/types/exchanges/ticker_get_response.py index 4459f29..97e6912 100644 --- a/src/coingecko_sdk/types/exchanges/ticker_get_response.py +++ b/src/coingecko_sdk/types/exchanges/ticker_get_response.py @@ -8,6 +8,8 @@ class TickerConvertedLast(BaseModel): + """coin ticker converted last price""" + btc: Optional[float] = None eth: Optional[float] = None @@ -16,6 +18,8 @@ class TickerConvertedLast(BaseModel): class TickerConvertedVolume(BaseModel): + """coin ticker converted volume""" + btc: Optional[float] = None eth: Optional[float] = None @@ -24,6 +28,8 @@ class TickerConvertedVolume(BaseModel): class TickerMarket(BaseModel): + """coin ticker exchange""" + has_trading_incentive: bool """exchange trading incentive""" diff --git a/src/coingecko_sdk/types/global_get_response.py b/src/coingecko_sdk/types/global_get_response.py index 044c20d..1a4fb5b 100644 --- a/src/coingecko_sdk/types/global_get_response.py +++ b/src/coingecko_sdk/types/global_get_response.py @@ -8,18 +8,24 @@ class DataMarketCapPercentage(BaseModel): + """cryptocurrencies market cap percentage""" + btc: Optional[float] = None eth: Optional[float] = None class DataTotalMarketCap(BaseModel): + """cryptocurrencies total market cap""" + btc: Optional[float] = None eth: Optional[float] = None class DataTotalVolume(BaseModel): + """cryptocurrencies total volume""" + btc: Optional[float] = None eth: Optional[float] = None diff --git a/src/coingecko_sdk/types/nft_get_id_response.py b/src/coingecko_sdk/types/nft_get_id_response.py index 22f9639..39fb8a9 100644 --- a/src/coingecko_sdk/types/nft_get_id_response.py +++ b/src/coingecko_sdk/types/nft_get_id_response.py @@ -29,24 +29,32 @@ class Ath(BaseModel): + """NFT collection all time highs""" + native_currency: Optional[float] = None usd: Optional[float] = None class AthChangePercentage(BaseModel): + """NFT collection all time highs change percentage""" + native_currency: Optional[float] = None usd: Optional[float] = None class AthDate(BaseModel): + """NFT collection all time highs date""" + native_currency: Optional[datetime] = None usd: Optional[datetime] = None class BannerImage(BaseModel): + """NFT collection banner image url""" + small: Optional[str] = None @@ -57,18 +65,24 @@ class Explorer(BaseModel): class FloorPrice(BaseModel): + """NFT collection floor price""" + native_currency: Optional[float] = None usd: Optional[float] = None class FloorPrice14dPercentageChange(BaseModel): + """NFT collection floor price 14 days percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class FloorPrice1yPercentageChange(BaseModel): + """NFT collection floor price 1 year percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None @@ -81,30 +95,40 @@ class FloorPrice24hPercentageChange(BaseModel): class FloorPrice30dPercentageChange(BaseModel): + """NFT collection floor price 30 days percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class FloorPrice60dPercentageChange(BaseModel): + """NFT collection floor price 60 days percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class FloorPrice7dPercentageChange(BaseModel): + """NFT collection floor price 7 days percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class Image(BaseModel): + """NFT collection image url""" + small: Optional[str] = None small_2x: Optional[str] = None class Links(BaseModel): + """NFT collection links""" + discord: Optional[str] = None homepage: Optional[str] = None @@ -113,24 +137,32 @@ class Links(BaseModel): class MarketCap(BaseModel): + """NFT collection market cap""" + native_currency: Optional[float] = None usd: Optional[float] = None class MarketCap24hPercentageChange(BaseModel): + """NFT collection market cap 24 hours percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class Volume24h(BaseModel): + """NFT collection volume in 24 hours""" + native_currency: Optional[float] = None usd: Optional[float] = None class Volume24hPercentageChange(BaseModel): + """NFT collection volume in 24 hours percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None diff --git a/src/coingecko_sdk/types/nft_get_markets_response.py b/src/coingecko_sdk/types/nft_get_markets_response.py index 038a751..fd4100d 100644 --- a/src/coingecko_sdk/types/nft_get_markets_response.py +++ b/src/coingecko_sdk/types/nft_get_markets_response.py @@ -19,42 +19,56 @@ class NFTGetMarketsResponseItemFloorPrice(BaseModel): + """NFT collection floor price""" + native_currency: Optional[float] = None usd: Optional[float] = None class NFTGetMarketsResponseItemFloorPrice24hPercentageChange(BaseModel): + """NFT collection floor price 24 hours percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class NFTGetMarketsResponseItemImage(BaseModel): + """NFT collection image url""" + small: Optional[str] = None small_2x: Optional[str] = None class NFTGetMarketsResponseItemMarketCap(BaseModel): + """NFT collection market cap""" + native_currency: Optional[float] = None usd: Optional[float] = None class NFTGetMarketsResponseItemMarketCap24hPercentageChange(BaseModel): + """NFT collection market cap 24 hours percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class NFTGetMarketsResponseItemVolume24h(BaseModel): + """NFT collection volume in 24 hours""" + native_currency: Optional[float] = None usd: Optional[float] = None class NFTGetMarketsResponseItemVolume24hPercentageChange(BaseModel): + """NFT collection volume in 24 hours percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None diff --git a/src/coingecko_sdk/types/nfts/contract_get_contract_address_response.py b/src/coingecko_sdk/types/nfts/contract_get_contract_address_response.py index 3c29aa9..9f49c8a 100644 --- a/src/coingecko_sdk/types/nfts/contract_get_contract_address_response.py +++ b/src/coingecko_sdk/types/nfts/contract_get_contract_address_response.py @@ -29,24 +29,32 @@ class Ath(BaseModel): + """NFT collection all time highs""" + native_currency: Optional[float] = None usd: Optional[float] = None class AthChangePercentage(BaseModel): + """NFT collection all time highs change percentage""" + native_currency: Optional[float] = None usd: Optional[float] = None class AthDate(BaseModel): + """NFT collection all time highs date""" + native_currency: Optional[datetime] = None usd: Optional[datetime] = None class BannerImage(BaseModel): + """NFT collection banner image url""" + small: Optional[str] = None @@ -57,18 +65,24 @@ class Explorer(BaseModel): class FloorPrice(BaseModel): + """NFT collection floor price""" + native_currency: Optional[float] = None usd: Optional[float] = None class FloorPrice14dPercentageChange(BaseModel): + """NFT collection floor price 14 days percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class FloorPrice1yPercentageChange(BaseModel): + """NFT collection floor price 1 year percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None @@ -81,30 +95,40 @@ class FloorPrice24hPercentageChange(BaseModel): class FloorPrice30dPercentageChange(BaseModel): + """NFT collection floor price 30 days percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class FloorPrice60dPercentageChange(BaseModel): + """NFT collection floor price 60 days percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class FloorPrice7dPercentageChange(BaseModel): + """NFT collection floor price 7 days percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class Image(BaseModel): + """NFT collection image url""" + small: Optional[str] = None small_2x: Optional[str] = None class Links(BaseModel): + """NFT collection links""" + discord: Optional[str] = None homepage: Optional[str] = None @@ -113,24 +137,32 @@ class Links(BaseModel): class MarketCap(BaseModel): + """NFT collection market cap""" + native_currency: Optional[float] = None usd: Optional[float] = None class MarketCap24hPercentageChange(BaseModel): + """NFT collection market cap 24 hours percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None class Volume24h(BaseModel): + """NFT collection volume in 24 hours""" + native_currency: Optional[float] = None usd: Optional[float] = None class Volume24hPercentageChange(BaseModel): + """NFT collection volume in 24 hours percentage change""" + native_currency: Optional[float] = None usd: Optional[float] = None diff --git a/src/coingecko_sdk/types/search/trending_get_response.py b/src/coingecko_sdk/types/search/trending_get_response.py index 7e27875..2a0c510 100644 --- a/src/coingecko_sdk/types/search/trending_get_response.py +++ b/src/coingecko_sdk/types/search/trending_get_response.py @@ -18,6 +18,8 @@ class CategoryDataMarketCapChangePercentage24h(BaseModel): + """category market cap change percentage in 24 hours""" + btc: Optional[float] = None usd: Optional[float] = None @@ -62,6 +64,8 @@ class Category(BaseModel): class CoinDataPriceChangePercentage24h(BaseModel): + """coin price change percentage in 24 hours""" + btc: Optional[float] = None usd: Optional[float] = None