diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 19cc6ed..65f558e 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.14.2" + ".": "2.0.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 9370ce5..8ed7920 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 84 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/coingecko%2Fcoingecko-e88de4e81cdb0547e40a951e747c95e7a9647577d8bee0ce5c5b4643a939ed3f.yml -openapi_spec_hash: d3b574a0f909b96fd93f1f46a2f8efde -config_hash: f101f417dba7f9352f7573639dd5938f +configured_endpoints: 85 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/coingecko/coingecko-705ab95ba3a2ad5b97b9a9a8d942a52f918da8b2544b1a156846dd438c1d26d4.yml +openapi_spec_hash: 82c4000d4dbeb57eabac6bb6cf9e3dc1 +config_hash: c77352c905b1a7d1ab31960e5195bddf diff --git a/CHANGELOG.md b/CHANGELOG.md index cfd33a3..ff97499 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Changelog +## 2.0.0 (2026-04-30) + +Full Changelog: [v1.14.2...v2.0.0](https://github.com/coingecko/coingecko-python/compare/v1.14.2...v2.0.0) + +### ⚠ BREAKING CHANGES + +* AIP updates; fix!: Pydantic response model + +### Features + +* AIP updates; fix!: Pydantic response model ([8c4629e](https://github.com/coingecko/coingecko-python/commit/8c4629e7c7431cc8925b757fd23c205816357ed6)) +* support setting headers via env ([3979340](https://github.com/coingecko/coingecko-python/commit/3979340037d5ec65908c8c9e8d21d67e6e770ae8)) + + +### Bug Fixes + +* use correct field name format for multipart file arrays ([5932ae6](https://github.com/coingecko/coingecko-python/commit/5932ae6d020e9841a92773aee20ea926b849945e)) + + +### Chores + +* **internal:** more robust bootstrap script ([e53a0fc](https://github.com/coingecko/coingecko-python/commit/e53a0fc7939c399537fefd1cf9d77044a1925c94)) + ## 1.14.2 (2026-04-18) Full Changelog: [v1.14.1...v1.14.2](https://github.com/coingecko/coingecko-python/compare/v1.14.1...v1.14.2) diff --git a/api.md b/api.md index 78b0814..7b0a611 100644 --- a/api.md +++ b/api.md @@ -15,7 +15,7 @@ Methods: Types: ```python -from coingecko_sdk.types import CoinGetIDResponse +from coingecko_sdk.types import DetailPlatformData, CoinGetIDResponse ``` Methods: @@ -317,6 +317,18 @@ Methods: - client.key.get() -> KeyGetResponse +# News + +Types: + +```python +from coingecko_sdk.types import NewsGetResponse +``` + +Methods: + +- client.news.get(\*\*params) -> NewsGetResponse + # NFTs Types: @@ -453,7 +465,7 @@ Methods: Types: ```python -from coingecko_sdk.types.onchain.networks import PoolGetResponse, PoolGetAddressResponse +from coingecko_sdk.types.onchain.networks import PoolData, PoolGetResponse, PoolGetAddressResponse ``` Methods: @@ -705,6 +717,7 @@ Types: ```python from coingecko_sdk.types import ( + TreasuryEntity, PublicTreasuryGetCoinIDResponse, PublicTreasuryGetEntityIDResponse, PublicTreasuryGetHoldingChartResponse, diff --git a/pyproject.toml b/pyproject.toml index 4f1c622..06f009d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "coingecko_sdk" -version = "1.14.2" +version = "2.0.0" description = "The official Python library for the coingecko API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/scripts/bootstrap b/scripts/bootstrap index b430fee..fe8451e 100755 --- a/scripts/bootstrap +++ b/scripts/bootstrap @@ -4,7 +4,7 @@ set -e cd "$(dirname "$0")/.." -if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ] && [ -t 0 ]; then +if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "${SKIP_BREW:-}" != "1" ] && [ -t 0 ]; then brew bundle check >/dev/null 2>&1 || { echo -n "==> Install Homebrew dependencies? (y/N): " read -r response diff --git a/src/coingecko_sdk/_client.py b/src/coingecko_sdk/_client.py index 7d6faad..396970b 100644 --- a/src/coingecko_sdk/_client.py +++ b/src/coingecko_sdk/_client.py @@ -20,7 +20,11 @@ RequestOptions, not_given, ) -from ._utils import is_given, get_async_library +from ._utils import ( + is_given, + is_mapping_t, + get_async_library, +) from ._compat import cached_property from ._version import __version__ from ._streaming import Stream as Stream, AsyncStream as AsyncStream @@ -34,6 +38,7 @@ if TYPE_CHECKING: from .resources import ( key, + news, nfts, ping, coins, @@ -50,6 +55,7 @@ public_treasury, ) from .resources.key import KeyResource, AsyncKeyResource + from .resources.news import NewsResource, AsyncNewsResource from .resources.ping import PingResource, AsyncPingResource from .resources.entities import EntitiesResource, AsyncEntitiesResource from .resources.nfts.nfts import NFTsResource, AsyncNFTsResource @@ -155,6 +161,15 @@ def __init__( except KeyError as exc: raise ValueError(f"Unknown environment: {environment}") from exc + custom_headers_env = os.environ.get("COINGECKO_CUSTOM_HEADERS") + if custom_headers_env is not None: + parsed: dict[str, str] = {} + for line in custom_headers_env.split("\n"): + colon = line.find(":") + if colon >= 0: + parsed[line[:colon].strip()] = line[colon + 1 :].strip() + default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})} + super().__init__( version=__version__, base_url=base_url, @@ -214,6 +229,12 @@ def key(self) -> KeyResource: return KeyResource(self) + @cached_property + def news(self) -> NewsResource: + from .resources.news import NewsResource + + return NewsResource(self) + @cached_property def nfts(self) -> NFTsResource: from .resources.nfts import NFTsResource @@ -470,6 +491,15 @@ def __init__( except KeyError as exc: raise ValueError(f"Unknown environment: {environment}") from exc + custom_headers_env = os.environ.get("COINGECKO_CUSTOM_HEADERS") + if custom_headers_env is not None: + parsed: dict[str, str] = {} + for line in custom_headers_env.split("\n"): + colon = line.find(":") + if colon >= 0: + parsed[line[:colon].strip()] = line[colon + 1 :].strip() + default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})} + super().__init__( version=__version__, base_url=base_url, @@ -529,6 +559,12 @@ def key(self) -> AsyncKeyResource: return AsyncKeyResource(self) + @cached_property + def news(self) -> AsyncNewsResource: + from .resources.news import AsyncNewsResource + + return AsyncNewsResource(self) + @cached_property def nfts(self) -> AsyncNFTsResource: from .resources.nfts import AsyncNFTsResource @@ -767,6 +803,12 @@ def key(self) -> key.KeyResourceWithRawResponse: return KeyResourceWithRawResponse(self._client.key) + @cached_property + def news(self) -> news.NewsResourceWithRawResponse: + from .resources.news import NewsResourceWithRawResponse + + return NewsResourceWithRawResponse(self._client.news) + @cached_property def nfts(self) -> nfts.NFTsResourceWithRawResponse: from .resources.nfts import NFTsResourceWithRawResponse @@ -864,6 +906,12 @@ def key(self) -> key.AsyncKeyResourceWithRawResponse: return AsyncKeyResourceWithRawResponse(self._client.key) + @cached_property + def news(self) -> news.AsyncNewsResourceWithRawResponse: + from .resources.news import AsyncNewsResourceWithRawResponse + + return AsyncNewsResourceWithRawResponse(self._client.news) + @cached_property def nfts(self) -> nfts.AsyncNFTsResourceWithRawResponse: from .resources.nfts import AsyncNFTsResourceWithRawResponse @@ -961,6 +1009,12 @@ def key(self) -> key.KeyResourceWithStreamingResponse: return KeyResourceWithStreamingResponse(self._client.key) + @cached_property + def news(self) -> news.NewsResourceWithStreamingResponse: + from .resources.news import NewsResourceWithStreamingResponse + + return NewsResourceWithStreamingResponse(self._client.news) + @cached_property def nfts(self) -> nfts.NFTsResourceWithStreamingResponse: from .resources.nfts import NFTsResourceWithStreamingResponse @@ -1058,6 +1112,12 @@ def key(self) -> key.AsyncKeyResourceWithStreamingResponse: return AsyncKeyResourceWithStreamingResponse(self._client.key) + @cached_property + def news(self) -> news.AsyncNewsResourceWithStreamingResponse: + from .resources.news import AsyncNewsResourceWithStreamingResponse + + return AsyncNewsResourceWithStreamingResponse(self._client.news) + @cached_property def nfts(self) -> nfts.AsyncNFTsResourceWithStreamingResponse: from .resources.nfts import AsyncNFTsResourceWithStreamingResponse diff --git a/src/coingecko_sdk/_qs.py b/src/coingecko_sdk/_qs.py index de8c99b..4127c19 100644 --- a/src/coingecko_sdk/_qs.py +++ b/src/coingecko_sdk/_qs.py @@ -2,17 +2,13 @@ from typing import Any, List, Tuple, Union, Mapping, TypeVar from urllib.parse import parse_qs, urlencode -from typing_extensions import Literal, get_args +from typing_extensions import get_args -from ._types import NotGiven, not_given +from ._types import NotGiven, ArrayFormat, NestedFormat, not_given from ._utils import flatten _T = TypeVar("_T") - -ArrayFormat = Literal["comma", "repeat", "indices", "brackets"] -NestedFormat = Literal["dots", "brackets"] - PrimitiveData = Union[str, int, float, bool, None] # this should be Data = Union[PrimitiveData, "List[Data]", "Tuple[Data]", "Mapping[str, Data]"] # https://github.com/microsoft/pyright/issues/3555 diff --git a/src/coingecko_sdk/_types.py b/src/coingecko_sdk/_types.py index e012547..050b47b 100644 --- a/src/coingecko_sdk/_types.py +++ b/src/coingecko_sdk/_types.py @@ -47,6 +47,9 @@ ModelT = TypeVar("ModelT", bound=pydantic.BaseModel) _T = TypeVar("_T") +ArrayFormat = Literal["comma", "repeat", "indices", "brackets"] +NestedFormat = Literal["dots", "brackets"] + # Approximates httpx internal ProxiesTypes and RequestFiles types # while adding support for `PathLike` instances diff --git a/src/coingecko_sdk/_utils/_utils.py b/src/coingecko_sdk/_utils/_utils.py index 771859f..199cd23 100644 --- a/src/coingecko_sdk/_utils/_utils.py +++ b/src/coingecko_sdk/_utils/_utils.py @@ -17,11 +17,11 @@ ) from pathlib import Path from datetime import date, datetime -from typing_extensions import TypeGuard +from typing_extensions import TypeGuard, get_args import sniffio -from .._types import Omit, NotGiven, FileTypes, HeadersLike +from .._types import Omit, NotGiven, FileTypes, ArrayFormat, HeadersLike _T = TypeVar("_T") _TupleT = TypeVar("_TupleT", bound=Tuple[object, ...]) @@ -40,25 +40,45 @@ def extract_files( query: Mapping[str, object], *, paths: Sequence[Sequence[str]], + array_format: ArrayFormat = "brackets", ) -> list[tuple[str, FileTypes]]: """Recursively extract files from the given dictionary based on specified paths. A path may look like this ['foo', 'files', '', 'data']. + ``array_format`` controls how ```` segments contribute to the emitted + field name. Supported values: ``"brackets"`` (``foo[]``), ``"repeat"`` and + ``"comma"`` (``foo``), ``"indices"`` (``foo[0]``, ``foo[1]``). + Note: this mutates the given dictionary. """ files: list[tuple[str, FileTypes]] = [] for path in paths: - files.extend(_extract_items(query, path, index=0, flattened_key=None)) + files.extend(_extract_items(query, path, index=0, flattened_key=None, array_format=array_format)) return files +def _array_suffix(array_format: ArrayFormat, array_index: int) -> str: + if array_format == "brackets": + return "[]" + if array_format == "indices": + return f"[{array_index}]" + if array_format == "repeat" or array_format == "comma": + # Both repeat the bare field name for each file part; there is no + # meaningful way to comma-join binary parts. + return "" + raise NotImplementedError( + f"Unknown array_format value: {array_format}, choose from {', '.join(get_args(ArrayFormat))}" + ) + + def _extract_items( obj: object, path: Sequence[str], *, index: int, flattened_key: str | None, + array_format: ArrayFormat, ) -> list[tuple[str, FileTypes]]: try: key = path[index] @@ -75,9 +95,11 @@ def _extract_items( if is_list(obj): files: list[tuple[str, FileTypes]] = [] - for entry in obj: - assert_is_file_content(entry, key=flattened_key + "[]" if flattened_key else "") - files.append((flattened_key + "[]", cast(FileTypes, entry))) + for array_index, entry in enumerate(obj): + suffix = _array_suffix(array_format, array_index) + emitted_key = (flattened_key + suffix) if flattened_key else suffix + assert_is_file_content(entry, key=emitted_key) + files.append((emitted_key, cast(FileTypes, entry))) return files assert_is_file_content(obj, key=flattened_key) @@ -106,6 +128,7 @@ def _extract_items( path, index=index, flattened_key=flattened_key, + array_format=array_format, ) elif is_list(obj): if key != "": @@ -117,9 +140,12 @@ def _extract_items( item, path, index=index, - flattened_key=flattened_key + "[]" if flattened_key is not None else "[]", + flattened_key=( + (flattened_key if flattened_key is not None else "") + _array_suffix(array_format, array_index) + ), + array_format=array_format, ) - for item in obj + for array_index, item in enumerate(obj) ] ) diff --git a/src/coingecko_sdk/_version.py b/src/coingecko_sdk/_version.py index d5107f8..c286659 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.14.2" # x-release-please-version +__version__ = "2.0.0" # x-release-please-version diff --git a/src/coingecko_sdk/resources/__init__.py b/src/coingecko_sdk/resources/__init__.py index 548be8c..4068ebc 100644 --- a/src/coingecko_sdk/resources/__init__.py +++ b/src/coingecko_sdk/resources/__init__.py @@ -8,6 +8,14 @@ KeyResourceWithStreamingResponse, AsyncKeyResourceWithStreamingResponse, ) +from .news import ( + NewsResource, + AsyncNewsResource, + NewsResourceWithRawResponse, + AsyncNewsResourceWithRawResponse, + NewsResourceWithStreamingResponse, + AsyncNewsResourceWithStreamingResponse, +) from .nfts import ( NFTsResource, AsyncNFTsResource, @@ -170,6 +178,12 @@ "AsyncKeyResourceWithRawResponse", "KeyResourceWithStreamingResponse", "AsyncKeyResourceWithStreamingResponse", + "NewsResource", + "AsyncNewsResource", + "NewsResourceWithRawResponse", + "AsyncNewsResourceWithRawResponse", + "NewsResourceWithStreamingResponse", + "AsyncNewsResourceWithStreamingResponse", "NFTsResource", "AsyncNFTsResource", "NFTsResourceWithRawResponse", diff --git a/src/coingecko_sdk/resources/news.py b/src/coingecko_sdk/resources/news.py new file mode 100644 index 0000000..9b8e2e9 --- /dev/null +++ b/src/coingecko_sdk/resources/news.py @@ -0,0 +1,293 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal + +import httpx + +from ..types import news_get_params +from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given +from .._utils import maybe_transform, async_maybe_transform +from .._compat import cached_property +from .._resource import SyncAPIResource, AsyncAPIResource +from .._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from .._base_client import make_request_options +from ..types.news_get_response import NewsGetResponse + +__all__ = ["NewsResource", "AsyncNewsResource"] + + +class NewsResource(SyncAPIResource): + @cached_property + def with_raw_response(self) -> NewsResourceWithRawResponse: + """ + This property can be used as a prefix for any HTTP method call to return + the raw response object instead of the parsed content. + + For more information, see https://www.github.com/coingecko/coingecko-python#accessing-raw-response-data-eg-headers + """ + return NewsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> NewsResourceWithStreamingResponse: + """ + An alternative to `.with_raw_response` that doesn't eagerly read the response body. + + For more information, see https://www.github.com/coingecko/coingecko-python#with_streaming_response + """ + return NewsResourceWithStreamingResponse(self) + + def get( + self, + *, + coin_id: str | Omit = omit, + language: Literal[ + "en", + "ru", + "de", + "pl", + "es", + "vi", + "fr", + "pt-br", + "ar", + "bg", + "cs", + "da", + "el", + "fi", + "he", + "hi", + "hr", + "hu", + "id", + "it", + "ja", + "ko", + "lt", + "nl", + "no", + "ro", + "sk", + "sl", + "sv", + "th", + "tr", + "uk", + "zh", + "zh-tw", + ] + | Omit = omit, + page: int | Omit = omit, + per_page: int | Omit = omit, + type: Literal["all", "news", "guides"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> NewsGetResponse: + """ + This endpoint allows you to **query the latest crypto news and guides on + CoinGecko** + + Args: + coin_id: filter news by coin ID \\**refers to [`/coins/list`](/reference/coins-list). + + language: filter news by language Default value: **en** + + page: page through results Default value: **1** + + per_page: total results per page Default value: **10** + + type: filter news by type Default value: **all** Note: `guides` filter is only + applicable if `coin_id` is specified and valid + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + return self._get( + "/news", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + { + "coin_id": coin_id, + "language": language, + "page": page, + "per_page": per_page, + "type": type, + }, + news_get_params.NewsGetParams, + ), + ), + cast_to=NewsGetResponse, + ) + + +class AsyncNewsResource(AsyncAPIResource): + @cached_property + def with_raw_response(self) -> AsyncNewsResourceWithRawResponse: + """ + This property can be used as a prefix for any HTTP method call to return + the raw response object instead of the parsed content. + + For more information, see https://www.github.com/coingecko/coingecko-python#accessing-raw-response-data-eg-headers + """ + return AsyncNewsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncNewsResourceWithStreamingResponse: + """ + An alternative to `.with_raw_response` that doesn't eagerly read the response body. + + For more information, see https://www.github.com/coingecko/coingecko-python#with_streaming_response + """ + return AsyncNewsResourceWithStreamingResponse(self) + + async def get( + self, + *, + coin_id: str | Omit = omit, + language: Literal[ + "en", + "ru", + "de", + "pl", + "es", + "vi", + "fr", + "pt-br", + "ar", + "bg", + "cs", + "da", + "el", + "fi", + "he", + "hi", + "hr", + "hu", + "id", + "it", + "ja", + "ko", + "lt", + "nl", + "no", + "ro", + "sk", + "sl", + "sv", + "th", + "tr", + "uk", + "zh", + "zh-tw", + ] + | Omit = omit, + page: int | Omit = omit, + per_page: int | Omit = omit, + type: Literal["all", "news", "guides"] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> NewsGetResponse: + """ + This endpoint allows you to **query the latest crypto news and guides on + CoinGecko** + + Args: + coin_id: filter news by coin ID \\**refers to [`/coins/list`](/reference/coins-list). + + language: filter news by language Default value: **en** + + page: page through results Default value: **1** + + per_page: total results per page Default value: **10** + + type: filter news by type Default value: **all** Note: `guides` filter is only + applicable if `coin_id` is specified and valid + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + return await self._get( + "/news", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + { + "coin_id": coin_id, + "language": language, + "page": page, + "per_page": per_page, + "type": type, + }, + news_get_params.NewsGetParams, + ), + ), + cast_to=NewsGetResponse, + ) + + +class NewsResourceWithRawResponse: + def __init__(self, news: NewsResource) -> None: + self._news = news + + self.get = to_raw_response_wrapper( + news.get, + ) + + +class AsyncNewsResourceWithRawResponse: + def __init__(self, news: AsyncNewsResource) -> None: + self._news = news + + self.get = async_to_raw_response_wrapper( + news.get, + ) + + +class NewsResourceWithStreamingResponse: + def __init__(self, news: NewsResource) -> None: + self._news = news + + self.get = to_streamed_response_wrapper( + news.get, + ) + + +class AsyncNewsResourceWithStreamingResponse: + def __init__(self, news: AsyncNewsResource) -> None: + self._news = news + + self.get = async_to_streamed_response_wrapper( + news.get, + ) diff --git a/src/coingecko_sdk/resources/onchain/search/pools.py b/src/coingecko_sdk/resources/onchain/search/pools.py index 0fb0a4d..e54acd8 100644 --- a/src/coingecko_sdk/resources/onchain/search/pools.py +++ b/src/coingecko_sdk/resources/onchain/search/pools.py @@ -56,7 +56,8 @@ def get( timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> PoolGetResponse: """ - This endpoint allows you to **search for pools on a network** + This endpoint allows you to **search for pools on a network by pool address, + token name, token symbol, or token contract address** Args: include: attributes to include, comma-separated if more than one to include Available @@ -66,7 +67,8 @@ def get( page: page through results Default value: 1 - query: search query + query: search query, can be pool contract address, token name, token symbol, or token + contract address extra_headers: Send extra headers @@ -132,7 +134,8 @@ async def get( timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> PoolGetResponse: """ - This endpoint allows you to **search for pools on a network** + This endpoint allows you to **search for pools on a network by pool address, + token name, token symbol, or token contract address** Args: include: attributes to include, comma-separated if more than one to include Available @@ -142,7 +145,8 @@ async def get( page: page through results Default value: 1 - query: search query + query: search query, can be pool contract address, token name, token symbol, or token + contract address extra_headers: Send extra headers diff --git a/src/coingecko_sdk/resources/simple/price.py b/src/coingecko_sdk/resources/simple/price.py index 865cbdf..2293ed0 100644 --- a/src/coingecko_sdk/resources/simple/price.py +++ b/src/coingecko_sdk/resources/simple/price.py @@ -87,7 +87,7 @@ def get( ) -> PriceGetResponse: """ This endpoint allows you to **query the prices of one or more coins by using - their unique Coin API IDs** + their unique Coin API IDs, symbols, or names** Args: vs_currencies: target currency of coins, comma-separated if querying more than 1 currency. @@ -213,7 +213,7 @@ async def get( ) -> PriceGetResponse: """ This endpoint allows you to **query the prices of one or more coins by using - their unique Coin API IDs** + their unique Coin API IDs, symbols, or names** Args: vs_currencies: target currency of coins, comma-separated if querying more than 1 currency. diff --git a/src/coingecko_sdk/types/__init__.py b/src/coingecko_sdk/types/__init__.py index c8b3d85..7e0688d 100644 --- a/src/coingecko_sdk/types/__init__.py +++ b/src/coingecko_sdk/types/__init__.py @@ -2,7 +2,10 @@ from __future__ import annotations +from .news_get_params import NewsGetParams as NewsGetParams +from .treasury_entity import TreasuryEntity as TreasuryEntity from .key_get_response import KeyGetResponse as KeyGetResponse +from .news_get_response import NewsGetResponse as NewsGetResponse from .ping_get_response import PingGetResponse as PingGetResponse from .search_get_params import SearchGetParams as SearchGetParams from .coin_get_id_params import CoinGetIDParams as CoinGetIDParams @@ -12,6 +15,7 @@ from .nft_get_list_params import NFTGetListParams as NFTGetListParams from .search_get_response import SearchGetResponse as SearchGetResponse from .coin_get_id_response import CoinGetIDResponse as CoinGetIDResponse +from .detail_platform_data import DetailPlatformData as DetailPlatformData from .exchange_get_response import ExchangeGetResponse as ExchangeGetResponse from .nft_get_list_response import NFTGetListResponse as NFTGetListResponse from .entity_get_list_params import EntityGetListParams as EntityGetListParams diff --git a/src/coingecko_sdk/types/coin_get_id_response.py b/src/coingecko_sdk/types/coin_get_id_response.py index c539c1c..75999b8 100644 --- a/src/coingecko_sdk/types/coin_get_id_response.py +++ b/src/coingecko_sdk/types/coin_get_id_response.py @@ -4,12 +4,12 @@ from datetime import datetime from .._models import BaseModel +from .detail_platform_data import DetailPlatformData __all__ = [ "CoinGetIDResponse", "CategoriesDetail", "CommunityData", - "DetailPlatforms", "DeveloperData", "DeveloperDataCodeAdditionsDeletions4Weeks", "IcoData", @@ -76,14 +76,6 @@ class CommunityData(BaseModel): """coin telegram channel user count""" -class DetailPlatforms(BaseModel): - contract_address: Optional[str] = None - """contract address on the platform""" - - decimal_place: Optional[float] = None - """decimal places for the token""" - - class DeveloperDataCodeAdditionsDeletions4Weeks(BaseModel): """coin code additions and deletions in 4 weeks""" @@ -575,6 +567,14 @@ class MarketData(BaseModel): mcap_to_tvl_ratio: Optional[float] = None """market cap to total value locked ratio""" + outstanding_supply: Optional[float] = None + """ + tokens outstanding in the market, circulated/tradable or planned for circulation + """ + + outstanding_token_value_usd: Optional[float] = None + """outstanding token value in USD""" + price_change_24h: Optional[float] = None """coin 24hr price change in currency""" @@ -679,6 +679,9 @@ class Ticker(BaseModel): coin_id: Optional[str] = None """coin ticker base currency coin ID""" + coin_mcap_usd: Optional[float] = None + """coin market cap in usd""" + converted_last: Optional[TickerConvertedLast] = None """coin ticker converted last price""" @@ -753,7 +756,7 @@ class CoinGetIDResponse(BaseModel): description: Optional[Dict[str, str]] = None """coin description""" - detail_platforms: Optional[Dict[str, DetailPlatforms]] = None + detail_platforms: Optional[Dict[str, DetailPlatformData]] = None """detailed coin asset platform and contract address""" developer_data: Optional[DeveloperData] = None @@ -792,7 +795,7 @@ class CoinGetIDResponse(BaseModel): name: Optional[str] = None """coin name""" - platforms: Optional[Dict[str, str]] = None + platforms: Optional[Dict[str, Optional[str]]] = None """coin asset platform and contract address""" preview_listing: Optional[bool] = None diff --git a/src/coingecko_sdk/types/coins/contract_get_response.py b/src/coingecko_sdk/types/coins/contract_get_response.py index 22f252b..2e857ae 100644 --- a/src/coingecko_sdk/types/coins/contract_get_response.py +++ b/src/coingecko_sdk/types/coins/contract_get_response.py @@ -4,11 +4,11 @@ from datetime import datetime from ..._models import BaseModel +from ..detail_platform_data import DetailPlatformData __all__ = [ "ContractGetResponse", "CommunityData", - "DetailPlatforms", "DeveloperData", "DeveloperDataCodeAdditionsDeletions4Weeks", "Image", @@ -66,14 +66,6 @@ class CommunityData(BaseModel): """coin telegram channel user count""" -class DetailPlatforms(BaseModel): - contract_address: Optional[str] = None - """contract address on the platform""" - - decimal_place: Optional[float] = None - """decimal places for the token""" - - class DeveloperDataCodeAdditionsDeletions4Weeks(BaseModel): """coin code additions and deletions in 4 weeks""" @@ -471,6 +463,14 @@ class MarketData(BaseModel): mcap_to_tvl_ratio: Optional[float] = None """market cap to total value locked ratio""" + outstanding_supply: Optional[float] = None + """ + tokens outstanding in the market, circulated/tradable or planned for circulation + """ + + outstanding_token_value_usd: Optional[float] = None + """outstanding token value in USD""" + price_change_24h: Optional[float] = None """coin 24hr price change in currency""" @@ -575,6 +575,9 @@ class Ticker(BaseModel): coin_id: Optional[str] = None """coin ticker base currency coin ID""" + coin_mcap_usd: Optional[float] = None + """coin market cap in usd""" + converted_last: Optional[TickerConvertedLast] = None """coin ticker converted last price""" @@ -640,13 +643,16 @@ class ContractGetResponse(BaseModel): community_data: Optional[CommunityData] = None """coin community data""" + contract_address: Optional[str] = None + """coin contract address""" + country_origin: Optional[str] = None """coin country of origin""" description: Optional[Dict[str, str]] = None """coin description""" - detail_platforms: Optional[Dict[str, DetailPlatforms]] = None + detail_platforms: Optional[Dict[str, DetailPlatformData]] = None """detailed coin asset platform and contract address""" developer_data: Optional[DeveloperData] = None @@ -682,7 +688,7 @@ class ContractGetResponse(BaseModel): name: Optional[str] = None """coin name""" - platforms: Optional[Dict[str, str]] = None + platforms: Optional[Dict[str, Optional[str]]] = None """coin asset platform and contract address""" preview_listing: Optional[bool] = None diff --git a/src/coingecko_sdk/types/coins/market_get_response.py b/src/coingecko_sdk/types/coins/market_get_response.py index bdf0e7a..de9558a 100644 --- a/src/coingecko_sdk/types/coins/market_get_response.py +++ b/src/coingecko_sdk/types/coins/market_get_response.py @@ -12,13 +12,13 @@ class MarketGetResponseItemRoi(BaseModel): """return on investment data""" - currency: str + currency: Optional[str] = None """ROI currency""" - percentage: float + percentage: Optional[float] = None """ROI percentage""" - times: float + times: Optional[float] = None """ROI multiplier""" diff --git a/src/coingecko_sdk/types/coins/ticker_get_response.py b/src/coingecko_sdk/types/coins/ticker_get_response.py index 97e6912..3059252 100644 --- a/src/coingecko_sdk/types/coins/ticker_get_response.py +++ b/src/coingecko_sdk/types/coins/ticker_get_response.py @@ -30,18 +30,18 @@ class TickerConvertedVolume(BaseModel): class TickerMarket(BaseModel): """coin ticker exchange""" - has_trading_incentive: bool + has_trading_incentive: Optional[bool] = None """exchange trading incentive""" - identifier: str + identifier: Optional[str] = None """exchange identifier""" - name: str - """exchange name""" - logo: Optional[str] = None """exchange image url""" + name: Optional[str] = None + """exchange name""" + class Ticker(BaseModel): base: Optional[str] = None @@ -53,6 +53,9 @@ class Ticker(BaseModel): coin_id: Optional[str] = None """coin ticker base currency coin ID""" + coin_mcap_usd: Optional[float] = None + """coin market cap in usd""" + converted_last: Optional[TickerConvertedLast] = None """coin ticker converted last price""" diff --git a/src/coingecko_sdk/types/derivatives/exchange_get_id_response.py b/src/coingecko_sdk/types/derivatives/exchange_get_id_response.py index 03de392..dc26088 100644 --- a/src/coingecko_sdk/types/derivatives/exchange_get_id_response.py +++ b/src/coingecko_sdk/types/derivatives/exchange_get_id_response.py @@ -103,7 +103,7 @@ class ExchangeGetIDResponse(BaseModel): tickers: Optional[List[Ticker]] = None - trade_volume_24h_btc: Optional[float] = None + trade_volume_24h_btc: Optional[str] = None """derivatives exchange trade volume in BTC in 24 hours""" url: Optional[str] = None diff --git a/src/coingecko_sdk/types/detail_platform_data.py b/src/coingecko_sdk/types/detail_platform_data.py new file mode 100644 index 0000000..3d53b11 --- /dev/null +++ b/src/coingecko_sdk/types/detail_platform_data.py @@ -0,0 +1,15 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional + +from .._models import BaseModel + +__all__ = ["DetailPlatformData"] + + +class DetailPlatformData(BaseModel): + contract_address: Optional[str] = None + """contract address on the platform""" + + decimal_place: Optional[float] = None + """decimal places for the token""" diff --git a/src/coingecko_sdk/types/exchange_get_id_response.py b/src/coingecko_sdk/types/exchange_get_id_response.py index 3eb72ae..83f4910 100644 --- a/src/coingecko_sdk/types/exchange_get_id_response.py +++ b/src/coingecko_sdk/types/exchange_get_id_response.py @@ -6,6 +6,9 @@ __all__ = [ "ExchangeGetIDResponse", + "StatusUpdate", + "StatusUpdateProject", + "StatusUpdateProjectImage", "Ticker", "TickerTicker", "TickerTickerConvertedLast", @@ -14,6 +17,40 @@ ] +class StatusUpdateProjectImage(BaseModel): + large: Optional[str] = None + + small: Optional[str] = None + + thumb: Optional[str] = None + + +class StatusUpdateProject(BaseModel): + id: Optional[str] = None + + image: Optional[StatusUpdateProjectImage] = None + + name: Optional[str] = None + + type: Optional[str] = None + + +class StatusUpdate(BaseModel): + category: Optional[str] = None + + created_at: Optional[str] = None + + description: Optional[str] = None + + pin: Optional[bool] = None + + project: Optional[StatusUpdateProject] = None + + user: Optional[str] = None + + user_title: Optional[str] = None + + class TickerTickerConvertedLast(BaseModel): """coin ticker converted last price""" @@ -37,18 +74,18 @@ class TickerTickerConvertedVolume(BaseModel): class TickerTickerMarket(BaseModel): """coin ticker exchange""" - has_trading_incentive: bool + has_trading_incentive: Optional[bool] = None """exchange trading incentive""" - identifier: str + identifier: Optional[str] = None """exchange identifier""" - name: str - """exchange name""" - logo: Optional[str] = None """exchange image url""" + name: Optional[str] = None + """exchange name""" + class TickerTicker(BaseModel): base: Optional[str] = None @@ -60,6 +97,9 @@ class TickerTicker(BaseModel): coin_id: Optional[str] = None """coin ticker base currency coin ID""" + coin_mcap_usd: Optional[float] = None + """coin market cap in usd""" + converted_last: Optional[TickerTickerConvertedLast] = None """coin ticker converted last price""" @@ -164,6 +204,9 @@ class ExchangeGetIDResponse(BaseModel): slack_url: Optional[str] = None """exchange slack url""" + status_updates: Optional[List[StatusUpdate]] = None + """exchange status updates""" + telegram_url: Optional[str] = None """exchange telegram url""" diff --git a/src/coingecko_sdk/types/exchange_get_list_response.py b/src/coingecko_sdk/types/exchange_get_list_response.py index 33c3c79..85f094e 100644 --- a/src/coingecko_sdk/types/exchange_get_list_response.py +++ b/src/coingecko_sdk/types/exchange_get_list_response.py @@ -1,6 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Optional from typing_extensions import TypeAlias from .._models import BaseModel @@ -9,10 +9,10 @@ class ExchangeGetListResponseItem(BaseModel): - id: str + id: Optional[str] = None """exchange ID""" - name: str + name: Optional[str] = None """exchange name""" diff --git a/src/coingecko_sdk/types/exchanges/ticker_get_response.py b/src/coingecko_sdk/types/exchanges/ticker_get_response.py index 97e6912..3059252 100644 --- a/src/coingecko_sdk/types/exchanges/ticker_get_response.py +++ b/src/coingecko_sdk/types/exchanges/ticker_get_response.py @@ -30,18 +30,18 @@ class TickerConvertedVolume(BaseModel): class TickerMarket(BaseModel): """coin ticker exchange""" - has_trading_incentive: bool + has_trading_incentive: Optional[bool] = None """exchange trading incentive""" - identifier: str + identifier: Optional[str] = None """exchange identifier""" - name: str - """exchange name""" - logo: Optional[str] = None """exchange image url""" + name: Optional[str] = None + """exchange name""" + class Ticker(BaseModel): base: Optional[str] = None @@ -53,6 +53,9 @@ class Ticker(BaseModel): coin_id: Optional[str] = None """coin ticker base currency coin ID""" + coin_mcap_usd: Optional[float] = None + """coin market cap in usd""" + converted_last: Optional[TickerConvertedLast] = None """coin ticker converted last price""" diff --git a/src/coingecko_sdk/types/exchanges/volume_chart_get_range_response.py b/src/coingecko_sdk/types/exchanges/volume_chart_get_range_response.py index df976c6..bc2b22b 100644 --- a/src/coingecko_sdk/types/exchanges/volume_chart_get_range_response.py +++ b/src/coingecko_sdk/types/exchanges/volume_chart_get_range_response.py @@ -1,8 +1,8 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Union from typing_extensions import TypeAlias __all__ = ["VolumeChartGetRangeResponse"] -VolumeChartGetRangeResponse: TypeAlias = List[List[float]] +VolumeChartGetRangeResponse: TypeAlias = List[List[Union[float, str]]] diff --git a/src/coingecko_sdk/types/exchanges/volume_chart_get_response.py b/src/coingecko_sdk/types/exchanges/volume_chart_get_response.py index 646ebc0..432610d 100644 --- a/src/coingecko_sdk/types/exchanges/volume_chart_get_response.py +++ b/src/coingecko_sdk/types/exchanges/volume_chart_get_response.py @@ -1,8 +1,8 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List +from typing import List, Union from typing_extensions import TypeAlias __all__ = ["VolumeChartGetResponse"] -VolumeChartGetResponse: TypeAlias = List[List[float]] +VolumeChartGetResponse: TypeAlias = List[List[Union[float, str]]] diff --git a/src/coingecko_sdk/types/news_get_params.py b/src/coingecko_sdk/types/news_get_params.py new file mode 100644 index 0000000..734b738 --- /dev/null +++ b/src/coingecko_sdk/types/news_get_params.py @@ -0,0 +1,62 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, TypedDict + +__all__ = ["NewsGetParams"] + + +class NewsGetParams(TypedDict, total=False): + coin_id: str + """filter news by coin ID \\**refers to [`/coins/list`](/reference/coins-list).""" + + language: Literal[ + "en", + "ru", + "de", + "pl", + "es", + "vi", + "fr", + "pt-br", + "ar", + "bg", + "cs", + "da", + "el", + "fi", + "he", + "hi", + "hr", + "hu", + "id", + "it", + "ja", + "ko", + "lt", + "nl", + "no", + "ro", + "sk", + "sl", + "sv", + "th", + "tr", + "uk", + "zh", + "zh-tw", + ] + """filter news by language Default value: **en**""" + + page: int + """page through results Default value: **1**""" + + per_page: int + """total results per page Default value: **10**""" + + type: Literal["all", "news", "guides"] + """ + filter news by type Default value: **all** Note: `guides` filter is only + applicable if `coin_id` is specified and valid + """ diff --git a/src/coingecko_sdk/types/news_get_response.py b/src/coingecko_sdk/types/news_get_response.py new file mode 100644 index 0000000..e242a8c --- /dev/null +++ b/src/coingecko_sdk/types/news_get_response.py @@ -0,0 +1,37 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import List, Optional +from typing_extensions import Literal, TypeAlias + +from .._models import BaseModel + +__all__ = ["NewsGetResponse", "NewsGetResponseItem"] + + +class NewsGetResponseItem(BaseModel): + author: Optional[str] = None + """news article author""" + + image: Optional[str] = None + """news article image URL""" + + posted_at: Optional[str] = None + """news article published timestamp in ISO 8601 format""" + + related_coin_ids: Optional[List[str]] = None + """related coin IDs""" + + source_name: Optional[str] = None + """news article source name""" + + title: Optional[str] = None + """news article title""" + + type: Optional[Literal["news", "guide"]] = None + """news article type""" + + url: Optional[str] = None + """news article URL""" + + +NewsGetResponse: TypeAlias = List[NewsGetResponseItem] diff --git a/src/coingecko_sdk/types/nft_get_id_response.py b/src/coingecko_sdk/types/nft_get_id_response.py index 39fb8a9..f2c29c7 100644 --- a/src/coingecko_sdk/types/nft_get_id_response.py +++ b/src/coingecko_sdk/types/nft_get_id_response.py @@ -10,7 +10,6 @@ "Ath", "AthChangePercentage", "AthDate", - "BannerImage", "Explorer", "FloorPrice", "FloorPrice14dPercentageChange", @@ -52,12 +51,6 @@ class AthDate(BaseModel): usd: Optional[datetime] = None -class BannerImage(BaseModel): - """NFT collection banner image url""" - - small: Optional[str] = None - - class Explorer(BaseModel): link: Optional[str] = None @@ -184,7 +177,7 @@ class NFTGetIDResponse(BaseModel): ath_date: Optional[AthDate] = None """NFT collection all time highs date""" - banner_image: Optional[BannerImage] = None + banner_image: Optional[str] = None """NFT collection banner image url""" contract_address: Optional[str] = None @@ -278,3 +271,6 @@ class NFTGetIDResponse(BaseModel): volume_in_usd_24h_percentage_change: Optional[float] = None """NFT collection volume in usd 24 hours percentage change""" + + web_slug: Optional[str] = None + """NFT collection web slug""" 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 9f49c8a..fbd8f22 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 @@ -10,7 +10,6 @@ "Ath", "AthChangePercentage", "AthDate", - "BannerImage", "Explorer", "FloorPrice", "FloorPrice14dPercentageChange", @@ -52,12 +51,6 @@ class AthDate(BaseModel): usd: Optional[datetime] = None -class BannerImage(BaseModel): - """NFT collection banner image url""" - - small: Optional[str] = None - - class Explorer(BaseModel): link: Optional[str] = None @@ -184,7 +177,7 @@ class ContractGetContractAddressResponse(BaseModel): ath_date: Optional[AthDate] = None """NFT collection all time highs date""" - banner_image: Optional[BannerImage] = None + banner_image: Optional[str] = None """NFT collection banner image url""" contract_address: Optional[str] = None @@ -278,3 +271,6 @@ class ContractGetContractAddressResponse(BaseModel): volume_in_usd_24h_percentage_change: Optional[float] = None """NFT collection volume in usd 24 hours percentage change""" + + web_slug: Optional[str] = None + """NFT collection web slug""" diff --git a/src/coingecko_sdk/types/onchain/networks/__init__.py b/src/coingecko_sdk/types/onchain/networks/__init__.py index ab65a21..b48ec26 100644 --- a/src/coingecko_sdk/types/onchain/networks/__init__.py +++ b/src/coingecko_sdk/types/onchain/networks/__init__.py @@ -2,6 +2,7 @@ from __future__ import annotations +from .pool_data import PoolData as PoolData from .dex_get_params import DexGetParams as DexGetParams from .pool_get_params import PoolGetParams as PoolGetParams from .dex_get_response import DexGetResponse as DexGetResponse diff --git a/src/coingecko_sdk/types/onchain/networks/dex_get_pools_response.py b/src/coingecko_sdk/types/onchain/networks/dex_get_pools_response.py index 6a9fb73..e317ca1 100644 --- a/src/coingecko_sdk/types/onchain/networks/dex_get_pools_response.py +++ b/src/coingecko_sdk/types/onchain/networks/dex_get_pools_response.py @@ -12,6 +12,7 @@ "DataAttributesTransactions", "DataAttributesTransactionsH1", "DataAttributesTransactionsH24", + "DataAttributesTransactionsH6", "DataAttributesTransactionsM15", "DataAttributesTransactionsM30", "DataAttributesTransactionsM5", @@ -21,6 +22,8 @@ "DataRelationshipsBaseTokenData", "DataRelationshipsDex", "DataRelationshipsDexData", + "DataRelationshipsNetwork", + "DataRelationshipsNetworkData", "DataRelationshipsQuoteToken", "DataRelationshipsQuoteTokenData", "Included", @@ -62,6 +65,16 @@ class DataAttributesTransactionsH24(BaseModel): sells: Optional[int] = None +class DataAttributesTransactionsH6(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + class DataAttributesTransactionsM15(BaseModel): buyers: Optional[int] = None @@ -97,6 +110,8 @@ class DataAttributesTransactions(BaseModel): h24: Optional[DataAttributesTransactionsH24] = None + h6: Optional[DataAttributesTransactionsH6] = None + m15: Optional[DataAttributesTransactionsM15] = None m30: Optional[DataAttributesTransactionsM30] = None @@ -176,6 +191,16 @@ class DataRelationshipsDex(BaseModel): data: Optional[DataRelationshipsDexData] = None +class DataRelationshipsNetworkData(BaseModel): + id: Optional[str] = None + + type: Optional[str] = None + + +class DataRelationshipsNetwork(BaseModel): + data: Optional[DataRelationshipsNetworkData] = None + + class DataRelationshipsQuoteTokenData(BaseModel): id: Optional[str] = None @@ -191,6 +216,8 @@ class DataRelationships(BaseModel): dex: Optional[DataRelationshipsDex] = None + network: Optional[DataRelationshipsNetwork] = None + quote_token: Optional[DataRelationshipsQuoteToken] = None diff --git a/src/coingecko_sdk/types/onchain/networks/new_pool_get_network_response.py b/src/coingecko_sdk/types/onchain/networks/new_pool_get_network_response.py index afa6f63..1fc6192 100644 --- a/src/coingecko_sdk/types/onchain/networks/new_pool_get_network_response.py +++ b/src/coingecko_sdk/types/onchain/networks/new_pool_get_network_response.py @@ -12,6 +12,7 @@ "DataAttributesTransactions", "DataAttributesTransactionsH1", "DataAttributesTransactionsH24", + "DataAttributesTransactionsH6", "DataAttributesTransactionsM15", "DataAttributesTransactionsM30", "DataAttributesTransactionsM5", @@ -21,6 +22,8 @@ "DataRelationshipsBaseTokenData", "DataRelationshipsDex", "DataRelationshipsDexData", + "DataRelationshipsNetwork", + "DataRelationshipsNetworkData", "DataRelationshipsQuoteToken", "DataRelationshipsQuoteTokenData", "Included", @@ -62,6 +65,16 @@ class DataAttributesTransactionsH24(BaseModel): sells: Optional[int] = None +class DataAttributesTransactionsH6(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + class DataAttributesTransactionsM15(BaseModel): buyers: Optional[int] = None @@ -97,6 +110,8 @@ class DataAttributesTransactions(BaseModel): h24: Optional[DataAttributesTransactionsH24] = None + h6: Optional[DataAttributesTransactionsH6] = None + m15: Optional[DataAttributesTransactionsM15] = None m30: Optional[DataAttributesTransactionsM30] = None @@ -176,6 +191,16 @@ class DataRelationshipsDex(BaseModel): data: Optional[DataRelationshipsDexData] = None +class DataRelationshipsNetworkData(BaseModel): + id: Optional[str] = None + + type: Optional[str] = None + + +class DataRelationshipsNetwork(BaseModel): + data: Optional[DataRelationshipsNetworkData] = None + + class DataRelationshipsQuoteTokenData(BaseModel): id: Optional[str] = None @@ -191,6 +216,8 @@ class DataRelationships(BaseModel): dex: Optional[DataRelationshipsDex] = None + network: Optional[DataRelationshipsNetwork] = None + quote_token: Optional[DataRelationshipsQuoteToken] = None diff --git a/src/coingecko_sdk/types/onchain/networks/new_pool_get_response.py b/src/coingecko_sdk/types/onchain/networks/new_pool_get_response.py index 39a0605..6ad44f4 100644 --- a/src/coingecko_sdk/types/onchain/networks/new_pool_get_response.py +++ b/src/coingecko_sdk/types/onchain/networks/new_pool_get_response.py @@ -12,6 +12,7 @@ "DataAttributesTransactions", "DataAttributesTransactionsH1", "DataAttributesTransactionsH24", + "DataAttributesTransactionsH6", "DataAttributesTransactionsM15", "DataAttributesTransactionsM30", "DataAttributesTransactionsM5", @@ -21,6 +22,8 @@ "DataRelationshipsBaseTokenData", "DataRelationshipsDex", "DataRelationshipsDexData", + "DataRelationshipsNetwork", + "DataRelationshipsNetworkData", "DataRelationshipsQuoteToken", "DataRelationshipsQuoteTokenData", "Included", @@ -62,6 +65,16 @@ class DataAttributesTransactionsH24(BaseModel): sells: Optional[int] = None +class DataAttributesTransactionsH6(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + class DataAttributesTransactionsM15(BaseModel): buyers: Optional[int] = None @@ -97,6 +110,8 @@ class DataAttributesTransactions(BaseModel): h24: Optional[DataAttributesTransactionsH24] = None + h6: Optional[DataAttributesTransactionsH6] = None + m15: Optional[DataAttributesTransactionsM15] = None m30: Optional[DataAttributesTransactionsM30] = None @@ -176,6 +191,16 @@ class DataRelationshipsDex(BaseModel): data: Optional[DataRelationshipsDexData] = None +class DataRelationshipsNetworkData(BaseModel): + id: Optional[str] = None + + type: Optional[str] = None + + +class DataRelationshipsNetwork(BaseModel): + data: Optional[DataRelationshipsNetworkData] = None + + class DataRelationshipsQuoteTokenData(BaseModel): id: Optional[str] = None @@ -191,6 +216,8 @@ class DataRelationships(BaseModel): dex: Optional[DataRelationshipsDex] = None + network: Optional[DataRelationshipsNetwork] = None + quote_token: Optional[DataRelationshipsQuoteToken] = None diff --git a/src/coingecko_sdk/types/onchain/networks/pool_data.py b/src/coingecko_sdk/types/onchain/networks/pool_data.py new file mode 100644 index 0000000..6db504e --- /dev/null +++ b/src/coingecko_sdk/types/onchain/networks/pool_data.py @@ -0,0 +1,273 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional + +from ...._models import BaseModel + +__all__ = [ + "PoolData", + "Attributes", + "AttributesBuyVolumeUsd", + "AttributesNetBuyVolumeUsd", + "AttributesPriceChangePercentage", + "AttributesSellVolumeUsd", + "AttributesTransactions", + "AttributesTransactionsH1", + "AttributesTransactionsH24", + "AttributesTransactionsH6", + "AttributesTransactionsM15", + "AttributesTransactionsM30", + "AttributesTransactionsM5", + "AttributesVolumeUsd", + "Relationships", + "RelationshipsBaseToken", + "RelationshipsBaseTokenData", + "RelationshipsDex", + "RelationshipsDexData", + "RelationshipsQuoteToken", + "RelationshipsQuoteTokenData", +] + + +class AttributesBuyVolumeUsd(BaseModel): + h1: Optional[str] = None + + h24: Optional[str] = None + + h6: Optional[str] = None + + m15: Optional[str] = None + + m30: Optional[str] = None + + m5: Optional[str] = None + + +class AttributesNetBuyVolumeUsd(BaseModel): + h1: Optional[str] = None + + h24: Optional[str] = None + + h6: Optional[str] = None + + m15: Optional[str] = None + + m30: Optional[str] = None + + m5: Optional[str] = None + + +class AttributesPriceChangePercentage(BaseModel): + h1: Optional[str] = None + + h24: Optional[str] = None + + h6: Optional[str] = None + + m15: Optional[str] = None + + m30: Optional[str] = None + + m5: Optional[str] = None + + +class AttributesSellVolumeUsd(BaseModel): + h1: Optional[str] = None + + h24: Optional[str] = None + + h6: Optional[str] = None + + m15: Optional[str] = None + + m30: Optional[str] = None + + m5: Optional[str] = None + + +class AttributesTransactionsH1(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + +class AttributesTransactionsH24(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + +class AttributesTransactionsH6(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + +class AttributesTransactionsM15(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + +class AttributesTransactionsM30(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + +class AttributesTransactionsM5(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + +class AttributesTransactions(BaseModel): + h1: Optional[AttributesTransactionsH1] = None + + h24: Optional[AttributesTransactionsH24] = None + + h6: Optional[AttributesTransactionsH6] = None + + m15: Optional[AttributesTransactionsM15] = None + + m30: Optional[AttributesTransactionsM30] = None + + m5: Optional[AttributesTransactionsM5] = None + + +class AttributesVolumeUsd(BaseModel): + h1: Optional[str] = None + + h24: Optional[str] = None + + h6: Optional[str] = None + + m15: Optional[str] = None + + m30: Optional[str] = None + + m5: Optional[str] = None + + +class Attributes(BaseModel): + address: Optional[str] = None + + base_token_balance: Optional[str] = None + + base_token_liquidity_usd: Optional[str] = None + + base_token_price_native_currency: Optional[str] = None + + base_token_price_quote_token: Optional[str] = None + + base_token_price_usd: Optional[str] = None + + buy_volume_usd: Optional[AttributesBuyVolumeUsd] = None + + fdv_usd: Optional[str] = None + + locked_liquidity_percentage: Optional[str] = None + + market_cap_usd: Optional[str] = None + + name: Optional[str] = None + + net_buy_volume_usd: Optional[AttributesNetBuyVolumeUsd] = None + + pool_created_at: Optional[str] = None + + pool_fee_percentage: Optional[str] = None + + pool_name: Optional[str] = None + + price_change_percentage: Optional[AttributesPriceChangePercentage] = None + + quote_token_balance: Optional[str] = None + + quote_token_liquidity_usd: Optional[str] = None + + quote_token_price_base_token: Optional[str] = None + + quote_token_price_native_currency: Optional[str] = None + + quote_token_price_usd: Optional[str] = None + + reserve_in_usd: Optional[str] = None + + sell_volume_usd: Optional[AttributesSellVolumeUsd] = None + + transactions: Optional[AttributesTransactions] = None + + volume_usd: Optional[AttributesVolumeUsd] = None + + +class RelationshipsBaseTokenData(BaseModel): + id: Optional[str] = None + + type: Optional[str] = None + + +class RelationshipsBaseToken(BaseModel): + data: Optional[RelationshipsBaseTokenData] = None + + +class RelationshipsDexData(BaseModel): + id: Optional[str] = None + + type: Optional[str] = None + + +class RelationshipsDex(BaseModel): + data: Optional[RelationshipsDexData] = None + + +class RelationshipsQuoteTokenData(BaseModel): + id: Optional[str] = None + + type: Optional[str] = None + + +class RelationshipsQuoteToken(BaseModel): + data: Optional[RelationshipsQuoteTokenData] = None + + +class Relationships(BaseModel): + base_token: Optional[RelationshipsBaseToken] = None + + dex: Optional[RelationshipsDex] = None + + quote_token: Optional[RelationshipsQuoteToken] = None + + +class PoolData(BaseModel): + id: Optional[str] = None + + attributes: Optional[Attributes] = None + + relationships: Optional[Relationships] = None + + type: Optional[str] = None diff --git a/src/coingecko_sdk/types/onchain/networks/pool_get_address_response.py b/src/coingecko_sdk/types/onchain/networks/pool_get_address_response.py index 898d284..81d7189 100644 --- a/src/coingecko_sdk/types/onchain/networks/pool_get_address_response.py +++ b/src/coingecko_sdk/types/onchain/networks/pool_get_address_response.py @@ -2,278 +2,10 @@ from typing import List, Optional +from .pool_data import PoolData from ...._models import BaseModel -__all__ = [ - "PoolGetAddressResponse", - "Data", - "DataAttributes", - "DataAttributesBuyVolumeUsd", - "DataAttributesNetBuyVolumeUsd", - "DataAttributesPriceChangePercentage", - "DataAttributesSellVolumeUsd", - "DataAttributesTransactions", - "DataAttributesTransactionsH1", - "DataAttributesTransactionsH24", - "DataAttributesTransactionsH6", - "DataAttributesTransactionsM15", - "DataAttributesTransactionsM30", - "DataAttributesTransactionsM5", - "DataAttributesVolumeUsd", - "DataRelationships", - "DataRelationshipsBaseToken", - "DataRelationshipsBaseTokenData", - "DataRelationshipsDex", - "DataRelationshipsDexData", - "DataRelationshipsQuoteToken", - "DataRelationshipsQuoteTokenData", - "Included", - "IncludedAttributes", -] - - -class DataAttributesBuyVolumeUsd(BaseModel): - h1: Optional[str] = None - - h24: Optional[str] = None - - h6: Optional[str] = None - - m15: Optional[str] = None - - m30: Optional[str] = None - - m5: Optional[str] = None - - -class DataAttributesNetBuyVolumeUsd(BaseModel): - h1: Optional[str] = None - - h24: Optional[str] = None - - h6: Optional[str] = None - - m15: Optional[str] = None - - m30: Optional[str] = None - - m5: Optional[str] = None - - -class DataAttributesPriceChangePercentage(BaseModel): - h1: Optional[str] = None - - h24: Optional[str] = None - - h6: Optional[str] = None - - m15: Optional[str] = None - - m30: Optional[str] = None - - m5: Optional[str] = None - - -class DataAttributesSellVolumeUsd(BaseModel): - h1: Optional[str] = None - - h24: Optional[str] = None - - h6: Optional[str] = None - - m15: Optional[str] = None - - m30: Optional[str] = None - - m5: Optional[str] = None - - -class DataAttributesTransactionsH1(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactionsH24(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactionsH6(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactionsM15(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactionsM30(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactionsM5(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactions(BaseModel): - h1: Optional[DataAttributesTransactionsH1] = None - - h24: Optional[DataAttributesTransactionsH24] = None - - h6: Optional[DataAttributesTransactionsH6] = None - - m15: Optional[DataAttributesTransactionsM15] = None - - m30: Optional[DataAttributesTransactionsM30] = None - - m5: Optional[DataAttributesTransactionsM5] = None - - -class DataAttributesVolumeUsd(BaseModel): - h1: Optional[str] = None - - h24: Optional[str] = None - - h6: Optional[str] = None - - m15: Optional[str] = None - - m30: Optional[str] = None - - m5: Optional[str] = None - - -class DataAttributes(BaseModel): - address: Optional[str] = None - - base_token_balance: Optional[str] = None - - base_token_liquidity_usd: Optional[str] = None - - base_token_price_native_currency: Optional[str] = None - - base_token_price_quote_token: Optional[str] = None - - base_token_price_usd: Optional[str] = None - - buy_volume_usd: Optional[DataAttributesBuyVolumeUsd] = None - - fdv_usd: Optional[str] = None - - locked_liquidity_percentage: Optional[str] = None - - market_cap_usd: Optional[str] = None - - name: Optional[str] = None - - net_buy_volume_usd: Optional[DataAttributesNetBuyVolumeUsd] = None - - pool_created_at: Optional[str] = None - - pool_fee_percentage: Optional[str] = None - - pool_name: Optional[str] = None - - price_change_percentage: Optional[DataAttributesPriceChangePercentage] = None - - quote_token_balance: Optional[str] = None - - quote_token_liquidity_usd: Optional[str] = None - - quote_token_price_base_token: Optional[str] = None - - quote_token_price_native_currency: Optional[str] = None - - quote_token_price_usd: Optional[str] = None - - reserve_in_usd: Optional[str] = None - - sell_volume_usd: Optional[DataAttributesSellVolumeUsd] = None - - transactions: Optional[DataAttributesTransactions] = None - - volume_usd: Optional[DataAttributesVolumeUsd] = None - - -class DataRelationshipsBaseTokenData(BaseModel): - id: Optional[str] = None - - type: Optional[str] = None - - -class DataRelationshipsBaseToken(BaseModel): - data: Optional[DataRelationshipsBaseTokenData] = None - - -class DataRelationshipsDexData(BaseModel): - id: Optional[str] = None - - type: Optional[str] = None - - -class DataRelationshipsDex(BaseModel): - data: Optional[DataRelationshipsDexData] = None - - -class DataRelationshipsQuoteTokenData(BaseModel): - id: Optional[str] = None - - type: Optional[str] = None - - -class DataRelationshipsQuoteToken(BaseModel): - data: Optional[DataRelationshipsQuoteTokenData] = None - - -class DataRelationships(BaseModel): - base_token: Optional[DataRelationshipsBaseToken] = None - - dex: Optional[DataRelationshipsDex] = None - - quote_token: Optional[DataRelationshipsQuoteToken] = None - - -class Data(BaseModel): - id: Optional[str] = None - - attributes: Optional[DataAttributes] = None - - relationships: Optional[DataRelationships] = None - - type: Optional[str] = None +__all__ = ["PoolGetAddressResponse", "Included", "IncludedAttributes"] class IncludedAttributes(BaseModel): @@ -299,6 +31,6 @@ class Included(BaseModel): class PoolGetAddressResponse(BaseModel): - data: Optional[Data] = None + data: Optional[PoolData] = None included: Optional[List[Included]] = None diff --git a/src/coingecko_sdk/types/onchain/networks/pool_get_response.py b/src/coingecko_sdk/types/onchain/networks/pool_get_response.py index ea17ff8..7168c6d 100644 --- a/src/coingecko_sdk/types/onchain/networks/pool_get_response.py +++ b/src/coingecko_sdk/types/onchain/networks/pool_get_response.py @@ -12,6 +12,7 @@ "DataAttributesTransactions", "DataAttributesTransactionsH1", "DataAttributesTransactionsH24", + "DataAttributesTransactionsH6", "DataAttributesTransactionsM15", "DataAttributesTransactionsM30", "DataAttributesTransactionsM5", @@ -21,6 +22,8 @@ "DataRelationshipsBaseTokenData", "DataRelationshipsDex", "DataRelationshipsDexData", + "DataRelationshipsNetwork", + "DataRelationshipsNetworkData", "DataRelationshipsQuoteToken", "DataRelationshipsQuoteTokenData", "Included", @@ -62,6 +65,16 @@ class DataAttributesTransactionsH24(BaseModel): sells: Optional[int] = None +class DataAttributesTransactionsH6(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + class DataAttributesTransactionsM15(BaseModel): buyers: Optional[int] = None @@ -97,6 +110,8 @@ class DataAttributesTransactions(BaseModel): h24: Optional[DataAttributesTransactionsH24] = None + h6: Optional[DataAttributesTransactionsH6] = None + m15: Optional[DataAttributesTransactionsM15] = None m30: Optional[DataAttributesTransactionsM30] = None @@ -176,6 +191,16 @@ class DataRelationshipsDex(BaseModel): data: Optional[DataRelationshipsDexData] = None +class DataRelationshipsNetworkData(BaseModel): + id: Optional[str] = None + + type: Optional[str] = None + + +class DataRelationshipsNetwork(BaseModel): + data: Optional[DataRelationshipsNetworkData] = None + + class DataRelationshipsQuoteTokenData(BaseModel): id: Optional[str] = None @@ -191,6 +216,8 @@ class DataRelationships(BaseModel): dex: Optional[DataRelationshipsDex] = None + network: Optional[DataRelationshipsNetwork] = None + quote_token: Optional[DataRelationshipsQuoteToken] = None diff --git a/src/coingecko_sdk/types/onchain/networks/pools/info_get_response.py b/src/coingecko_sdk/types/onchain/networks/pools/info_get_response.py index 599f359..3e68fb0 100644 --- a/src/coingecko_sdk/types/onchain/networks/pools/info_get_response.py +++ b/src/coingecko_sdk/types/onchain/networks/pools/info_get_response.py @@ -65,6 +65,8 @@ class DataDataAttributes(BaseModel): coingecko_coin_id: Optional[str] = None + decimals: Optional[int] = None + description: Optional[str] = None discord_url: Optional[str] = None @@ -73,12 +75,14 @@ class DataDataAttributes(BaseModel): freeze_authority: Optional[str] = None - gt_categories_id: Optional[List[str]] = None + gt_category_ids: Optional[List[str]] = None gt_score: Optional[float] = None gt_score_details: Optional[DataDataAttributesGtScoreDetails] = None + gt_verified: Optional[bool] = None + holders: Optional[DataDataAttributesHolders] = None image: Optional[DataDataAttributesImage] = None diff --git a/src/coingecko_sdk/types/onchain/networks/pools/multi_get_addresses_response.py b/src/coingecko_sdk/types/onchain/networks/pools/multi_get_addresses_response.py index e405497..dbecbf8 100644 --- a/src/coingecko_sdk/types/onchain/networks/pools/multi_get_addresses_response.py +++ b/src/coingecko_sdk/types/onchain/networks/pools/multi_get_addresses_response.py @@ -2,278 +2,10 @@ from typing import List, Optional +from ..pool_data import PoolData from ....._models import BaseModel -__all__ = [ - "MultiGetAddressesResponse", - "Data", - "DataAttributes", - "DataAttributesBuyVolumeUsd", - "DataAttributesNetBuyVolumeUsd", - "DataAttributesPriceChangePercentage", - "DataAttributesSellVolumeUsd", - "DataAttributesTransactions", - "DataAttributesTransactionsH1", - "DataAttributesTransactionsH24", - "DataAttributesTransactionsH6", - "DataAttributesTransactionsM15", - "DataAttributesTransactionsM30", - "DataAttributesTransactionsM5", - "DataAttributesVolumeUsd", - "DataRelationships", - "DataRelationshipsBaseToken", - "DataRelationshipsBaseTokenData", - "DataRelationshipsDex", - "DataRelationshipsDexData", - "DataRelationshipsQuoteToken", - "DataRelationshipsQuoteTokenData", - "Included", - "IncludedAttributes", -] - - -class DataAttributesBuyVolumeUsd(BaseModel): - h1: Optional[str] = None - - h24: Optional[str] = None - - h6: Optional[str] = None - - m15: Optional[str] = None - - m30: Optional[str] = None - - m5: Optional[str] = None - - -class DataAttributesNetBuyVolumeUsd(BaseModel): - h1: Optional[str] = None - - h24: Optional[str] = None - - h6: Optional[str] = None - - m15: Optional[str] = None - - m30: Optional[str] = None - - m5: Optional[str] = None - - -class DataAttributesPriceChangePercentage(BaseModel): - h1: Optional[str] = None - - h24: Optional[str] = None - - h6: Optional[str] = None - - m15: Optional[str] = None - - m30: Optional[str] = None - - m5: Optional[str] = None - - -class DataAttributesSellVolumeUsd(BaseModel): - h1: Optional[str] = None - - h24: Optional[str] = None - - h6: Optional[str] = None - - m15: Optional[str] = None - - m30: Optional[str] = None - - m5: Optional[str] = None - - -class DataAttributesTransactionsH1(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactionsH24(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactionsH6(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactionsM15(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactionsM30(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactionsM5(BaseModel): - buyers: Optional[int] = None - - buys: Optional[int] = None - - sellers: Optional[int] = None - - sells: Optional[int] = None - - -class DataAttributesTransactions(BaseModel): - h1: Optional[DataAttributesTransactionsH1] = None - - h24: Optional[DataAttributesTransactionsH24] = None - - h6: Optional[DataAttributesTransactionsH6] = None - - m15: Optional[DataAttributesTransactionsM15] = None - - m30: Optional[DataAttributesTransactionsM30] = None - - m5: Optional[DataAttributesTransactionsM5] = None - - -class DataAttributesVolumeUsd(BaseModel): - h1: Optional[str] = None - - h24: Optional[str] = None - - h6: Optional[str] = None - - m15: Optional[str] = None - - m30: Optional[str] = None - - m5: Optional[str] = None - - -class DataAttributes(BaseModel): - address: Optional[str] = None - - base_token_balance: Optional[str] = None - - base_token_liquidity_usd: Optional[str] = None - - base_token_price_native_currency: Optional[str] = None - - base_token_price_quote_token: Optional[str] = None - - base_token_price_usd: Optional[str] = None - - buy_volume_usd: Optional[DataAttributesBuyVolumeUsd] = None - - fdv_usd: Optional[str] = None - - locked_liquidity_percentage: Optional[str] = None - - market_cap_usd: Optional[str] = None - - name: Optional[str] = None - - net_buy_volume_usd: Optional[DataAttributesNetBuyVolumeUsd] = None - - pool_created_at: Optional[str] = None - - pool_fee_percentage: Optional[str] = None - - pool_name: Optional[str] = None - - price_change_percentage: Optional[DataAttributesPriceChangePercentage] = None - - quote_token_balance: Optional[str] = None - - quote_token_liquidity_usd: Optional[str] = None - - quote_token_price_base_token: Optional[str] = None - - quote_token_price_native_currency: Optional[str] = None - - quote_token_price_usd: Optional[str] = None - - reserve_in_usd: Optional[str] = None - - sell_volume_usd: Optional[DataAttributesSellVolumeUsd] = None - - transactions: Optional[DataAttributesTransactions] = None - - volume_usd: Optional[DataAttributesVolumeUsd] = None - - -class DataRelationshipsBaseTokenData(BaseModel): - id: Optional[str] = None - - type: Optional[str] = None - - -class DataRelationshipsBaseToken(BaseModel): - data: Optional[DataRelationshipsBaseTokenData] = None - - -class DataRelationshipsDexData(BaseModel): - id: Optional[str] = None - - type: Optional[str] = None - - -class DataRelationshipsDex(BaseModel): - data: Optional[DataRelationshipsDexData] = None - - -class DataRelationshipsQuoteTokenData(BaseModel): - id: Optional[str] = None - - type: Optional[str] = None - - -class DataRelationshipsQuoteToken(BaseModel): - data: Optional[DataRelationshipsQuoteTokenData] = None - - -class DataRelationships(BaseModel): - base_token: Optional[DataRelationshipsBaseToken] = None - - dex: Optional[DataRelationshipsDex] = None - - quote_token: Optional[DataRelationshipsQuoteToken] = None - - -class Data(BaseModel): - id: Optional[str] = None - - attributes: Optional[DataAttributes] = None - - relationships: Optional[DataRelationships] = None - - type: Optional[str] = None +__all__ = ["MultiGetAddressesResponse", "Included", "IncludedAttributes"] class IncludedAttributes(BaseModel): @@ -299,6 +31,6 @@ class Included(BaseModel): class MultiGetAddressesResponse(BaseModel): - data: Optional[List[Data]] = None + data: Optional[List[PoolData]] = None included: Optional[List[Included]] = None diff --git a/src/coingecko_sdk/types/onchain/networks/tokens/info_get_response.py b/src/coingecko_sdk/types/onchain/networks/tokens/info_get_response.py index f63f9fe..b8c5218 100644 --- a/src/coingecko_sdk/types/onchain/networks/tokens/info_get_response.py +++ b/src/coingecko_sdk/types/onchain/networks/tokens/info_get_response.py @@ -62,6 +62,8 @@ class DataAttributes(BaseModel): coingecko_coin_id: Optional[str] = None + decimals: Optional[int] = None + description: Optional[str] = None discord_url: Optional[str] = None @@ -70,12 +72,14 @@ class DataAttributes(BaseModel): freeze_authority: Optional[str] = None - gt_categories_id: Optional[List[str]] = None + gt_category_ids: Optional[List[str]] = None gt_score: Optional[float] = None gt_score_details: Optional[DataAttributesGtScoreDetails] = None + gt_verified: Optional[bool] = None + holders: Optional[DataAttributesHolders] = None image: Optional[DataAttributesImage] = None diff --git a/src/coingecko_sdk/types/onchain/networks/tokens/pool_get_response.py b/src/coingecko_sdk/types/onchain/networks/tokens/pool_get_response.py index 6c9dd0b..c893317 100644 --- a/src/coingecko_sdk/types/onchain/networks/tokens/pool_get_response.py +++ b/src/coingecko_sdk/types/onchain/networks/tokens/pool_get_response.py @@ -12,6 +12,7 @@ "DataAttributesTransactions", "DataAttributesTransactionsH1", "DataAttributesTransactionsH24", + "DataAttributesTransactionsH6", "DataAttributesTransactionsM15", "DataAttributesTransactionsM30", "DataAttributesTransactionsM5", @@ -62,6 +63,16 @@ class DataAttributesTransactionsH24(BaseModel): sells: Optional[int] = None +class DataAttributesTransactionsH6(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + class DataAttributesTransactionsM15(BaseModel): buyers: Optional[int] = None @@ -97,6 +108,8 @@ class DataAttributesTransactions(BaseModel): h24: Optional[DataAttributesTransactionsH24] = None + h6: Optional[DataAttributesTransactionsH6] = None + m15: Optional[DataAttributesTransactionsM15] = None m30: Optional[DataAttributesTransactionsM30] = None @@ -153,6 +166,8 @@ class DataAttributes(BaseModel): sentiment_vote_positive_percentage: Optional[float] = None + token_price_usd: Optional[str] = None + transactions: Optional[DataAttributesTransactions] = None volume_usd: Optional[DataAttributesVolumeUsd] = None diff --git a/src/coingecko_sdk/types/onchain/networks/trending_pool_get_network_response.py b/src/coingecko_sdk/types/onchain/networks/trending_pool_get_network_response.py index efbb4f7..104f78a 100644 --- a/src/coingecko_sdk/types/onchain/networks/trending_pool_get_network_response.py +++ b/src/coingecko_sdk/types/onchain/networks/trending_pool_get_network_response.py @@ -12,6 +12,7 @@ "DataAttributesTransactions", "DataAttributesTransactionsH1", "DataAttributesTransactionsH24", + "DataAttributesTransactionsH6", "DataAttributesTransactionsM15", "DataAttributesTransactionsM30", "DataAttributesTransactionsM5", @@ -21,6 +22,8 @@ "DataRelationshipsBaseTokenData", "DataRelationshipsDex", "DataRelationshipsDexData", + "DataRelationshipsNetwork", + "DataRelationshipsNetworkData", "DataRelationshipsQuoteToken", "DataRelationshipsQuoteTokenData", "Included", @@ -62,6 +65,16 @@ class DataAttributesTransactionsH24(BaseModel): sells: Optional[int] = None +class DataAttributesTransactionsH6(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + class DataAttributesTransactionsM15(BaseModel): buyers: Optional[int] = None @@ -97,6 +110,8 @@ class DataAttributesTransactions(BaseModel): h24: Optional[DataAttributesTransactionsH24] = None + h6: Optional[DataAttributesTransactionsH6] = None + m15: Optional[DataAttributesTransactionsM15] = None m30: Optional[DataAttributesTransactionsM30] = None @@ -176,6 +191,16 @@ class DataRelationshipsDex(BaseModel): data: Optional[DataRelationshipsDexData] = None +class DataRelationshipsNetworkData(BaseModel): + id: Optional[str] = None + + type: Optional[str] = None + + +class DataRelationshipsNetwork(BaseModel): + data: Optional[DataRelationshipsNetworkData] = None + + class DataRelationshipsQuoteTokenData(BaseModel): id: Optional[str] = None @@ -191,6 +216,8 @@ class DataRelationships(BaseModel): dex: Optional[DataRelationshipsDex] = None + network: Optional[DataRelationshipsNetwork] = None + quote_token: Optional[DataRelationshipsQuoteToken] = None diff --git a/src/coingecko_sdk/types/onchain/networks/trending_pool_get_response.py b/src/coingecko_sdk/types/onchain/networks/trending_pool_get_response.py index 2741d9c..0c9a356 100644 --- a/src/coingecko_sdk/types/onchain/networks/trending_pool_get_response.py +++ b/src/coingecko_sdk/types/onchain/networks/trending_pool_get_response.py @@ -12,6 +12,7 @@ "DataAttributesTransactions", "DataAttributesTransactionsH1", "DataAttributesTransactionsH24", + "DataAttributesTransactionsH6", "DataAttributesTransactionsM15", "DataAttributesTransactionsM30", "DataAttributesTransactionsM5", @@ -21,6 +22,8 @@ "DataRelationshipsBaseTokenData", "DataRelationshipsDex", "DataRelationshipsDexData", + "DataRelationshipsNetwork", + "DataRelationshipsNetworkData", "DataRelationshipsQuoteToken", "DataRelationshipsQuoteTokenData", "Included", @@ -62,6 +65,16 @@ class DataAttributesTransactionsH24(BaseModel): sells: Optional[int] = None +class DataAttributesTransactionsH6(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + class DataAttributesTransactionsM15(BaseModel): buyers: Optional[int] = None @@ -97,6 +110,8 @@ class DataAttributesTransactions(BaseModel): h24: Optional[DataAttributesTransactionsH24] = None + h6: Optional[DataAttributesTransactionsH6] = None + m15: Optional[DataAttributesTransactionsM15] = None m30: Optional[DataAttributesTransactionsM30] = None @@ -176,6 +191,16 @@ class DataRelationshipsDex(BaseModel): data: Optional[DataRelationshipsDexData] = None +class DataRelationshipsNetworkData(BaseModel): + id: Optional[str] = None + + type: Optional[str] = None + + +class DataRelationshipsNetwork(BaseModel): + data: Optional[DataRelationshipsNetworkData] = None + + class DataRelationshipsQuoteTokenData(BaseModel): id: Optional[str] = None @@ -191,6 +216,8 @@ class DataRelationships(BaseModel): dex: Optional[DataRelationshipsDex] = None + network: Optional[DataRelationshipsNetwork] = None + quote_token: Optional[DataRelationshipsQuoteToken] = None diff --git a/src/coingecko_sdk/types/onchain/pools/megafilter_get_response.py b/src/coingecko_sdk/types/onchain/pools/megafilter_get_response.py index 66e9f37..496f03a 100644 --- a/src/coingecko_sdk/types/onchain/pools/megafilter_get_response.py +++ b/src/coingecko_sdk/types/onchain/pools/megafilter_get_response.py @@ -12,6 +12,7 @@ "DataAttributesTransactions", "DataAttributesTransactionsH1", "DataAttributesTransactionsH24", + "DataAttributesTransactionsH6", "DataAttributesTransactionsM15", "DataAttributesTransactionsM30", "DataAttributesTransactionsM5", @@ -21,6 +22,8 @@ "DataRelationshipsBaseTokenData", "DataRelationshipsDex", "DataRelationshipsDexData", + "DataRelationshipsNetwork", + "DataRelationshipsNetworkData", "DataRelationshipsQuoteToken", "DataRelationshipsQuoteTokenData", "Included", @@ -62,6 +65,16 @@ class DataAttributesTransactionsH24(BaseModel): sells: Optional[int] = None +class DataAttributesTransactionsH6(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + class DataAttributesTransactionsM15(BaseModel): buyers: Optional[int] = None @@ -97,6 +110,8 @@ class DataAttributesTransactions(BaseModel): h24: Optional[DataAttributesTransactionsH24] = None + h6: Optional[DataAttributesTransactionsH6] = None + m15: Optional[DataAttributesTransactionsM15] = None m30: Optional[DataAttributesTransactionsM30] = None @@ -170,6 +185,16 @@ class DataRelationshipsDex(BaseModel): data: Optional[DataRelationshipsDexData] = None +class DataRelationshipsNetworkData(BaseModel): + id: Optional[str] = None + + type: Optional[str] = None + + +class DataRelationshipsNetwork(BaseModel): + data: Optional[DataRelationshipsNetworkData] = None + + class DataRelationshipsQuoteTokenData(BaseModel): id: Optional[str] = None @@ -185,6 +210,8 @@ class DataRelationships(BaseModel): dex: Optional[DataRelationshipsDex] = None + network: Optional[DataRelationshipsNetwork] = None + quote_token: Optional[DataRelationshipsQuoteToken] = None diff --git a/src/coingecko_sdk/types/onchain/pools/trending_search_get_response.py b/src/coingecko_sdk/types/onchain/pools/trending_search_get_response.py index 405d560..5d8e940 100644 --- a/src/coingecko_sdk/types/onchain/pools/trending_search_get_response.py +++ b/src/coingecko_sdk/types/onchain/pools/trending_search_get_response.py @@ -40,7 +40,7 @@ class DataAttributes(BaseModel): reserve_in_usd: Optional[str] = None - trending_rank: Optional[float] = None + trending_rank: Optional[int] = None volume_usd: Optional[DataAttributesVolumeUsd] = None diff --git a/src/coingecko_sdk/types/onchain/search/pool_get_params.py b/src/coingecko_sdk/types/onchain/search/pool_get_params.py index fb0b7a7..9484fb0 100644 --- a/src/coingecko_sdk/types/onchain/search/pool_get_params.py +++ b/src/coingecko_sdk/types/onchain/search/pool_get_params.py @@ -21,4 +21,7 @@ class PoolGetParams(TypedDict, total=False): """page through results Default value: 1""" query: str - """search query""" + """ + search query, can be pool contract address, token name, token symbol, or token + contract address + """ diff --git a/src/coingecko_sdk/types/onchain/search/pool_get_response.py b/src/coingecko_sdk/types/onchain/search/pool_get_response.py index 269180c..909a93c 100644 --- a/src/coingecko_sdk/types/onchain/search/pool_get_response.py +++ b/src/coingecko_sdk/types/onchain/search/pool_get_response.py @@ -12,6 +12,7 @@ "DataAttributesTransactions", "DataAttributesTransactionsH1", "DataAttributesTransactionsH24", + "DataAttributesTransactionsH6", "DataAttributesTransactionsM15", "DataAttributesTransactionsM30", "DataAttributesTransactionsM5", @@ -21,6 +22,8 @@ "DataRelationshipsBaseTokenData", "DataRelationshipsDex", "DataRelationshipsDexData", + "DataRelationshipsNetwork", + "DataRelationshipsNetworkData", "DataRelationshipsQuoteToken", "DataRelationshipsQuoteTokenData", "Included", @@ -62,6 +65,16 @@ class DataAttributesTransactionsH24(BaseModel): sells: Optional[int] = None +class DataAttributesTransactionsH6(BaseModel): + buyers: Optional[int] = None + + buys: Optional[int] = None + + sellers: Optional[int] = None + + sells: Optional[int] = None + + class DataAttributesTransactionsM15(BaseModel): buyers: Optional[int] = None @@ -97,6 +110,8 @@ class DataAttributesTransactions(BaseModel): h24: Optional[DataAttributesTransactionsH24] = None + h6: Optional[DataAttributesTransactionsH6] = None + m15: Optional[DataAttributesTransactionsM15] = None m30: Optional[DataAttributesTransactionsM30] = None @@ -170,6 +185,16 @@ class DataRelationshipsDex(BaseModel): data: Optional[DataRelationshipsDexData] = None +class DataRelationshipsNetworkData(BaseModel): + id: Optional[str] = None + + type: Optional[str] = None + + +class DataRelationshipsNetwork(BaseModel): + data: Optional[DataRelationshipsNetworkData] = None + + class DataRelationshipsQuoteTokenData(BaseModel): id: Optional[str] = None @@ -185,6 +210,8 @@ class DataRelationships(BaseModel): dex: Optional[DataRelationshipsDex] = None + network: Optional[DataRelationshipsNetwork] = None + quote_token: Optional[DataRelationshipsQuoteToken] = None diff --git a/src/coingecko_sdk/types/onchain/tokens/info_recently_updated_get_response.py b/src/coingecko_sdk/types/onchain/tokens/info_recently_updated_get_response.py index 27e2522..5bfc66e 100644 --- a/src/coingecko_sdk/types/onchain/tokens/info_recently_updated_get_response.py +++ b/src/coingecko_sdk/types/onchain/tokens/info_recently_updated_get_response.py @@ -19,8 +19,14 @@ class DataAttributes(BaseModel): coingecko_coin_id: Optional[str] = None + decimals: Optional[int] = None + description: Optional[str] = None + discord_url: Optional[str] = None + + farcaster_url: Optional[str] = None + gt_score: Optional[float] = None image_url: Optional[str] = None @@ -31,8 +37,14 @@ class DataAttributes(BaseModel): symbol: Optional[str] = None + telegram_handle: Optional[str] = None + + twitter_handle: Optional[str] = None + websites: Optional[List[str]] = None + zora_url: Optional[str] = None + class DataRelationshipsNetworkData(BaseModel): id: Optional[str] = None @@ -59,4 +71,4 @@ class Data(BaseModel): class InfoRecentlyUpdatedGetResponse(BaseModel): - data: Optional[Data] = None + data: Optional[List[Data]] = None diff --git a/src/coingecko_sdk/types/public_treasury_get_coin_id_response.py b/src/coingecko_sdk/types/public_treasury_get_coin_id_response.py index ad65ae2..69c1ec9 100644 --- a/src/coingecko_sdk/types/public_treasury_get_coin_id_response.py +++ b/src/coingecko_sdk/types/public_treasury_get_coin_id_response.py @@ -4,85 +4,34 @@ from typing_extensions import TypeAlias from .._models import BaseModel +from .treasury_entity import TreasuryEntity -__all__ = [ - "PublicTreasuryGetCoinIDResponse", - "CompaniesTreasury", - "CompaniesTreasuryCompany", - "GovernmentsTreasury", - "GovernmentsTreasuryGovernment", -] - - -class CompaniesTreasuryCompany(BaseModel): - country: Optional[str] = None - """company incorporated or government country""" - - name: Optional[str] = None - """company or government name""" - - percentage_of_total_supply: Optional[float] = None - """percentage of total crypto supply""" - - symbol: Optional[str] = None - """company symbol""" - - total_current_value_usd: Optional[float] = None - """total current value of crypto holdings in usd""" - - total_entry_value_usd: Optional[float] = None - """total entry value in usd""" - - total_holdings: Optional[float] = None - """total crypto holdings""" +__all__ = ["PublicTreasuryGetCoinIDResponse", "CompaniesTreasury", "GovernmentsTreasury"] class CompaniesTreasury(BaseModel): - companies: List[CompaniesTreasuryCompany] + companies: Optional[List[TreasuryEntity]] = None - market_cap_dominance: float + market_cap_dominance: Optional[float] = None """market cap dominance""" - total_holdings: float + total_holdings: Optional[float] = None """total crypto holdings of companies""" - total_value_usd: float + total_value_usd: Optional[float] = None """total crypto holdings value in usd""" -class GovernmentsTreasuryGovernment(BaseModel): - country: Optional[str] = None - """company incorporated or government country""" - - name: Optional[str] = None - """company or government name""" - - percentage_of_total_supply: Optional[float] = None - """percentage of total crypto supply""" - - symbol: Optional[str] = None - """company symbol""" - - total_current_value_usd: Optional[float] = None - """total current value of crypto holdings in usd""" - - total_entry_value_usd: Optional[float] = None - """total entry value in usd""" - - total_holdings: Optional[float] = None - """total crypto holdings""" - - class GovernmentsTreasury(BaseModel): - governments: List[GovernmentsTreasuryGovernment] + governments: Optional[List[TreasuryEntity]] = None - market_cap_dominance: float + market_cap_dominance: Optional[float] = None """market cap dominance""" - total_holdings: float + total_holdings: Optional[float] = None """total crypto holdings of governments""" - total_value_usd: float + total_value_usd: Optional[float] = None """total crypto holdings value in usd""" diff --git a/src/coingecko_sdk/types/public_treasury_get_entity_id_response.py b/src/coingecko_sdk/types/public_treasury_get_entity_id_response.py index 339c1cb..e55fc3f 100644 --- a/src/coingecko_sdk/types/public_treasury_get_entity_id_response.py +++ b/src/coingecko_sdk/types/public_treasury_get_entity_id_response.py @@ -19,15 +19,15 @@ class HoldingHoldingAmountChange(BaseModel): holding amount changes over different timeframes (only present if holding_amount_change param is used) """ - api_14d: Optional[float] = FieldInfo(alias="14d", default=None) + period_14d: Optional[float] = FieldInfo(alias="14d", default=None) - api_1y: Optional[float] = FieldInfo(alias="1y", default=None) + period_1y: Optional[float] = FieldInfo(alias="1y", default=None) - api_30d: Optional[float] = FieldInfo(alias="30d", default=None) + period_30d: Optional[float] = FieldInfo(alias="30d", default=None) - api_7d: Optional[float] = FieldInfo(alias="7d", default=None) + period_7d: Optional[float] = FieldInfo(alias="7d", default=None) - api_90d: Optional[float] = FieldInfo(alias="90d", default=None) + period_90d: Optional[float] = FieldInfo(alias="90d", default=None) ytd: Optional[float] = None @@ -37,15 +37,15 @@ class HoldingHoldingChangePercentage(BaseModel): holding change percentages over different timeframes (only present if holding_change_percentage param is used) """ - api_14d: Optional[float] = FieldInfo(alias="14d", default=None) + period_14d: Optional[float] = FieldInfo(alias="14d", default=None) - api_1y: Optional[float] = FieldInfo(alias="1y", default=None) + period_1y: Optional[float] = FieldInfo(alias="1y", default=None) - api_30d: Optional[float] = FieldInfo(alias="30d", default=None) + period_30d: Optional[float] = FieldInfo(alias="30d", default=None) - api_7d: Optional[float] = FieldInfo(alias="7d", default=None) + period_7d: Optional[float] = FieldInfo(alias="7d", default=None) - api_90d: Optional[float] = FieldInfo(alias="90d", default=None) + period_90d: Optional[float] = FieldInfo(alias="90d", default=None) ytd: 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 2a0c510..ecf838e 100644 --- a/src/coingecko_sdk/types/search/trending_get_response.py +++ b/src/coingecko_sdk/types/search/trending_get_response.py @@ -11,9 +11,11 @@ "CategoryDataMarketCapChangePercentage24h", "Coin", "CoinData", + "CoinDataContent", "CoinDataPriceChangePercentage24h", "NFT", "NFTData", + "NFTDataContent", ] @@ -63,6 +65,12 @@ class Category(BaseModel): """category web slug""" +class CoinDataContent(BaseModel): + description: Optional[str] = None + + title: Optional[str] = None + + class CoinDataPriceChangePercentage24h(BaseModel): """coin price change percentage in 24 hours""" @@ -72,7 +80,7 @@ class CoinDataPriceChangePercentage24h(BaseModel): class CoinData(BaseModel): - content: Optional[str] = None + content: Optional[CoinDataContent] = None market_cap: Optional[str] = None """coin market cap in usd""" @@ -135,8 +143,14 @@ class Coin(BaseModel): """coin thumb image url""" +class NFTDataContent(BaseModel): + description: Optional[str] = None + + title: Optional[str] = None + + class NFTData(BaseModel): - content: Optional[str] = None + content: Optional[NFTDataContent] = None floor_price: Optional[str] = None """NFT collection floor price""" diff --git a/src/coingecko_sdk/types/token_list_get_all_json_response.py b/src/coingecko_sdk/types/token_list_get_all_json_response.py index 032d73a..f79fb11 100644 --- a/src/coingecko_sdk/types/token_list_get_all_json_response.py +++ b/src/coingecko_sdk/types/token_list_get_all_json_response.py @@ -7,7 +7,7 @@ from .._models import BaseModel -__all__ = ["TokenListGetAllJsonResponse", "Token"] +__all__ = ["TokenListGetAllJsonResponse", "Token", "Version"] class Token(BaseModel): @@ -30,6 +30,16 @@ class Token(BaseModel): """token symbol""" +class Version(BaseModel): + """token list version""" + + major: Optional[float] = None + + minor: Optional[float] = None + + patch: Optional[float] = None + + class TokenListGetAllJsonResponse(BaseModel): keywords: Optional[List[str]] = None @@ -40,3 +50,6 @@ class TokenListGetAllJsonResponse(BaseModel): timestamp: Optional[datetime] = None tokens: Optional[List[Token]] = None + + version: Optional[Version] = None + """token list version""" diff --git a/src/coingecko_sdk/types/treasury_entity.py b/src/coingecko_sdk/types/treasury_entity.py new file mode 100644 index 0000000..d842f80 --- /dev/null +++ b/src/coingecko_sdk/types/treasury_entity.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional + +from .._models import BaseModel + +__all__ = ["TreasuryEntity"] + + +class TreasuryEntity(BaseModel): + country: Optional[str] = None + """company incorporated or government country""" + + name: Optional[str] = None + """company or government name""" + + percentage_of_total_supply: Optional[float] = None + """percentage of total crypto supply""" + + symbol: Optional[str] = None + """company symbol""" + + total_current_value_usd: Optional[float] = None + """total current value of crypto holdings in usd""" + + total_entry_value_usd: Optional[float] = None + """total entry value in usd""" + + total_holdings: Optional[float] = None + """total crypto holdings""" diff --git a/tests/api_resources/test_news.py b/tests/api_resources/test_news.py new file mode 100644 index 0000000..6eab75b --- /dev/null +++ b/tests/api_resources/test_news.py @@ -0,0 +1,104 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +import os +from typing import Any, cast + +import pytest + +from tests.utils import assert_matches_type +from coingecko_sdk import Coingecko, AsyncCoingecko +from coingecko_sdk.types import NewsGetResponse + +base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") + + +class TestNews: + parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + def test_method_get(self, client: Coingecko) -> None: + news = client.news.get() + assert_matches_type(NewsGetResponse, news, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + def test_method_get_with_all_params(self, client: Coingecko) -> None: + news = client.news.get( + coin_id="coin_id", + language="en", + page=1, + per_page=1, + type="all", + ) + assert_matches_type(NewsGetResponse, news, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + def test_raw_response_get(self, client: Coingecko) -> None: + response = client.news.with_raw_response.get() + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + news = response.parse() + assert_matches_type(NewsGetResponse, news, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + def test_streaming_response_get(self, client: Coingecko) -> None: + with client.news.with_streaming_response.get() as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + news = response.parse() + assert_matches_type(NewsGetResponse, news, path=["response"]) + + assert cast(Any, response.is_closed) is True + + +class TestAsyncNews: + parametrize = pytest.mark.parametrize( + "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] + ) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_method_get(self, async_client: AsyncCoingecko) -> None: + news = await async_client.news.get() + assert_matches_type(NewsGetResponse, news, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_method_get_with_all_params(self, async_client: AsyncCoingecko) -> None: + news = await async_client.news.get( + coin_id="coin_id", + language="en", + page=1, + per_page=1, + type="all", + ) + assert_matches_type(NewsGetResponse, news, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_raw_response_get(self, async_client: AsyncCoingecko) -> None: + response = await async_client.news.with_raw_response.get() + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + news = await response.parse() + assert_matches_type(NewsGetResponse, news, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_streaming_response_get(self, async_client: AsyncCoingecko) -> None: + async with async_client.news.with_streaming_response.get() as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + news = await response.parse() + assert_matches_type(NewsGetResponse, news, path=["response"]) + + assert cast(Any, response.is_closed) is True diff --git a/tests/test_extract_files.py b/tests/test_extract_files.py index 5a3b056..d2e3d5a 100644 --- a/tests/test_extract_files.py +++ b/tests/test_extract_files.py @@ -4,7 +4,7 @@ import pytest -from coingecko_sdk._types import FileTypes +from coingecko_sdk._types import FileTypes, ArrayFormat from coingecko_sdk._utils import extract_files @@ -37,10 +37,7 @@ def test_multiple_files() -> None: def test_top_level_file_array() -> None: query = {"files": [b"file one", b"file two"], "title": "hello"} - assert extract_files(query, paths=[["files", ""]]) == [ - ("files[]", b"file one"), - ("files[]", b"file two"), - ] + assert extract_files(query, paths=[["files", ""]]) == [("files[]", b"file one"), ("files[]", b"file two")] assert query == {"title": "hello"} @@ -71,3 +68,24 @@ def test_ignores_incorrect_paths( expected: list[tuple[str, FileTypes]], ) -> None: assert extract_files(query, paths=paths) == expected + + +@pytest.mark.parametrize( + "array_format,expected_top_level,expected_nested", + [ + ("brackets", [("files[]", b"a"), ("files[]", b"b")], [("items[][file]", b"a"), ("items[][file]", b"b")]), + ("repeat", [("files", b"a"), ("files", b"b")], [("items[file]", b"a"), ("items[file]", b"b")]), + ("comma", [("files", b"a"), ("files", b"b")], [("items[file]", b"a"), ("items[file]", b"b")]), + ("indices", [("files[0]", b"a"), ("files[1]", b"b")], [("items[0][file]", b"a"), ("items[1][file]", b"b")]), + ], +) +def test_array_format_controls_file_field_names( + array_format: ArrayFormat, + expected_top_level: list[tuple[str, FileTypes]], + expected_nested: list[tuple[str, FileTypes]], +) -> None: + top_level = {"files": [b"a", b"b"]} + assert extract_files(top_level, paths=[["files", ""]], array_format=array_format) == expected_top_level + + nested = {"items": [{"file": b"a"}, {"file": b"b"}]} + assert extract_files(nested, paths=[["items", "", "file"]], array_format=array_format) == expected_nested diff --git a/tests/test_files.py b/tests/test_files.py index 5a49ce6..b86ea60 100644 --- a/tests/test_files.py +++ b/tests/test_files.py @@ -131,7 +131,7 @@ def test_extract_files_does_not_mutate_original_nested_array_path(self) -> None: copied = deepcopy_with_paths(original, [["items", "", "file"]]) extracted = extract_files(copied, paths=[["items", "", "file"]]) - assert extracted == [("items[][file]", file1), ("items[][file]", file2)] + assert [entry for _, entry in extracted] == [file1, file2] assert original == { "items": [ {"file": file1, "extra": 1},