From 619fc1ecc9b5108c6ce69249d0940141b7c48837 Mon Sep 17 00:00:00 2001 From: hamin Date: Wed, 22 Apr 2026 15:32:42 +0900 Subject: [PATCH 1/3] chore: regen SDK for /api/v1/open-interest + /api/v1/liquidation --- datamaxi/_endpoints.py | 999 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 999 insertions(+) create mode 100644 datamaxi/_endpoints.py diff --git a/datamaxi/_endpoints.py b/datamaxi/_endpoints.py new file mode 100644 index 0000000..837a30d --- /dev/null +++ b/datamaxi/_endpoints.py @@ -0,0 +1,999 @@ +""" +Auto-generated endpoint registry from openapi.yaml. +DO NOT EDIT — regenerate with: make python +""" + +ENDPOINTS = { + "cex_announcements": { + "path": "/api/v1/cex/announcements", + "method": "GET", + "tag": "announcements", + "summary": "Announcements", + "requires_auth": True, + "group": "announcements", + "params": { + "page": { + "required": False, + "type": "int", + "default": 1, + "description": "Page number", + }, + "limit": { + "required": False, + "type": "int", + "default": 10, + "description": "Page size", + }, + "sort": { + "required": False, + "type": "str", + "default": "desc", + "enum": ['asc', 'desc'], + "description": "Specifies sort", + }, + "key": { + "required": False, + "type": "str", + "default": "timestamp", + "enum": ['exchange', 'category', 'title', 'timestamp'], + "description": "Specifies key to sort by", + }, + "exchange": { + "required": False, + "type": "str", + "description": "Specifies exchange(s), separated by ,", + }, + "category": { + "required": False, + "type": "str", + "default": "", + "enum": ['notice', 'listing', 'delisting', 'user_events'], + "description": "Specifies category(s), separated by ,", + }, + }, + }, + "cex_candle": { + "path": "/api/v1/cex/candle", + "method": "GET", + "tag": "cex-candle", + "summary": "Data", + "requires_auth": True, + "group": "cex", + "subgroup": "candle", + "params": { + "exchange": { + "required": True, + "type": "str", + "description": "Specifes exchange", + }, + "market": { + "required": True, + "type": "str", + "default": "spot", + "enum": ['spot', 'futures'], + "description": "Specifies market", + }, + "symbol": { + "required": True, + "type": "str", + "description": "Specifies symbol", + }, + "currency": { + "required": False, + "type": "str", + "default": "USD", + "enum": ['USD', 'KRW'], + "description": "Specifies currency", + }, + "interval": { + "required": False, + "type": "str", + "default": "1d", + "description": "Specifies interval", + }, + "from": { + "required": False, + "type": "str", + "description": "Specifies from", + }, + "to": { + "required": False, + "type": "str", + "description": "Specifies to", + }, + }, + }, + "cex_candle_exchanges": { + "path": "/api/v1/cex/candle/exchanges", + "method": "GET", + "tag": "cex-candle", + "summary": "Exchanges", + "requires_auth": False, + "group": "cex", + "subgroup": "candle", + "params": { + "market": { + "required": True, + "type": "str", + "enum": ['spot', 'futures'], + "description": "Specifies market type", + }, + }, + }, + "cex_candle_intervals": { + "path": "/api/v1/cex/candle/intervals", + "method": "GET", + "tag": "cex-candle", + "summary": "Intervals", + "requires_auth": False, + "group": "cex", + "subgroup": "candle", + "params": { + }, + }, + "cex_candle_symbols": { + "path": "/api/v1/cex/candle/symbols", + "method": "GET", + "tag": "cex-candle", + "summary": "Symbols", + "requires_auth": False, + "group": "cex", + "subgroup": "candle", + "params": { + "exchange": { + "required": False, + "type": "str", + "description": "Specifies exchange name", + }, + "market": { + "required": False, + "type": "str", + "enum": ['spot', 'futures'], + "description": "Specifies market type", + }, + }, + }, + "dex_candle": { + "path": "/api/v1/dex/candle", + "method": "GET", + "tag": "dex", + "summary": "Candle", + "requires_auth": True, + "group": "dex", + "params": { + "chain": { + "required": True, + "type": "str", + "description": "Specifes chain", + }, + "exchange": { + "required": True, + "type": "str", + "description": "Specifes exchange", + }, + "pool": { + "required": True, + "type": "str", + "description": "Specifies pool", + }, + "interval": { + "required": False, + "type": "str", + "default": "1d", + "description": "Specifies interval", + }, + "from": { + "required": False, + "type": "str", + "description": "Specifies from", + }, + "to": { + "required": False, + "type": "str", + "description": "Specifies to", + }, + "page": { + "required": False, + "type": "int", + "default": 1, + "description": "Page number", + }, + "limit": { + "required": False, + "type": "int", + "default": 1000, + "description": "Page size", + }, + "sort": { + "required": False, + "type": "str", + "default": "asc", + "enum": ['asc', 'desc'], + "description": "Specifies sort", + }, + }, + }, + "dex_chains": { + "path": "/api/v1/dex/chains", + "method": "GET", + "tag": "dex", + "summary": "Chains", + "requires_auth": False, + "group": "dex", + "params": { + }, + }, + "dex_exchanges": { + "path": "/api/v1/dex/exchanges", + "method": "GET", + "tag": "dex", + "summary": "Exchanges", + "requires_auth": False, + "group": "dex", + "params": { + }, + }, + "dex_intervals": { + "path": "/api/v1/dex/intervals", + "method": "GET", + "tag": "dex", + "summary": "Intervals", + "requires_auth": False, + "group": "dex", + "params": { + }, + }, + "dex_pools": { + "path": "/api/v1/dex/pools", + "method": "GET", + "tag": "dex", + "summary": "Pools", + "requires_auth": False, + "group": "dex", + "params": { + "exchange": { + "required": False, + "type": "str", + "description": "Specifies exchange name", + }, + "chain": { + "required": False, + "type": "str", + "description": "Specifies the chain name", + }, + }, + }, + "dex_trade": { + "path": "/api/v1/dex/trade", + "method": "GET", + "tag": "dex", + "summary": "Trade", + "requires_auth": True, + "group": "dex", + "params": { + "chain": { + "required": True, + "type": "str", + "description": "Specifes chain", + }, + "exchange": { + "required": True, + "type": "str", + "description": "Specifes exchange", + }, + "pool": { + "required": True, + "type": "str", + "description": "Specifies pool", + }, + "from": { + "required": False, + "type": "str", + "description": "Specifies from", + }, + "to": { + "required": False, + "type": "str", + "description": "Specifies to", + }, + "page": { + "required": False, + "type": "int", + "default": 1, + "description": "Page number", + }, + "limit": { + "required": False, + "type": "int", + "default": 1000, + "description": "Page size", + }, + "sort": { + "required": False, + "type": "str", + "default": "asc", + "enum": ['asc', 'desc'], + "description": "Specifies sort", + }, + }, + }, + "forex": { + "path": "/api/v1/forex", + "method": "GET", + "tag": "forex", + "summary": "Forex", + "requires_auth": True, + "group": "forex", + "params": { + "symbol": { + "required": False, + "type": "str", + "description": "Specifies symbol", + }, + }, + }, + "forex_symbols": { + "path": "/api/v1/forex/symbols", + "method": "GET", + "tag": "forex", + "summary": "Symbols", + "requires_auth": False, + "group": "forex", + "params": { + }, + }, + "funding_rate_exchanges": { + "path": "/api/v1/funding-rate/exchanges", + "method": "GET", + "tag": "funding-rate", + "summary": "Exchanges", + "requires_auth": False, + "group": "funding_rate", + "params": { + }, + }, + "funding_rate_history": { + "path": "/api/v1/funding-rate/history", + "method": "GET", + "tag": "funding-rate", + "summary": "Historical funding rate", + "requires_auth": True, + "group": "funding_rate", + "params": { + "exchange": { + "required": True, + "type": "str", + "description": "Specifes exchange", + }, + "symbol": { + "required": True, + "type": "str", + "description": "Specifies symbol", + }, + "page": { + "required": False, + "type": "str", + "default": "1", + "description": "Specifies page", + }, + "limit": { + "required": False, + "type": "str", + "default": "1000", + "description": "Specifies limit", + }, + "from": { + "required": False, + "type": "str", + "description": "Specifies from", + }, + "to": { + "required": False, + "type": "str", + "description": "Specifies to", + }, + "sort": { + "required": False, + "type": "str", + "default": "asc", + "enum": ['asc', 'desc'], + "description": "Specifies sort", + }, + }, + }, + "funding_rate_latest": { + "path": "/api/v1/funding-rate/latest", + "method": "GET", + "tag": "funding-rate", + "summary": "Latest funding rate", + "requires_auth": True, + "group": "funding_rate", + "params": { + "exchange": { + "required": True, + "type": "str", + "description": "Specifies exchange", + }, + "symbol": { + "required": True, + "type": "str", + "description": "Specifies symbol", + }, + }, + }, + "funding_rate_symbols": { + "path": "/api/v1/funding-rate/symbols", + "method": "GET", + "tag": "funding-rate", + "summary": "Symbols", + "requires_auth": False, + "group": "funding_rate", + "params": { + "exchange": { + "required": True, + "type": "str", + "description": "Specifies exchange name", + }, + }, + }, + "index_price": { + "path": "/api/v1/index-price", + "method": "GET", + "tag": "index-price", + "summary": "Historical Index Price", + "requires_auth": True, + "group": "index_price", + "params": { + "asset": { + "required": True, + "type": "str", + "description": "Asset", + }, + "from": { + "required": False, + "type": "str", + "default": "now - 1 month", + "description": "Specifies from", + }, + "to": { + "required": False, + "type": "str", + "default": "now", + "description": "Specifies to", + }, + "interval": { + "required": False, + "type": "str", + "default": "5m", + "description": "interval", + }, + }, + }, + "liquidation": { + "path": "/api/v1/liquidation", + "method": "GET", + "tag": "liquidation", + "summary": "Recent Liquidations", + "requires_auth": True, + "group": "liquidation", + "params": { + "exchange": { + "required": True, + "type": "str", + "description": "Exchange identifier", + }, + "symbol": { + "required": True, + "type": "str", + "description": "Exchange-native API symbol", + }, + "limit": { + "required": False, + "type": "int", + "default": 100, + "description": "Number of events to return (1-1000)", + }, + }, + }, + "listings_historical": { + "path": "/api/v1/listings/historical", + "method": "GET", + "tag": "listing", + "summary": "Historical token listings", + "requires_auth": True, + "group": "listing", + "params": { + "refresh": { + "required": False, + "type": "bool", + "default": False, + "description": "Refresh cache", + }, + }, + }, + "margin_borrow": { + "path": "/api/v1/margin-borrow", + "method": "GET", + "tag": "margin-borrow", + "summary": "Margin borrow", + "requires_auth": True, + "group": "margin_borrow", + "params": { + "asset": { + "required": True, + "type": "str", + "description": "Token base asset", + }, + }, + }, + "naver_trend": { + "path": "/api/v1/naver-trend", + "method": "GET", + "tag": "naver-trend", + "summary": "Trend", + "requires_auth": True, + "group": "naver_trend", + "params": { + "symbol": { + "required": True, + "type": "str", + "description": "Specifies symbol", + }, + }, + }, + "naver_trend_symbols": { + "path": "/api/v1/naver-trend/symbols", + "method": "GET", + "tag": "naver-trend", + "summary": "Symbols", + "requires_auth": True, + "group": "naver_trend", + "params": { + }, + }, + "open_interest": { + "path": "/api/v1/open-interest", + "method": "GET", + "tag": "open-interest", + "summary": "Latest Open Interest", + "requires_auth": True, + "group": "open_interest", + "params": { + "exchange": { + "required": True, + "type": "str", + "description": "Exchange identifier", + }, + "symbol": { + "required": True, + "type": "str", + "description": "Exchange-native API symbol", + }, + }, + }, + "premium": { + "path": "/api/v1/premium", + "method": "GET", + "tag": "premium", + "summary": "Premium", + "requires_auth": True, + "group": "premium", + "params": { + "source_exchange": { + "required": False, + "type": "str", + "description": "Specifies source exchange(s), separated by ,", + }, + "target_exchange": { + "required": False, + "type": "str", + "description": "Specifies target exchange(s), separated by ,", + }, + "asset": { + "required": False, + "type": "str", + "description": "Specifies asset(s), separated by ,", + }, + "source_quote": { + "required": False, + "type": "str", + "description": "Specifies source quote(s), separated by ,", + }, + "target_quote": { + "required": False, + "type": "str", + "description": "Specifies target quote(s), separated by ,", + }, + "source_market": { + "required": False, + "type": "str", + "enum": ['spot', 'futures'], + "description": "Specifies source market", + }, + "target_market": { + "required": False, + "type": "str", + "enum": ['spot', 'futures'], + "description": "Specifies target market", + }, + "premium_type": { + "required": False, + "type": "str", + "enum": ['spot-spot', 'futures-futures', 'spot-futures'], + "description": "Specifies premium type(s), separated by ,", + }, + "currency": { + "required": False, + "type": "str", + "default": "USD", + "description": "Specifies currency applied to price values", + }, + "conversion_base": { + "required": False, + "type": "str", + "default": "USDT", + "description": "Specifies conversion base", + }, + "page": { + "required": False, + "type": "int", + "default": 1, + "description": "Page number", + }, + "limit": { + "required": False, + "type": "int", + "default": 10, + "description": "Page size", + }, + "sort": { + "required": False, + "type": "str", + "default": "desc", + "enum": ['asc', 'desc'], + "description": "Specifies sort order", + }, + "key": { + "required": False, + "type": "str", + "default": "pdp", + "description": "Specifies key to sort by", + }, + "query": { + "required": False, + "type": "str", + "description": "Search query for filtering assets", + }, + "only_transferable": { + "required": False, + "type": "bool", + "default": False, + "description": "Filter only transferable assets", + }, + "network": { + "required": False, + "type": "str", + "description": "Specifies network(s), separated by ,", + }, + "min_sv": { + "required": False, + "type": "float", + "description": "Minimum source volume", + }, + "min_tv": { + "required": False, + "type": "float", + "description": "Minimum target volume", + }, + }, + }, + "premium_exchanges": { + "path": "/api/v1/premium/exchanges", + "method": "GET", + "tag": "premium", + "summary": "Exchanges", + "requires_auth": False, + "group": "premium", + "params": { + }, + }, + "telegram_channels": { + "path": "/api/v1/telegram/channels", + "method": "GET", + "tag": "telegram", + "summary": "Channels", + "requires_auth": True, + "group": "telegram", + "params": { + "page": { + "required": False, + "type": "int", + "default": 1, + "description": "Page number", + }, + "limit": { + "required": False, + "type": "int", + "default": 10, + "description": "Page size", + }, + "category": { + "required": False, + "type": "str", + "default": "empty", + "description": "Specifies language category of telegram channel", + }, + "key": { + "required": False, + "type": "str", + "default": "channelName", + "enum": ['channelName', 'handle', 'subscribers', 'createdAt'], + "description": "Specifies key to sort by", + }, + "sort": { + "required": False, + "type": "str", + "default": "desc", + "enum": ['asc', 'desc'], + "description": "Specifies sort", + }, + }, + }, + "telegram_messages": { + "path": "/api/v1/telegram/messages", + "method": "GET", + "tag": "telegram", + "summary": "Messages", + "requires_auth": True, + "group": "telegram", + "params": { + "channel": { + "required": False, + "type": "str", + "default": "", + "description": "Specifies channel username", + }, + "page": { + "required": False, + "type": "int", + "default": 1, + "description": "Page number", + }, + "limit": { + "required": False, + "type": "int", + "default": 10, + "description": "Page size", + }, + "key": { + "required": False, + "type": "str", + "default": "publishedAt", + "enum": ['channelName', 'views', 'reactions', 'forwards', 'publishedAt'], + "description": "Specifies key to sort by", + }, + "sort": { + "required": False, + "type": "str", + "default": "desc", + "enum": ['asc', 'desc'], + "description": "Specifies sort", + }, + "category": { + "required": False, + "type": "str", + "default": "", + "enum": ['english', 'korean'], + "description": "Specifies category", + }, + "search_query": { + "required": False, + "type": "str", + "default": "", + "description": "Specifies search query", + }, + }, + }, + "ticker": { + "path": "/api/v1/ticker", + "method": "GET", + "tag": "ticker", + "summary": "Data", + "requires_auth": True, + "group": "ticker", + "params": { + "exchange": { + "required": True, + "type": "str", + "description": "Specifes exchange", + }, + "symbol": { + "required": True, + "type": "str", + "description": "Specifies symbol", + }, + "market": { + "required": False, + "type": "str", + "enum": ['spot', 'futures'], + "description": "Specifies market", + }, + "currency": { + "required": False, + "type": "str", + "default": "USD", + "enum": ['KRW', 'USD'], + "description": "Specifies currency applied to price values", + }, + "conversion_base": { + "required": False, + "type": "str", + "description": "Specifies conversion base applied to price values", + }, + }, + }, + "ticker_exchanges": { + "path": "/api/v1/ticker/exchanges", + "method": "GET", + "tag": "ticker", + "summary": "Exchanges", + "requires_auth": False, + "group": "ticker", + "params": { + "market": { + "required": False, + "type": "str", + "enum": ['spot', 'futures'], + "description": "Specifies market", + }, + }, + }, + "ticker_symbols": { + "path": "/api/v1/ticker/symbols", + "method": "GET", + "tag": "ticker", + "summary": "Symbols", + "requires_auth": False, + "group": "ticker", + "params": { + "exchange": { + "required": True, + "type": "str", + "description": "Specifes exchange", + }, + "market": { + "required": False, + "type": "str", + "enum": ['spot', 'futures'], + "description": "Specifies market", + }, + }, + }, + "cex_token_updates": { + "path": "/api/v1/cex/token/updates", + "method": "GET", + "tag": "token", + "summary": "Token Updates", + "requires_auth": True, + "group": "token", + "params": { + "page": { + "required": False, + "type": "str", + "default": "1", + "description": "Specifies page", + }, + "limit": { + "required": False, + "type": "str", + "default": "100", + "description": "Specifies limit", + }, + "type": { + "required": False, + "type": "str", + "enum": ['listed', 'delisted'], + "description": "Specifies type of token update", + }, + }, + }, + "cex_fees": { + "path": "/api/v1/cex/fees", + "method": "GET", + "tag": "trading-fees", + "summary": "Data", + "requires_auth": True, + "group": "trading_fees", + "params": { + "exchange": { + "required": False, + "type": "str", + "description": "Specifies exchange", + }, + "symbol": { + "required": False, + "type": "str", + "description": "Specifies symbol", + }, + }, + }, + "cex_fees_exchanges": { + "path": "/api/v1/cex/fees/exchanges", + "method": "GET", + "tag": "trading-fees", + "summary": "Exchanges", + "requires_auth": False, + "group": "trading_fees", + "params": { + }, + }, + "cex_fees_symbols": { + "path": "/api/v1/cex/fees/symbols", + "method": "GET", + "tag": "trading-fees", + "summary": "Symbols", + "requires_auth": False, + "group": "trading_fees", + "params": { + "exchange": { + "required": True, + "type": "str", + "description": "Specifes exchange", + }, + }, + }, + "wallet_status": { + "path": "/api/v1/wallet-status", + "method": "GET", + "tag": "wallet-status", + "summary": "Data", + "requires_auth": True, + "group": "wallet_status", + "params": { + "exchange": { + "required": False, + "type": "str", + "description": "Specifes exchange", + }, + "asset": { + "required": True, + "type": "str", + "description": "Specifies asset", + }, + }, + }, + "wallet_status_assets": { + "path": "/api/v1/wallet-status/assets", + "method": "GET", + "tag": "wallet-status", + "summary": "Assets", + "requires_auth": False, + "group": "wallet_status", + "params": { + "exchange": { + "required": True, + "type": "str", + "description": "Specifes exchange", + }, + }, + }, + "wallet_status_exchanges": { + "path": "/api/v1/wallet-status/exchanges", + "method": "GET", + "tag": "wallet-status", + "summary": "Exchanges", + "requires_auth": False, + "group": "wallet_status", + "params": { + }, + }, +} + + +# Endpoint index by group for SDK class mapping +GROUPS = {} +for _op_id, _ep in ENDPOINTS.items(): + _group = _ep.get("group", "") + _subgroup = _ep.get("subgroup") + _key = f"{_group}.{_subgroup}" if _subgroup else _group + GROUPS.setdefault(_key, []).append(_op_id) From d8059ff36ac6bf1807fa79de798378af3f8c8a1a Mon Sep 17 00:00:00 2001 From: hamin Date: Wed, 22 Apr 2026 17:50:43 +0900 Subject: [PATCH 2/3] codegen: regenerate _endpoints.py with /cex/symbol/* (42 endpoints) Co-Authored-By: Claude Opus 4.7 (1M context) --- datamaxi/_endpoints.py | 190 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) diff --git a/datamaxi/_endpoints.py b/datamaxi/_endpoints.py index 837a30d..345d73e 100644 --- a/datamaxi/_endpoints.py +++ b/datamaxi/_endpoints.py @@ -153,6 +153,196 @@ }, }, }, + "cex_symbol_cautions": { + "path": "/api/v1/cex/symbol/cautions", + "method": "GET", + "tag": "cex-symbol", + "summary": "Active symbol cautions", + "requires_auth": False, + "group": "cex", + "subgroup": "symbol", + "params": { + "exchange": { + "required": False, + "type": "str", + "description": "Exchange filter (comma-separated, empty = all)", + }, + "market": { + "required": False, + "type": "str", + "enum": ['spot', 'futures'], + "description": "spot or futures", + }, + "min_level": { + "required": False, + "type": "str", + "enum": ['caution', 'warning', 'danger'], + "description": "Minimum severity", + }, + "active_only": { + "required": False, + "type": "bool", + "description": "Exclude rows whose end_at is in the past (default true)", + }, + "limit": { + "required": False, + "type": "int", + "description": "Page size (default 500, max 5000)", + }, + "page": { + "required": False, + "type": "int", + "description": "Page number (1-based)", + }, + }, + }, + "cex_symbol_delistings": { + "path": "/api/v1/cex/symbol/delistings", + "method": "GET", + "tag": "cex-symbol", + "summary": "Delisting schedule", + "requires_auth": False, + "group": "cex", + "subgroup": "symbol", + "params": { + "exchange": { + "required": False, + "type": "str", + "description": "Exchange filter (comma-separated)", + }, + "market": { + "required": False, + "type": "str", + "enum": ['spot', 'futures'], + "description": "spot or futures", + }, + "from_ms": { + "required": False, + "type": "int", + "description": "Lower bound for delisting_at (ms epoch, default = now)", + }, + "to_ms": { + "required": False, + "type": "int", + "description": "Upper bound for delisting_at (ms epoch, default = now+30 days)", + }, + "include_past": { + "required": False, + "type": "bool", + "description": "Include already-delisted rows (default false)", + }, + "limit": { + "required": False, + "type": "int", + "description": "Page size (default 200, max 2000)", + }, + "page": { + "required": False, + "type": "int", + "description": "Page number (1-based)", + }, + }, + }, + "cex_symbol_metadata": { + "path": "/api/v1/cex/symbol/metadata", + "method": "GET", + "tag": "cex-symbol", + "summary": "Symbol metadata", + "requires_auth": False, + "group": "cex", + "subgroup": "symbol", + "params": { + "exchange": { + "required": False, + "type": "str", + "description": "Comma-separated exchange names (empty = all)", + }, + "market": { + "required": False, + "type": "str", + "enum": ['spot', 'futures'], + "description": "spot or futures (empty = both)", + }, + "base": { + "required": False, + "type": "str", + "description": "Base asset filter", + }, + "quote": { + "required": False, + "type": "str", + "description": "Quote asset filter", + }, + "status": { + "required": False, + "type": "str", + "description": "trading_status filter (repeatable, comma-separated)", + }, + "limit": { + "required": False, + "type": "int", + "description": "Page size (default 200, max 2000)", + }, + "page": { + "required": False, + "type": "int", + "description": "Page number (1-based)", + }, + }, + }, + "cex_symbol_tags": { + "path": "/api/v1/cex/symbol/tags", + "method": "GET", + "tag": "cex-symbol", + "summary": "Symbol tags", + "requires_auth": False, + "group": "cex", + "subgroup": "symbol", + "params": { + "tag": { + "required": False, + "type": "str", + "description": "Tag filter (repeatable, comma-separated)", + }, + "exchange": { + "required": False, + "type": "str", + "description": "Exchange filter (repeatable, comma-separated)", + }, + "market": { + "required": False, + "type": "str", + "enum": ['spot', 'futures'], + "description": "spot or futures", + }, + "base": { + "required": False, + "type": "str", + "description": "Base asset filter", + }, + "source": { + "required": False, + "type": "str", + "enum": ['rest_native', 'announcement', 'cmc', 'manual'], + "description": "Tag source filter", + }, + "min_confidence": { + "required": False, + "type": "int", + "description": "Minimum confidence (0-100, default 80)", + }, + "limit": { + "required": False, + "type": "int", + "description": "Page size (default 500, max 5000)", + }, + "page": { + "required": False, + "type": "int", + "description": "Page number (1-based)", + }, + }, + }, "dex_candle": { "path": "/api/v1/dex/candle", "method": "GET", From e5d5e4035dcdce30382a33633cf7abdae7319028 Mon Sep 17 00:00:00 2001 From: hamin Date: Wed, 22 Apr 2026 18:03:04 +0900 Subject: [PATCH 3/3] chore: black-format _endpoints.py codegen's emit_python.py produces single-quoted enums and multi-line empty dicts; black normalizes to double quotes and `{}` one-liners. Fixing the generator itself should be a follow-up in datamaxi-codegen. Co-Authored-By: Claude Opus 4.7 (1M context) --- datamaxi/_endpoints.py | 96 ++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 50 deletions(-) diff --git a/datamaxi/_endpoints.py b/datamaxi/_endpoints.py index 345d73e..788c492 100644 --- a/datamaxi/_endpoints.py +++ b/datamaxi/_endpoints.py @@ -28,14 +28,14 @@ "required": False, "type": "str", "default": "desc", - "enum": ['asc', 'desc'], + "enum": ["asc", "desc"], "description": "Specifies sort", }, "key": { "required": False, "type": "str", "default": "timestamp", - "enum": ['exchange', 'category', 'title', 'timestamp'], + "enum": ["exchange", "category", "title", "timestamp"], "description": "Specifies key to sort by", }, "exchange": { @@ -47,7 +47,7 @@ "required": False, "type": "str", "default": "", - "enum": ['notice', 'listing', 'delisting', 'user_events'], + "enum": ["notice", "listing", "delisting", "user_events"], "description": "Specifies category(s), separated by ,", }, }, @@ -70,7 +70,7 @@ "required": True, "type": "str", "default": "spot", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "Specifies market", }, "symbol": { @@ -82,7 +82,7 @@ "required": False, "type": "str", "default": "USD", - "enum": ['USD', 'KRW'], + "enum": ["USD", "KRW"], "description": "Specifies currency", }, "interval": { @@ -115,7 +115,7 @@ "market": { "required": True, "type": "str", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "Specifies market type", }, }, @@ -128,8 +128,7 @@ "requires_auth": False, "group": "cex", "subgroup": "candle", - "params": { - }, + "params": {}, }, "cex_candle_symbols": { "path": "/api/v1/cex/candle/symbols", @@ -148,7 +147,7 @@ "market": { "required": False, "type": "str", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "Specifies market type", }, }, @@ -170,13 +169,13 @@ "market": { "required": False, "type": "str", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "spot or futures", }, "min_level": { "required": False, "type": "str", - "enum": ['caution', 'warning', 'danger'], + "enum": ["caution", "warning", "danger"], "description": "Minimum severity", }, "active_only": { @@ -213,7 +212,7 @@ "market": { "required": False, "type": "str", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "spot or futures", }, "from_ms": { @@ -260,7 +259,7 @@ "market": { "required": False, "type": "str", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "spot or futures (empty = both)", }, "base": { @@ -312,7 +311,7 @@ "market": { "required": False, "type": "str", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "spot or futures", }, "base": { @@ -323,7 +322,7 @@ "source": { "required": False, "type": "str", - "enum": ['rest_native', 'announcement', 'cmc', 'manual'], + "enum": ["rest_native", "announcement", "cmc", "manual"], "description": "Tag source filter", }, "min_confidence": { @@ -398,7 +397,7 @@ "required": False, "type": "str", "default": "asc", - "enum": ['asc', 'desc'], + "enum": ["asc", "desc"], "description": "Specifies sort", }, }, @@ -410,8 +409,7 @@ "summary": "Chains", "requires_auth": False, "group": "dex", - "params": { - }, + "params": {}, }, "dex_exchanges": { "path": "/api/v1/dex/exchanges", @@ -420,8 +418,7 @@ "summary": "Exchanges", "requires_auth": False, "group": "dex", - "params": { - }, + "params": {}, }, "dex_intervals": { "path": "/api/v1/dex/intervals", @@ -430,8 +427,7 @@ "summary": "Intervals", "requires_auth": False, "group": "dex", - "params": { - }, + "params": {}, }, "dex_pools": { "path": "/api/v1/dex/pools", @@ -502,7 +498,7 @@ "required": False, "type": "str", "default": "asc", - "enum": ['asc', 'desc'], + "enum": ["asc", "desc"], "description": "Specifies sort", }, }, @@ -529,8 +525,7 @@ "summary": "Symbols", "requires_auth": False, "group": "forex", - "params": { - }, + "params": {}, }, "funding_rate_exchanges": { "path": "/api/v1/funding-rate/exchanges", @@ -539,8 +534,7 @@ "summary": "Exchanges", "requires_auth": False, "group": "funding_rate", - "params": { - }, + "params": {}, }, "funding_rate_history": { "path": "/api/v1/funding-rate/history", @@ -586,7 +580,7 @@ "required": False, "type": "str", "default": "asc", - "enum": ['asc', 'desc'], + "enum": ["asc", "desc"], "description": "Specifies sort", }, }, @@ -738,8 +732,7 @@ "summary": "Symbols", "requires_auth": True, "group": "naver_trend", - "params": { - }, + "params": {}, }, "open_interest": { "path": "/api/v1/open-interest", @@ -797,19 +790,19 @@ "source_market": { "required": False, "type": "str", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "Specifies source market", }, "target_market": { "required": False, "type": "str", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "Specifies target market", }, "premium_type": { "required": False, "type": "str", - "enum": ['spot-spot', 'futures-futures', 'spot-futures'], + "enum": ["spot-spot", "futures-futures", "spot-futures"], "description": "Specifies premium type(s), separated by ,", }, "currency": { @@ -840,7 +833,7 @@ "required": False, "type": "str", "default": "desc", - "enum": ['asc', 'desc'], + "enum": ["asc", "desc"], "description": "Specifies sort order", }, "key": { @@ -884,8 +877,7 @@ "summary": "Exchanges", "requires_auth": False, "group": "premium", - "params": { - }, + "params": {}, }, "telegram_channels": { "path": "/api/v1/telegram/channels", @@ -917,14 +909,14 @@ "required": False, "type": "str", "default": "channelName", - "enum": ['channelName', 'handle', 'subscribers', 'createdAt'], + "enum": ["channelName", "handle", "subscribers", "createdAt"], "description": "Specifies key to sort by", }, "sort": { "required": False, "type": "str", "default": "desc", - "enum": ['asc', 'desc'], + "enum": ["asc", "desc"], "description": "Specifies sort", }, }, @@ -959,21 +951,27 @@ "required": False, "type": "str", "default": "publishedAt", - "enum": ['channelName', 'views', 'reactions', 'forwards', 'publishedAt'], + "enum": [ + "channelName", + "views", + "reactions", + "forwards", + "publishedAt", + ], "description": "Specifies key to sort by", }, "sort": { "required": False, "type": "str", "default": "desc", - "enum": ['asc', 'desc'], + "enum": ["asc", "desc"], "description": "Specifies sort", }, "category": { "required": False, "type": "str", "default": "", - "enum": ['english', 'korean'], + "enum": ["english", "korean"], "description": "Specifies category", }, "search_query": { @@ -1005,14 +1003,14 @@ "market": { "required": False, "type": "str", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "Specifies market", }, "currency": { "required": False, "type": "str", "default": "USD", - "enum": ['KRW', 'USD'], + "enum": ["KRW", "USD"], "description": "Specifies currency applied to price values", }, "conversion_base": { @@ -1033,7 +1031,7 @@ "market": { "required": False, "type": "str", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "Specifies market", }, }, @@ -1054,7 +1052,7 @@ "market": { "required": False, "type": "str", - "enum": ['spot', 'futures'], + "enum": ["spot", "futures"], "description": "Specifies market", }, }, @@ -1082,7 +1080,7 @@ "type": { "required": False, "type": "str", - "enum": ['listed', 'delisted'], + "enum": ["listed", "delisted"], "description": "Specifies type of token update", }, }, @@ -1114,8 +1112,7 @@ "summary": "Exchanges", "requires_auth": False, "group": "trading_fees", - "params": { - }, + "params": {}, }, "cex_fees_symbols": { "path": "/api/v1/cex/fees/symbols", @@ -1174,8 +1171,7 @@ "summary": "Exchanges", "requires_auth": False, "group": "wallet_status", - "params": { - }, + "params": {}, }, }