diff --git a/src/polymarket/models/data/analytics.py b/src/polymarket/models/data/analytics.py index 72aadaf..b1d06b3 100644 --- a/src/polymarket/models/data/analytics.py +++ b/src/polymarket/models/data/analytics.py @@ -1,6 +1,7 @@ from __future__ import annotations from decimal import Decimal +from typing import Literal from pydantic import Field, field_validator @@ -9,6 +10,8 @@ from polymarket.models.types import CtfConditionId, TokenId, validate_optional_ctf_condition_id from polymarket.types import EvmAddress +OpenInterestMarket = CtfConditionId | Literal["GLOBAL"] + class MarketVolume(BaseModel): market: CtfConditionId | None = None @@ -36,12 +39,14 @@ def _parse_total(cls, value: object) -> Decimal | None: class OpenInterest(BaseModel): - market: CtfConditionId | None = None + market: OpenInterestMarket | None = None value: Decimal | None = None @field_validator("market", mode="before") @classmethod - def _validate_market(cls, value: object) -> CtfConditionId | None: + def _validate_market(cls, value: object) -> OpenInterestMarket | None: + if value == "GLOBAL": + return "GLOBAL" return validate_optional_ctf_condition_id(value) @field_validator("value", mode="before") diff --git a/tests/unit/test_data_models.py b/tests/unit/test_data_models.py index e2f8c24..b0b1ada 100644 --- a/tests/unit/test_data_models.py +++ b/tests/unit/test_data_models.py @@ -101,6 +101,13 @@ def test_open_interest_parses_payload() -> None: assert interest.value == Decimal("1500") +def test_open_interest_accepts_global_market() -> None: + interest = OpenInterest.parse_response({"market": "GLOBAL", "value": "1500"}) + + assert interest.market == "GLOBAL" + assert interest.value == Decimal("1500") + + def test_holder_renames_proxy_wallet_and_asset() -> None: holder = Holder.parse_response( {