polymarket-client 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. polymarket/__init__.py +416 -0
  2. polymarket/_frames_bridge.py +14 -0
  3. polymarket/_internal/__init__.py +0 -0
  4. polymarket/_internal/actions/__init__.py +0 -0
  5. polymarket/_internal/actions/_cursor.py +41 -0
  6. polymarket/_internal/actions/account.py +239 -0
  7. polymarket/_internal/actions/auth.py +199 -0
  8. polymarket/_internal/actions/builders.py +68 -0
  9. polymarket/_internal/actions/clob.py +272 -0
  10. polymarket/_internal/actions/data.py +573 -0
  11. polymarket/_internal/actions/gamma.py +742 -0
  12. polymarket/_internal/actions/orders/__init__.py +0 -0
  13. polymarket/_internal/actions/orders/_numeric.py +27 -0
  14. polymarket/_internal/actions/orders/allowance.py +90 -0
  15. polymarket/_internal/actions/orders/cancel.py +60 -0
  16. polymarket/_internal/actions/orders/context.py +69 -0
  17. polymarket/_internal/actions/orders/estimate.py +168 -0
  18. polymarket/_internal/actions/orders/limit.py +158 -0
  19. polymarket/_internal/actions/orders/market.py +312 -0
  20. polymarket/_internal/actions/orders/market_data.py +218 -0
  21. polymarket/_internal/actions/orders/math.py +48 -0
  22. polymarket/_internal/actions/orders/orders.py +73 -0
  23. polymarket/_internal/actions/orders/place.py +190 -0
  24. polymarket/_internal/actions/orders/post.py +90 -0
  25. polymarket/_internal/actions/orders/typed_data.py +203 -0
  26. polymarket/_internal/actions/orders/types.py +54 -0
  27. polymarket/_internal/actions/perps/__init__.py +0 -0
  28. polymarket/_internal/actions/perps/account.py +375 -0
  29. polymarket/_internal/actions/perps/credentials.py +174 -0
  30. polymarket/_internal/actions/perps/funds.py +115 -0
  31. polymarket/_internal/actions/perps/paging.py +206 -0
  32. polymarket/_internal/actions/perps/public.py +300 -0
  33. polymarket/_internal/actions/perps/signing.py +195 -0
  34. polymarket/_internal/actions/perps/trading.py +174 -0
  35. polymarket/_internal/actions/relayer/__init__.py +0 -0
  36. polymarket/_internal/actions/relayer/approvals.py +219 -0
  37. polymarket/_internal/actions/relayer/auth.py +93 -0
  38. polymarket/_internal/actions/relayer/calls.py +351 -0
  39. polymarket/_internal/actions/relayer/deployed.py +36 -0
  40. polymarket/_internal/actions/relayer/gasless.py +587 -0
  41. polymarket/_internal/actions/relayer/nonce.py +64 -0
  42. polymarket/_internal/actions/relayer/poll.py +99 -0
  43. polymarket/_internal/actions/relayer/positions.py +357 -0
  44. polymarket/_internal/actions/relayer/signing/__init__.py +0 -0
  45. polymarket/_internal/actions/relayer/signing/deposit_wallet.py +96 -0
  46. polymarket/_internal/actions/relayer/signing/proxy.py +59 -0
  47. polymarket/_internal/actions/relayer/signing/safe.py +110 -0
  48. polymarket/_internal/actions/relayer/submit.py +54 -0
  49. polymarket/_internal/actions/rewards.py +309 -0
  50. polymarket/_internal/actions/rfq.py +87 -0
  51. polymarket/_internal/context.py +64 -0
  52. polymarket/_internal/data_params.py +25 -0
  53. polymarket/_internal/dispatch.py +338 -0
  54. polymarket/_internal/eoa/__init__.py +0 -0
  55. polymarket/_internal/eoa/broadcast.py +165 -0
  56. polymarket/_internal/eoa/rpc.py +345 -0
  57. polymarket/_internal/gamma_paths.py +100 -0
  58. polymarket/_internal/hmac.py +34 -0
  59. polymarket/_internal/l1_auth.py +84 -0
  60. polymarket/_internal/pagination.py +330 -0
  61. polymarket/_internal/perps_session.py +1045 -0
  62. polymarket/_internal/request.py +87 -0
  63. polymarket/_internal/rfq.py +802 -0
  64. polymarket/_internal/streams/__init__.py +0 -0
  65. polymarket/_internal/streams/clob/__init__.py +0 -0
  66. polymarket/_internal/streams/clob/heartbeat.py +62 -0
  67. polymarket/_internal/streams/clob/market.py +209 -0
  68. polymarket/_internal/streams/clob/market_protocol.py +124 -0
  69. polymarket/_internal/streams/clob/user.py +213 -0
  70. polymarket/_internal/streams/clob/user_protocol.py +98 -0
  71. polymarket/_internal/streams/handle.py +134 -0
  72. polymarket/_internal/streams/merged_handle.py +140 -0
  73. polymarket/_internal/streams/perps/__init__.py +0 -0
  74. polymarket/_internal/streams/perps/heartbeat.py +65 -0
  75. polymarket/_internal/streams/perps/market.py +209 -0
  76. polymarket/_internal/streams/perps/market_protocol.py +125 -0
  77. polymarket/_internal/streams/reconnect.py +93 -0
  78. polymarket/_internal/streams/registry.py +73 -0
  79. polymarket/_internal/streams/rtds/__init__.py +0 -0
  80. polymarket/_internal/streams/rtds/heartbeat.py +60 -0
  81. polymarket/_internal/streams/rtds/manager.py +183 -0
  82. polymarket/_internal/streams/rtds/protocol.py +145 -0
  83. polymarket/_internal/streams/sports/__init__.py +0 -0
  84. polymarket/_internal/streams/sports/heartbeat.py +69 -0
  85. polymarket/_internal/streams/sports/manager.py +173 -0
  86. polymarket/_internal/validation.py +29 -0
  87. polymarket/_internal/wallet.py +229 -0
  88. polymarket/_internal/ws/__init__.py +11 -0
  89. polymarket/_internal/ws/backoff.py +25 -0
  90. polymarket/_internal/ws/connection.py +277 -0
  91. polymarket/_internal/ws/heartbeat.py +26 -0
  92. polymarket/_jupyter.py +72 -0
  93. polymarket/auth.py +58 -0
  94. polymarket/calls.py +33 -0
  95. polymarket/clients/__init__.py +8 -0
  96. polymarket/clients/_transport.py +372 -0
  97. polymarket/clients/async_public.py +1498 -0
  98. polymarket/clients/async_secure.py +3259 -0
  99. polymarket/clients/public.py +1182 -0
  100. polymarket/clients/secure.py +2684 -0
  101. polymarket/environments.py +89 -0
  102. polymarket/errors.py +67 -0
  103. polymarket/frames/__init__.py +14 -0
  104. polymarket/frames/_arrow.py +357 -0
  105. polymarket/frames/_builtin_overrides.py +46 -0
  106. polymarket/frames/_errors.py +10 -0
  107. polymarket/frames/_overrides.py +48 -0
  108. polymarket/frames/_pandas.py +95 -0
  109. polymarket/frames/_polars.py +94 -0
  110. polymarket/models/__init__.py +379 -0
  111. polymarket/models/base.py +40 -0
  112. polymarket/models/clob/__init__.py +85 -0
  113. polymarket/models/clob/_validators.py +239 -0
  114. polymarket/models/clob/account.py +200 -0
  115. polymarket/models/clob/api_key.py +38 -0
  116. polymarket/models/clob/builder.py +74 -0
  117. polymarket/models/clob/cancel.py +16 -0
  118. polymarket/models/clob/last_trade.py +21 -0
  119. polymarket/models/clob/market_events.py +230 -0
  120. polymarket/models/clob/order_book.py +95 -0
  121. polymarket/models/clob/order_response.py +151 -0
  122. polymarket/models/clob/orders.py +31 -0
  123. polymarket/models/clob/price_history.py +28 -0
  124. polymarket/models/clob/relayer.py +105 -0
  125. polymarket/models/clob/requests.py +13 -0
  126. polymarket/models/clob/rewards.py +235 -0
  127. polymarket/models/clob/user_events.py +172 -0
  128. polymarket/models/data/__init__.py +104 -0
  129. polymarket/models/data/activity.py +474 -0
  130. polymarket/models/data/analytics.py +91 -0
  131. polymarket/models/data/leaderboard.py +88 -0
  132. polymarket/models/data/market_positions.py +57 -0
  133. polymarket/models/data/portfolio.py +281 -0
  134. polymarket/models/gamma/__init__.py +115 -0
  135. polymarket/models/gamma/comment.py +127 -0
  136. polymarket/models/gamma/common.py +425 -0
  137. polymarket/models/gamma/event.py +528 -0
  138. polymarket/models/gamma/market.py +582 -0
  139. polymarket/models/gamma/profile.py +54 -0
  140. polymarket/models/gamma/search.py +168 -0
  141. polymarket/models/gamma/series.py +19 -0
  142. polymarket/models/gamma/tag.py +22 -0
  143. polymarket/models/perps/__init__.py +181 -0
  144. polymarket/models/perps/_validators.py +64 -0
  145. polymarket/models/perps/account.py +163 -0
  146. polymarket/models/perps/credentials.py +46 -0
  147. polymarket/models/perps/events.py +367 -0
  148. polymarket/models/perps/funds.py +80 -0
  149. polymarket/models/perps/market.py +225 -0
  150. polymarket/models/perps/orders.py +174 -0
  151. polymarket/models/perps/requests.py +176 -0
  152. polymarket/models/perps/results.py +41 -0
  153. polymarket/models/perps/types.py +72 -0
  154. polymarket/models/rfq.py +150 -0
  155. polymarket/models/rtds_events.py +237 -0
  156. polymarket/models/sports_events.py +63 -0
  157. polymarket/models/types.py +135 -0
  158. polymarket/pagination.py +315 -0
  159. polymarket/perps.py +21 -0
  160. polymarket/py.typed +0 -0
  161. polymarket/rfq.py +300 -0
  162. polymarket/streams/__init__.py +194 -0
  163. polymarket/streams/_specs.py +369 -0
  164. polymarket/transactions.py +181 -0
  165. polymarket/types.py +9 -0
  166. polymarket/version.py +8 -0
  167. polymarket_client-0.1.0.dist-info/METADATA +242 -0
  168. polymarket_client-0.1.0.dist-info/RECORD +170 -0
  169. polymarket_client-0.1.0.dist-info/WHEEL +4 -0
  170. polymarket_client-0.1.0.dist-info/licenses/LICENSE +21 -0
polymarket/__init__.py ADDED
@@ -0,0 +1,416 @@
1
+ from polymarket.auth import BuilderApiKey, RelayerApiKey
2
+ from polymarket.calls import TransactionCall
3
+ from polymarket.clients import AsyncPublicClient, AsyncSecureClient, PublicClient, SecureClient
4
+ from polymarket.environments import PRODUCTION, Environment
5
+ from polymarket.errors import (
6
+ CancelledSigningError,
7
+ ConnectionLostError,
8
+ InsufficientAllowanceError,
9
+ InsufficientLiquidityError,
10
+ PolymarketError,
11
+ RateLimitError,
12
+ RequestRejectedError,
13
+ SigningError,
14
+ TimeoutError,
15
+ TransactionFailedError,
16
+ TransportError,
17
+ UnexpectedResponseError,
18
+ UserInputError,
19
+ )
20
+ from polymarket.models import (
21
+ AcceptedOrder,
22
+ Activity,
23
+ ActivityType,
24
+ ApiKeyCreds,
25
+ AssetType,
26
+ BalanceAllowance,
27
+ BuilderApiKeyInfo,
28
+ BuilderFeeRates,
29
+ BuilderTrade,
30
+ BuilderVolumeEntry,
31
+ BuilderVolumeTimePeriod,
32
+ CancelOrdersResponse,
33
+ ClobTrade,
34
+ ClosedPosition,
35
+ ComboActivity,
36
+ ComboActivityId,
37
+ ComboActivityType,
38
+ ComboCompressActivity,
39
+ ComboConditionId,
40
+ ComboConvertActivity,
41
+ ComboMarket,
42
+ ComboMarketOutcome,
43
+ ComboMarketOutcomes,
44
+ ComboMergeActivity,
45
+ ComboPosition,
46
+ ComboPositionLeg,
47
+ ComboPositionMarket,
48
+ ComboPositionMarketEvent,
49
+ ComboPositionOutcome,
50
+ ComboPositionStatus,
51
+ ComboRedeemActivity,
52
+ ComboSplitActivity,
53
+ ComboTradeActivity,
54
+ ComboUnwrapActivity,
55
+ ComboWrapActivity,
56
+ Comment,
57
+ CommentId,
58
+ ConditionId,
59
+ ConversionActivity,
60
+ CtfConditionId,
61
+ CurrentReward,
62
+ CurrentRewardConfig,
63
+ EarningBreakdown,
64
+ Event,
65
+ EventId,
66
+ GaslessTransaction,
67
+ Holder,
68
+ LastTradePrice,
69
+ LastTradePriceForToken,
70
+ LeaderboardCategory,
71
+ LeaderboardEntry,
72
+ LeaderboardOrderBy,
73
+ LeaderboardTimePeriod,
74
+ LiveVolume,
75
+ MakerOrder,
76
+ MakerRebateActivity,
77
+ Market,
78
+ MarketId,
79
+ MarketOrderType,
80
+ MarketPosition,
81
+ MarketReward,
82
+ MarketRewardConfig,
83
+ MarketRewardToken,
84
+ MarketVolume,
85
+ MergeActivity,
86
+ MetaHolder,
87
+ MetaMarketPosition,
88
+ Notification,
89
+ OpenInterest,
90
+ OpenOrder,
91
+ OrderBook,
92
+ OrderBookLevel,
93
+ OrderId,
94
+ OrderPostStatus,
95
+ OrderResponse,
96
+ OrderResponseErrorCode,
97
+ OrderSide,
98
+ OrderType,
99
+ PerpsBalance,
100
+ PerpsBook,
101
+ PerpsCandle,
102
+ PerpsCredentials,
103
+ PerpsDeposit,
104
+ PerpsFeeScheduleEntry,
105
+ PerpsFill,
106
+ PerpsFundingPayment,
107
+ PerpsFundingRate,
108
+ PerpsInstrument,
109
+ PerpsOrder,
110
+ PerpsOrderPlacement,
111
+ PerpsOrderRequest,
112
+ PerpsPlacedTpSlOrder,
113
+ PerpsPlacedTpSlOrders,
114
+ PerpsPortfolio,
115
+ PerpsPosition,
116
+ PerpsPositionTpSlTrigger,
117
+ PerpsTicker,
118
+ PerpsTpSlTrigger,
119
+ PerpsTrade,
120
+ PerpsWithdrawal,
121
+ PortfolioValue,
122
+ Position,
123
+ PositionId,
124
+ PriceHistoryInterval,
125
+ PriceHistoryPoint,
126
+ PriceRequest,
127
+ Profile,
128
+ PublicProfile,
129
+ QuestionId,
130
+ RedeemActivity,
131
+ ReferralRewardActivity,
132
+ RejectedOrder,
133
+ RelatedTag,
134
+ RelayerTransactionState,
135
+ ResolutionRequestId,
136
+ RewardActivity,
137
+ RewardsPercentages,
138
+ SearchResults,
139
+ SearchTag,
140
+ Series,
141
+ SeriesId,
142
+ SignedOrder,
143
+ SplitActivity,
144
+ SportsMarketTypes,
145
+ SportsMetadata,
146
+ Tag,
147
+ TagId,
148
+ TagReference,
149
+ Team,
150
+ TickSize,
151
+ TokenId,
152
+ TotalUserEarning,
153
+ Trade,
154
+ TradeActivity,
155
+ TradedMarketCount,
156
+ TraderLeaderboardEntry,
157
+ TransactionOutcome,
158
+ UnknownActivity,
159
+ UserEarning,
160
+ UserRewardsConfig,
161
+ UserRewardsEarning,
162
+ YieldActivity,
163
+ to_combo_condition_id,
164
+ to_ctf_condition_id,
165
+ )
166
+ from polymarket.pagination import AsyncPaginator, Page, Paginator
167
+ from polymarket.rfq import (
168
+ RfqCancelQuoteAck,
169
+ RfqCancelQuoteRejectedError,
170
+ RfqConfirmationAck,
171
+ RfqConfirmationDecision,
172
+ RfqConfirmationRejectedError,
173
+ RfqConfirmationRequestEvent,
174
+ RfqDirection,
175
+ RfqErrorCode,
176
+ RfqEvent,
177
+ RfqExecutionStatus,
178
+ RfqExecutionUpdateEvent,
179
+ RfqId,
180
+ RfqQuoteId,
181
+ RfqQuoteReference,
182
+ RfqQuoteRejectedError,
183
+ RfqQuoteRequestEvent,
184
+ RfqQuoteSource,
185
+ RfqRequestedSize,
186
+ RfqRequestedSizeUnit,
187
+ RfqRequestorPublicId,
188
+ RfqSession,
189
+ RfqSide,
190
+ RfqTradeEvent,
191
+ )
192
+ from polymarket.transactions import (
193
+ EoaTransactionHandle,
194
+ GaslessTransactionHandle,
195
+ MergeComboPositionRequest,
196
+ MergeMarketConditionRequest,
197
+ MergeMarketIdRequest,
198
+ MergeMarketPositionRequest,
199
+ MergePositionRequest,
200
+ SyncEoaTransactionHandle,
201
+ SyncGaslessTransactionHandle,
202
+ SyncTransactionHandle,
203
+ TransactionHandle,
204
+ )
205
+ from polymarket.types import EvmAddress, HexString, TransactionHash
206
+ from polymarket.version import __version__
207
+
208
+ __all__ = [
209
+ "PRODUCTION",
210
+ "AcceptedOrder",
211
+ "Activity",
212
+ "ActivityType",
213
+ "ApiKeyCreds",
214
+ "AssetType",
215
+ "AsyncPaginator",
216
+ "AsyncPublicClient",
217
+ "AsyncSecureClient",
218
+ "BalanceAllowance",
219
+ "BuilderApiKey",
220
+ "BuilderApiKeyInfo",
221
+ "BuilderFeeRates",
222
+ "BuilderTrade",
223
+ "BuilderVolumeEntry",
224
+ "BuilderVolumeTimePeriod",
225
+ "CancelOrdersResponse",
226
+ "CancelledSigningError",
227
+ "ConnectionLostError",
228
+ "ClobTrade",
229
+ "ClosedPosition",
230
+ "ComboActivity",
231
+ "ComboActivityId",
232
+ "ComboActivityType",
233
+ "ComboCompressActivity",
234
+ "ComboConvertActivity",
235
+ "ComboPosition",
236
+ "Comment",
237
+ "ComboPositionLeg",
238
+ "ComboPositionMarket",
239
+ "ComboPositionMarketEvent",
240
+ "ComboPositionOutcome",
241
+ "ComboPositionStatus",
242
+ "ComboRedeemActivity",
243
+ "ComboSplitActivity",
244
+ "ComboTradeActivity",
245
+ "ComboUnwrapActivity",
246
+ "ComboWrapActivity",
247
+ "CommentId",
248
+ "ComboConditionId",
249
+ "ComboMarket",
250
+ "ComboMarketOutcome",
251
+ "ComboMarketOutcomes",
252
+ "ConditionId",
253
+ "CtfConditionId",
254
+ "ConversionActivity",
255
+ "CurrentReward",
256
+ "CurrentRewardConfig",
257
+ "EarningBreakdown",
258
+ "EoaTransactionHandle",
259
+ "Environment",
260
+ "Event",
261
+ "EventId",
262
+ "EvmAddress",
263
+ "GaslessTransaction",
264
+ "GaslessTransactionHandle",
265
+ "HexString",
266
+ "Holder",
267
+ "InsufficientAllowanceError",
268
+ "InsufficientLiquidityError",
269
+ "LastTradePrice",
270
+ "LastTradePriceForToken",
271
+ "LeaderboardCategory",
272
+ "LeaderboardEntry",
273
+ "LeaderboardOrderBy",
274
+ "LeaderboardTimePeriod",
275
+ "LiveVolume",
276
+ "MakerOrder",
277
+ "MakerRebateActivity",
278
+ "Market",
279
+ "MarketId",
280
+ "MarketOrderType",
281
+ "MarketPosition",
282
+ "MarketReward",
283
+ "MarketRewardConfig",
284
+ "MarketRewardToken",
285
+ "MarketVolume",
286
+ "MergeActivity",
287
+ "ComboMergeActivity",
288
+ "MergeComboPositionRequest",
289
+ "MergeMarketConditionRequest",
290
+ "MergeMarketIdRequest",
291
+ "MergeMarketPositionRequest",
292
+ "MergePositionRequest",
293
+ "MetaHolder",
294
+ "MetaMarketPosition",
295
+ "Notification",
296
+ "OpenInterest",
297
+ "OpenOrder",
298
+ "OrderBook",
299
+ "OrderBookLevel",
300
+ "OrderId",
301
+ "OrderPostStatus",
302
+ "OrderResponse",
303
+ "OrderResponseErrorCode",
304
+ "OrderSide",
305
+ "OrderType",
306
+ "Page",
307
+ "Paginator",
308
+ "PerpsBalance",
309
+ "PerpsBook",
310
+ "PerpsCandle",
311
+ "PerpsCredentials",
312
+ "PerpsDeposit",
313
+ "PerpsFeeScheduleEntry",
314
+ "PerpsFill",
315
+ "PerpsFundingPayment",
316
+ "PerpsFundingRate",
317
+ "PerpsInstrument",
318
+ "PerpsOrder",
319
+ "PerpsOrderPlacement",
320
+ "PerpsOrderRequest",
321
+ "PerpsPlacedTpSlOrder",
322
+ "PerpsPlacedTpSlOrders",
323
+ "PerpsPortfolio",
324
+ "PerpsPosition",
325
+ "PerpsPositionTpSlTrigger",
326
+ "PerpsTicker",
327
+ "PerpsTpSlTrigger",
328
+ "PerpsTrade",
329
+ "PerpsWithdrawal",
330
+ "PolymarketError",
331
+ "PortfolioValue",
332
+ "Position",
333
+ "PositionId",
334
+ "PriceHistoryInterval",
335
+ "PriceHistoryPoint",
336
+ "PriceRequest",
337
+ "Profile",
338
+ "PublicClient",
339
+ "PublicProfile",
340
+ "QuestionId",
341
+ "RateLimitError",
342
+ "RedeemActivity",
343
+ "ReferralRewardActivity",
344
+ "RejectedOrder",
345
+ "RelatedTag",
346
+ "RelayerApiKey",
347
+ "RelayerTransactionState",
348
+ "RequestRejectedError",
349
+ "ResolutionRequestId",
350
+ "RewardActivity",
351
+ "RewardsPercentages",
352
+ "RfqCancelQuoteAck",
353
+ "RfqCancelQuoteRejectedError",
354
+ "RfqConfirmationAck",
355
+ "RfqConfirmationDecision",
356
+ "RfqConfirmationRejectedError",
357
+ "RfqConfirmationRequestEvent",
358
+ "RfqDirection",
359
+ "RfqErrorCode",
360
+ "RfqEvent",
361
+ "RfqExecutionStatus",
362
+ "RfqExecutionUpdateEvent",
363
+ "RfqId",
364
+ "RfqQuoteId",
365
+ "RfqQuoteReference",
366
+ "RfqQuoteRejectedError",
367
+ "RfqQuoteRequestEvent",
368
+ "RfqQuoteSource",
369
+ "RfqRequestedSize",
370
+ "RfqRequestedSizeUnit",
371
+ "RfqRequestorPublicId",
372
+ "RfqSession",
373
+ "RfqSide",
374
+ "RfqTradeEvent",
375
+ "SearchResults",
376
+ "SearchTag",
377
+ "SecureClient",
378
+ "Series",
379
+ "SeriesId",
380
+ "SignedOrder",
381
+ "SigningError",
382
+ "SplitActivity",
383
+ "SportsMarketTypes",
384
+ "SportsMetadata",
385
+ "SyncEoaTransactionHandle",
386
+ "SyncGaslessTransactionHandle",
387
+ "SyncTransactionHandle",
388
+ "Tag",
389
+ "TagId",
390
+ "TagReference",
391
+ "Team",
392
+ "TickSize",
393
+ "TimeoutError",
394
+ "TokenId",
395
+ "TotalUserEarning",
396
+ "to_combo_condition_id",
397
+ "to_ctf_condition_id",
398
+ "Trade",
399
+ "TradeActivity",
400
+ "TradedMarketCount",
401
+ "TraderLeaderboardEntry",
402
+ "TransactionCall",
403
+ "TransactionFailedError",
404
+ "TransactionHandle",
405
+ "TransactionHash",
406
+ "TransactionOutcome",
407
+ "TransportError",
408
+ "UnexpectedResponseError",
409
+ "UnknownActivity",
410
+ "UserEarning",
411
+ "UserInputError",
412
+ "UserRewardsConfig",
413
+ "UserRewardsEarning",
414
+ "YieldActivity",
415
+ "__version__",
416
+ ]
@@ -0,0 +1,14 @@
1
+ """Lazy, type-erased lookup of :mod:`polymarket.frames` functions for non-frames modules."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any, Literal
6
+
7
+
8
+ def frames_func(name: Literal["to_arrow", "to_pandas", "to_polars"]) -> Any:
9
+ from polymarket import frames
10
+
11
+ return getattr(frames, name)
12
+
13
+
14
+ __all__ = ["frames_func"]
File without changes
File without changes
@@ -0,0 +1,41 @@
1
+ from polymarket.errors import UnexpectedResponseError, UserInputError
2
+
3
+ END_CURSOR = "LTE="
4
+
5
+
6
+ def validate_cursor(value: str | None) -> str | None:
7
+ if value is None:
8
+ return None
9
+ if not value:
10
+ raise UserInputError("cursor must be a non-empty string when provided.")
11
+ return value
12
+
13
+
14
+ def next_cursor_or_none(raw: object) -> str | None:
15
+ if raw is None:
16
+ return None
17
+ if not isinstance(raw, str):
18
+ raise UnexpectedResponseError(
19
+ f"expected next_cursor to be a string, got {type(raw).__name__}"
20
+ )
21
+ if raw == END_CURSOR:
22
+ return None
23
+ if not raw:
24
+ raise UnexpectedResponseError(
25
+ "expected next_cursor to be non-empty or the END_CURSOR sentinel"
26
+ )
27
+ return raw
28
+
29
+
30
+ def optional_int(payload: dict[str, object], key: str) -> int | None:
31
+ if key not in payload:
32
+ return None
33
+ value = payload[key]
34
+ if value is None:
35
+ return None
36
+ if isinstance(value, bool) or not isinstance(value, int):
37
+ raise UnexpectedResponseError(f"expected '{key}' to be an int, got {type(value).__name__}")
38
+ return value
39
+
40
+
41
+ __all__ = ["END_CURSOR", "next_cursor_or_none", "optional_int", "validate_cursor"]
@@ -0,0 +1,239 @@
1
+ from collections.abc import Sequence
2
+ from typing import cast
3
+
4
+ from pydantic import TypeAdapter, ValidationError
5
+
6
+ from polymarket._internal.actions._cursor import (
7
+ END_CURSOR,
8
+ next_cursor_or_none,
9
+ optional_int,
10
+ validate_cursor,
11
+ )
12
+ from polymarket._internal.request import QueryParamValue
13
+ from polymarket._internal.validation import require_nonempty
14
+ from polymarket.errors import UnexpectedResponseError, UserInputError
15
+ from polymarket.models.clob import (
16
+ AssetType,
17
+ BalanceAllowance,
18
+ ClobTrade,
19
+ Notification,
20
+ OpenOrder,
21
+ )
22
+ from polymarket.pagination import Page
23
+
24
+ _OpenOrdersAdapter = TypeAdapter(tuple[OpenOrder, ...])
25
+ _ClobTradesAdapter = TypeAdapter(tuple[ClobTrade, ...])
26
+ _NotificationsAdapter = TypeAdapter(tuple[Notification, ...])
27
+
28
+ _VALID_ASSET_TYPES: frozenset[str] = frozenset({"COLLATERAL", "CONDITIONAL"})
29
+
30
+
31
+ def _validate_asset_type(asset_type: object) -> None:
32
+ if asset_type not in _VALID_ASSET_TYPES:
33
+ raise UserInputError(
34
+ f"asset_type must be 'COLLATERAL' or 'CONDITIONAL', got {asset_type!r}."
35
+ )
36
+
37
+
38
+ def _add_optional(params: dict[str, QueryParamValue], key: str, value: object) -> None:
39
+ if value is None:
40
+ return
41
+ if not isinstance(value, str | int | float | bool):
42
+ raise UserInputError(f"{key} must be a primitive, got {type(value).__name__}.")
43
+ params[key] = value
44
+
45
+
46
+ def build_closed_only_mode_request() -> tuple[str, dict[str, str]]:
47
+ return "/auth/ban-status/closed-only", {}
48
+
49
+
50
+ def parse_closed_only_mode(data: object) -> bool:
51
+ if not isinstance(data, dict):
52
+ raise UnexpectedResponseError("closed-only mode response did not match expected shape")
53
+ raw = cast(dict[str, object], data).get("closed_only")
54
+ if not isinstance(raw, bool):
55
+ raise UnexpectedResponseError(
56
+ f"closed-only mode response 'closed_only' must be a bool, got {type(raw).__name__}"
57
+ )
58
+ return raw
59
+
60
+
61
+ def build_list_open_orders_request(
62
+ *,
63
+ token_id: str | None = None,
64
+ id: str | None = None,
65
+ market: str | None = None,
66
+ cursor: str | None = None,
67
+ ) -> tuple[str, dict[str, QueryParamValue]]:
68
+ params: dict[str, QueryParamValue] = {}
69
+ if token_id is not None:
70
+ _add_optional(params, "asset_id", require_nonempty("token_id", token_id))
71
+ if id is not None:
72
+ _add_optional(params, "id", require_nonempty("id", id))
73
+ if market is not None:
74
+ _add_optional(params, "market", require_nonempty("market", market))
75
+ validated_cursor = validate_cursor(cursor)
76
+ if validated_cursor is not None:
77
+ _add_optional(params, "next_cursor", validated_cursor)
78
+ return "/data/orders", params
79
+
80
+
81
+ def parse_open_orders_page(data: object) -> Page[OpenOrder]:
82
+ if not isinstance(data, dict):
83
+ raise UnexpectedResponseError("open orders response did not match expected shape")
84
+ payload = cast(dict[str, object], data)
85
+ try:
86
+ items = _OpenOrdersAdapter.validate_python(payload.get("data"))
87
+ except ValidationError as error:
88
+ raise UnexpectedResponseError("open orders response items malformed") from error
89
+ next_cursor = next_cursor_or_none(payload.get("next_cursor"))
90
+ return Page(
91
+ items=items,
92
+ has_more=next_cursor is not None,
93
+ next_cursor=next_cursor,
94
+ total_count=optional_int(payload, "count"),
95
+ )
96
+
97
+
98
+ def build_get_order_request(*, order_id: str) -> tuple[str, dict[str, str]]:
99
+ validated = require_nonempty("order_id", order_id)
100
+ return f"/data/order/{validated}", {}
101
+
102
+
103
+ def parse_open_order(data: object) -> OpenOrder:
104
+ return OpenOrder.parse_response(data)
105
+
106
+
107
+ def build_list_account_trades_request(
108
+ *,
109
+ token_id: str | None = None,
110
+ id: str | None = None,
111
+ market: str | None = None,
112
+ maker_address: str | None = None,
113
+ after: str | None = None,
114
+ before: str | None = None,
115
+ cursor: str | None = None,
116
+ ) -> tuple[str, dict[str, QueryParamValue]]:
117
+ params: dict[str, QueryParamValue] = {}
118
+ if token_id is not None:
119
+ _add_optional(params, "asset_id", require_nonempty("token_id", token_id))
120
+ if id is not None:
121
+ _add_optional(params, "id", require_nonempty("id", id))
122
+ if market is not None:
123
+ _add_optional(params, "market", require_nonempty("market", market))
124
+ if maker_address is not None:
125
+ _add_optional(params, "maker_address", require_nonempty("maker_address", maker_address))
126
+ if after is not None:
127
+ _add_optional(params, "after", require_nonempty("after", after))
128
+ if before is not None:
129
+ _add_optional(params, "before", require_nonempty("before", before))
130
+ validated_cursor = validate_cursor(cursor)
131
+ if validated_cursor is not None:
132
+ _add_optional(params, "next_cursor", validated_cursor)
133
+ return "/data/trades", params
134
+
135
+
136
+ def parse_account_trades_page(data: object) -> Page[ClobTrade]:
137
+ if not isinstance(data, dict):
138
+ raise UnexpectedResponseError("account trades response did not match expected shape")
139
+ payload = cast(dict[str, object], data)
140
+ try:
141
+ items = _ClobTradesAdapter.validate_python(payload.get("data"))
142
+ except ValidationError as error:
143
+ raise UnexpectedResponseError("account trades response items malformed") from error
144
+ next_cursor = next_cursor_or_none(payload.get("next_cursor"))
145
+ return Page(
146
+ items=items,
147
+ has_more=next_cursor is not None,
148
+ next_cursor=next_cursor,
149
+ total_count=optional_int(payload, "count"),
150
+ )
151
+
152
+
153
+ def build_notifications_request(*, signature_type: int) -> tuple[str, dict[str, QueryParamValue]]:
154
+ return "/notifications", {"signature_type": signature_type}
155
+
156
+
157
+ def parse_notifications(data: object) -> tuple[Notification, ...]:
158
+ try:
159
+ return _NotificationsAdapter.validate_python(data)
160
+ except ValidationError as error:
161
+ raise UnexpectedResponseError(
162
+ "notifications response did not match expected shape"
163
+ ) from error
164
+
165
+
166
+ def build_drop_notifications_request(
167
+ *, ids: Sequence[int | str], signature_type: int
168
+ ) -> tuple[str, dict[str, QueryParamValue]]:
169
+ if isinstance(ids, str | bytes):
170
+ raise UserInputError("ids must be a sequence of notification ids, not a single string.")
171
+ if not ids:
172
+ raise UserInputError("ids must be a non-empty sequence.")
173
+ validated: list[str] = []
174
+ for entry in cast(Sequence[object], ids):
175
+ if isinstance(entry, bool) or not isinstance(entry, int | str):
176
+ raise UserInputError(f"ids entry must be an int or string, got {type(entry).__name__}.")
177
+ if isinstance(entry, str):
178
+ validated.append(require_nonempty("notification id", entry))
179
+ else:
180
+ validated.append(str(entry))
181
+ return "/notifications", {
182
+ "ids": ",".join(validated),
183
+ "signature_type": signature_type,
184
+ }
185
+
186
+
187
+ def build_balance_allowance_request(
188
+ *,
189
+ asset_type: AssetType,
190
+ token_id: str | None,
191
+ signature_type: int,
192
+ ) -> tuple[str, dict[str, QueryParamValue]]:
193
+ _validate_asset_type(asset_type)
194
+ params: dict[str, QueryParamValue] = {
195
+ "asset_type": asset_type,
196
+ "signature_type": signature_type,
197
+ }
198
+ if token_id is not None:
199
+ params["token_id"] = require_nonempty("token_id", token_id)
200
+ return "/balance-allowance", params
201
+
202
+
203
+ def parse_balance_allowance(data: object) -> BalanceAllowance:
204
+ return BalanceAllowance.parse_response(data)
205
+
206
+
207
+ def build_update_balance_allowance_request(
208
+ *,
209
+ asset_type: AssetType,
210
+ token_id: str | None,
211
+ signature_type: int,
212
+ ) -> tuple[str, dict[str, QueryParamValue]]:
213
+ _validate_asset_type(asset_type)
214
+ params: dict[str, QueryParamValue] = {
215
+ "asset_type": asset_type,
216
+ "signature_type": signature_type,
217
+ }
218
+ if token_id is not None:
219
+ params["token_id"] = require_nonempty("token_id", token_id)
220
+ return "/balance-allowance/update", params
221
+
222
+
223
+ __all__ = [
224
+ "END_CURSOR",
225
+ "build_balance_allowance_request",
226
+ "build_closed_only_mode_request",
227
+ "build_drop_notifications_request",
228
+ "build_get_order_request",
229
+ "build_list_account_trades_request",
230
+ "build_list_open_orders_request",
231
+ "build_notifications_request",
232
+ "build_update_balance_allowance_request",
233
+ "parse_account_trades_page",
234
+ "parse_balance_allowance",
235
+ "parse_closed_only_mode",
236
+ "parse_notifications",
237
+ "parse_open_order",
238
+ "parse_open_orders_page",
239
+ ]