stonepy 0.1.0__tar.gz

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 (447) hide show
  1. stonepy-0.1.0/.gitignore +11 -0
  2. stonepy-0.1.0/CHANGELOG.md +7 -0
  3. stonepy-0.1.0/LICENSE +21 -0
  4. stonepy-0.1.0/PKG-INFO +186 -0
  5. stonepy-0.1.0/README.md +151 -0
  6. stonepy-0.1.0/pyproject.toml +79 -0
  7. stonepy-0.1.0/src/stonepy/__init__.py +27 -0
  8. stonepy-0.1.0/src/stonepy/_core/__init__.py +1 -0
  9. stonepy-0.1.0/src/stonepy/_core/clock.py +49 -0
  10. stonepy-0.1.0/src/stonepy/_core/codec.py +96 -0
  11. stonepy-0.1.0/src/stonepy/_core/config.py +118 -0
  12. stonepy-0.1.0/src/stonepy/_core/endpoint.py +36 -0
  13. stonepy-0.1.0/src/stonepy/_core/errors.py +169 -0
  14. stonepy-0.1.0/src/stonepy/_core/logging.py +62 -0
  15. stonepy-0.1.0/src/stonepy/_core/models.py +31 -0
  16. stonepy-0.1.0/src/stonepy/_core/pipeline.py +605 -0
  17. stonepy-0.1.0/src/stonepy/_core/plugins.py +144 -0
  18. stonepy-0.1.0/src/stonepy/_core/ratelimit.py +99 -0
  19. stonepy-0.1.0/src/stonepy/_core/resource.py +12 -0
  20. stonepy-0.1.0/src/stonepy/_core/retry.py +30 -0
  21. stonepy-0.1.0/src/stonepy/_core/session.py +155 -0
  22. stonepy-0.1.0/src/stonepy/_core/status.py +80 -0
  23. stonepy-0.1.0/src/stonepy/_core/transport.py +352 -0
  24. stonepy-0.1.0/src/stonepy/_endpoints/__init__.py +36 -0
  25. stonepy-0.1.0/src/stonepy/_endpoints/cfd.py +82 -0
  26. stonepy-0.1.0/src/stonepy/_endpoints/clientapplication.py +45 -0
  27. stonepy-0.1.0/src/stonepy/_endpoints/clientpreference.py +236 -0
  28. stonepy-0.1.0/src/stonepy/_endpoints/margin.py +38 -0
  29. stonepy-0.1.0/src/stonepy/_endpoints/market.py +1295 -0
  30. stonepy-0.1.0/src/stonepy/_endpoints/message.py +284 -0
  31. stonepy-0.1.0/src/stonepy/_endpoints/news.py +319 -0
  32. stonepy-0.1.0/src/stonepy/_endpoints/order.py +367 -0
  33. stonepy-0.1.0/src/stonepy/_endpoints/preference.py +96 -0
  34. stonepy-0.1.0/src/stonepy/_endpoints/price_alert.py +126 -0
  35. stonepy-0.1.0/src/stonepy/_endpoints/session.py +99 -0
  36. stonepy-0.1.0/src/stonepy/_endpoints/spread.py +82 -0
  37. stonepy-0.1.0/src/stonepy/_endpoints/user_account.py +69 -0
  38. stonepy-0.1.0/src/stonepy/_endpoints/watchlist.py +167 -0
  39. stonepy-0.1.0/src/stonepy/_generator/__init__.py +1 -0
  40. stonepy-0.1.0/src/stonepy/_generator/__main__.py +159 -0
  41. stonepy-0.1.0/src/stonepy/_generator/catalog.py +552 -0
  42. stonepy-0.1.0/src/stonepy/_generator/emit_client.py +493 -0
  43. stonepy-0.1.0/src/stonepy/_generator/emit_contract.py +659 -0
  44. stonepy-0.1.0/src/stonepy/_generator/emit_endpoints.py +716 -0
  45. stonepy-0.1.0/src/stonepy/_generator/emit_models.py +203 -0
  46. stonepy-0.1.0/src/stonepy/_generator/render.py +342 -0
  47. stonepy-0.1.0/src/stonepy/_generator/scaffold.py +354 -0
  48. stonepy-0.1.0/src/stonepy/client.py +469 -0
  49. stonepy-0.1.0/src/stonepy/errors.py +23 -0
  50. stonepy-0.1.0/src/stonepy/models/AccountInformationResponseDTOv2.py +18 -0
  51. stonepy-0.1.0/src/stonepy/models/AccountResult.py +40 -0
  52. stonepy-0.1.0/src/stonepy/models/ActiveSignalsResponseDTO.py +18 -0
  53. stonepy-0.1.0/src/stonepy/models/AlertDTO.py +27 -0
  54. stonepy-0.1.0/src/stonepy/models/AllocationProfileDTO.py +24 -0
  55. stonepy-0.1.0/src/stonepy/models/AllocationProfileEntryDTO.py +18 -0
  56. stonepy-0.1.0/src/stonepy/models/Api2FALogonOnResponseDTO.py +15 -0
  57. stonepy-0.1.0/src/stonepy/models/ApiAccountHolderDTO.py +14 -0
  58. stonepy-0.1.0/src/stonepy/models/ApiAccountInformationSaveRequestDTO.py +14 -0
  59. stonepy-0.1.0/src/stonepy/models/ApiAccountInformationSaveResponseDTO.py +11 -0
  60. stonepy-0.1.0/src/stonepy/models/ApiAccountOperatorDTOv2.py +19 -0
  61. stonepy-0.1.0/src/stonepy/models/ApiActiveOrderDTO.py +21 -0
  62. stonepy-0.1.0/src/stonepy/models/ApiActiveStopLimitOrderDTOv2.py +42 -0
  63. stonepy-0.1.0/src/stonepy/models/ApiAdvisoryTradeOrderResponseDTO.py +20 -0
  64. stonepy-0.1.0/src/stonepy/models/ApiAssociatedDTOv2.py +19 -0
  65. stonepy-0.1.0/src/stonepy/models/ApiAssociatedResponseDTO.py +19 -0
  66. stonepy-0.1.0/src/stonepy/models/ApiBandedSpreadsDTO.py +17 -0
  67. stonepy-0.1.0/src/stonepy/models/ApiBasicStopLimitOrderDTO.py +19 -0
  68. stonepy-0.1.0/src/stonepy/models/ApiChangePasswordRequestDTO.py +15 -0
  69. stonepy-0.1.0/src/stonepy/models/ApiChangePasswordResponseDTO.py +13 -0
  70. stonepy-0.1.0/src/stonepy/models/ApiCiConnectMultipleUsersDetailsDTO.py +23 -0
  71. stonepy-0.1.0/src/stonepy/models/ApiClientAccountDTO.py +30 -0
  72. stonepy-0.1.0/src/stonepy/models/ApiClientAccountMarginResponseDTO.py +25 -0
  73. stonepy-0.1.0/src/stonepy/models/ApiClientAccountTokenDTOv2.py +14 -0
  74. stonepy-0.1.0/src/stonepy/models/ApiClientAccountWatchlistDTO.py +21 -0
  75. stonepy-0.1.0/src/stonepy/models/ApiClientAccountWatchlistItemDTO.py +23 -0
  76. stonepy-0.1.0/src/stonepy/models/ApiClientApplicationMessageTranslationDTO.py +14 -0
  77. stonepy-0.1.0/src/stonepy/models/ApiClientApplicationMessageTranslationRequestDTO.py +16 -0
  78. stonepy-0.1.0/src/stonepy/models/ApiClientApplicationMessageTranslationResponseDTO.py +20 -0
  79. stonepy-0.1.0/src/stonepy/models/ApiClientCommunicationResponseDTO.py +20 -0
  80. stonepy-0.1.0/src/stonepy/models/ApiClientCommunicationUpdateRequestDTO.py +15 -0
  81. stonepy-0.1.0/src/stonepy/models/ApiClientCommunicationUpdateResponseDTO.py +13 -0
  82. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverriddenMarginFactorDTO.py +18 -0
  83. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverriddenPriceToleranceDTO.py +15 -0
  84. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverriddenSettingSaveDTO.py +16 -0
  85. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverriddenSettingsDTO.py +28 -0
  86. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverriddenSettingsGetResponseDTO.py +21 -0
  87. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverriddenSettingsSaveDTO.py +25 -0
  88. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverriddenSettingsSaveRequestDTO.py +23 -0
  89. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverriddenSettingsSaveResponseDTO.py +23 -0
  90. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverridenMarginFactorDTO.py +18 -0
  91. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverridenPriceToleranceDTO.py +15 -0
  92. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverridenSettingSaveDTO.py +16 -0
  93. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverridenSettingsDTO.py +28 -0
  94. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverridenSettingsGetResponseDTO.py +21 -0
  95. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverridenSettingsSaveDTO.py +25 -0
  96. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverridenSettingsSaveRequestDTO.py +20 -0
  97. stonepy-0.1.0/src/stonepy/models/ApiClientPreferencesOverridenSettingsSaveResponseDTO.py +23 -0
  98. stonepy-0.1.0/src/stonepy/models/ApiCommunityActionDTO.py +29 -0
  99. stonepy-0.1.0/src/stonepy/models/ApiCommunityActionUserDetailsDTO.py +16 -0
  100. stonepy-0.1.0/src/stonepy/models/ApiConnectUserDetailsDTO.py +28 -0
  101. stonepy-0.1.0/src/stonepy/models/ApiContractDTOv2.py +15 -0
  102. stonepy-0.1.0/src/stonepy/models/ApiCultureLookupDTO.py +13 -0
  103. stonepy-0.1.0/src/stonepy/models/ApiDateTimeOffsetDTO.py +14 -0
  104. stonepy-0.1.0/src/stonepy/models/ApiDeleteWatchlistRequestDTO.py +13 -0
  105. stonepy-0.1.0/src/stonepy/models/ApiDeleteWatchlistResponseDTO.py +13 -0
  106. stonepy-0.1.0/src/stonepy/models/ApiErrorResponseDTO.py +15 -0
  107. stonepy-0.1.0/src/stonepy/models/ApiFollowedDTO.py +14 -0
  108. stonepy-0.1.0/src/stonepy/models/ApiFollowerDTO.py +14 -0
  109. stonepy-0.1.0/src/stonepy/models/ApiFreeCashToTradeResponseDTO.py +16 -0
  110. stonepy-0.1.0/src/stonepy/models/ApiFxFinancingDTO.py +22 -0
  111. stonepy-0.1.0/src/stonepy/models/ApiGetClientPreferenceResponseDTO.py +18 -0
  112. stonepy-0.1.0/src/stonepy/models/ApiGetClientPreferencesResponseDTO.py +20 -0
  113. stonepy-0.1.0/src/stonepy/models/ApiGetKeyListClientPreferenceResponseDTO.py +13 -0
  114. stonepy-0.1.0/src/stonepy/models/ApiGetMarketInformationExtendedResponseDTOv2.py +20 -0
  115. stonepy-0.1.0/src/stonepy/models/ApiGetPreferencesResponseDTO.py +18 -0
  116. stonepy-0.1.0/src/stonepy/models/ApiIfDoneDTOv2.py +19 -0
  117. stonepy-0.1.0/src/stonepy/models/ApiIfDoneResponseDTO.py +19 -0
  118. stonepy-0.1.0/src/stonepy/models/ApiKnockoutDTO.py +20 -0
  119. stonepy-0.1.0/src/stonepy/models/ApiLogOffRequestDTO.py +14 -0
  120. stonepy-0.1.0/src/stonepy/models/ApiLogOffResponseDTO.py +13 -0
  121. stonepy-0.1.0/src/stonepy/models/ApiLogOnRequestDTO.py +17 -0
  122. stonepy-0.1.0/src/stonepy/models/ApiLogOnResponseDTOv2.py +26 -0
  123. stonepy-0.1.0/src/stonepy/models/ApiLookupDTO.py +19 -0
  124. stonepy-0.1.0/src/stonepy/models/ApiLookupResponseDTO.py +24 -0
  125. stonepy-0.1.0/src/stonepy/models/ApiManagedClientAccountMarginResponseDTO.py +13 -0
  126. stonepy-0.1.0/src/stonepy/models/ApiManagedClientAccountsMarginResponseDTO.py +20 -0
  127. stonepy-0.1.0/src/stonepy/models/ApiManagedInstructionResponseDTO.py +21 -0
  128. stonepy-0.1.0/src/stonepy/models/ApiManagedTradeDTO.py +22 -0
  129. stonepy-0.1.0/src/stonepy/models/ApiManagedTradeHistoryDTO.py +27 -0
  130. stonepy-0.1.0/src/stonepy/models/ApiMarketDTO.py +15 -0
  131. stonepy-0.1.0/src/stonepy/models/ApiMarketEodDTO.py +14 -0
  132. stonepy-0.1.0/src/stonepy/models/ApiMarketInformationDTOv2.py +141 -0
  133. stonepy-0.1.0/src/stonepy/models/ApiMarketInformationExtendedDTOv2.py +33 -0
  134. stonepy-0.1.0/src/stonepy/models/ApiMarketInformationSaveDTO.py +19 -0
  135. stonepy-0.1.0/src/stonepy/models/ApiMarketSpreadDTO.py +17 -0
  136. stonepy-0.1.0/src/stonepy/models/ApiMarketTagDTO.py +16 -0
  137. stonepy-0.1.0/src/stonepy/models/ApiOpenPositionDTOv2.py +44 -0
  138. stonepy-0.1.0/src/stonepy/models/ApiOrderActionResponseDTO.py +20 -0
  139. stonepy-0.1.0/src/stonepy/models/ApiOrderDTOv2.py +47 -0
  140. stonepy-0.1.0/src/stonepy/models/ApiOrderResponseDTO.py +34 -0
  141. stonepy-0.1.0/src/stonepy/models/ApiPrimaryMarketTagDTO.py +18 -0
  142. stonepy-0.1.0/src/stonepy/models/ApiProductInformationDTO.py +50 -0
  143. stonepy-0.1.0/src/stonepy/models/ApiQuoteResponseDTO.py +15 -0
  144. stonepy-0.1.0/src/stonepy/models/ApiRestrictionDTOv2.py +15 -0
  145. stonepy-0.1.0/src/stonepy/models/ApiSaveAccountInformationRequestDTO.py +16 -0
  146. stonepy-0.1.0/src/stonepy/models/ApiSaveAccountInformationResponseDTO.py +11 -0
  147. stonepy-0.1.0/src/stonepy/models/ApiSaveClientPreferenceRequestDTO.py +21 -0
  148. stonepy-0.1.0/src/stonepy/models/ApiSaveMarketInformationResponseDTO.py +11 -0
  149. stonepy-0.1.0/src/stonepy/models/ApiSavePreferencesRequestDTO.py +18 -0
  150. stonepy-0.1.0/src/stonepy/models/ApiSaveSignalPreferencesResponseDTO.py +11 -0
  151. stonepy-0.1.0/src/stonepy/models/ApiSaveWatchlistRequestDTO.py +18 -0
  152. stonepy-0.1.0/src/stonepy/models/ApiSaveWatchlistResponseDTO.py +11 -0
  153. stonepy-0.1.0/src/stonepy/models/ApiSimulateOrderResponseDTO.py +14 -0
  154. stonepy-0.1.0/src/stonepy/models/ApiSimulateTradeOrderResponseDTO.py +31 -0
  155. stonepy-0.1.0/src/stonepy/models/ApiStepMarginBandDTO.py +16 -0
  156. stonepy-0.1.0/src/stonepy/models/ApiStepMarginDTO.py +23 -0
  157. stonepy-0.1.0/src/stonepy/models/ApiStopLimitOrderDTOv2.py +27 -0
  158. stonepy-0.1.0/src/stonepy/models/ApiStopLimitOrderHistoryDTO.py +35 -0
  159. stonepy-0.1.0/src/stonepy/models/ApiStopLimitResponseDTO.py +11 -0
  160. stonepy-0.1.0/src/stonepy/models/ApiTradeHistoryDTO.py +43 -0
  161. stonepy-0.1.0/src/stonepy/models/ApiTradeOrderDTOv2.py +22 -0
  162. stonepy-0.1.0/src/stonepy/models/ApiTradeOrderResponseDTO.py +26 -0
  163. stonepy-0.1.0/src/stonepy/models/ApiTraderDetailsDTO.py +25 -0
  164. stonepy-0.1.0/src/stonepy/models/ApiTradingAccountDTOv2.py +18 -0
  165. stonepy-0.1.0/src/stonepy/models/ApiTradingDayTimesDTO.py +20 -0
  166. stonepy-0.1.0/src/stonepy/models/ApiUpdateDeleteClientPreferenceResponseDTO.py +13 -0
  167. stonepy-0.1.0/src/stonepy/models/ApiUserDynamicProfileDTO.py +20 -0
  168. stonepy-0.1.0/src/stonepy/models/ApiUserFollowedUsersDTO.py +19 -0
  169. stonepy-0.1.0/src/stonepy/models/ApiUserFollowersDTO.py +19 -0
  170. stonepy-0.1.0/src/stonepy/models/ApiUserProfileDTO.py +30 -0
  171. stonepy-0.1.0/src/stonepy/models/ApiUserTradingAccountDTO.py +14 -0
  172. stonepy-0.1.0/src/stonepy/models/ApiValidateSessionRequestDTOv2.py +17 -0
  173. stonepy-0.1.0/src/stonepy/models/ApiValidateSessionResponseDTO.py +13 -0
  174. stonepy-0.1.0/src/stonepy/models/ApiWallItemDTO.py +27 -0
  175. stonepy-0.1.0/src/stonepy/models/ApiWallItemsForUsersDTO.py +19 -0
  176. stonepy-0.1.0/src/stonepy/models/CancelOrderRequestDTO.py +16 -0
  177. stonepy-0.1.0/src/stonepy/models/CashEquity.py +20 -0
  178. stonepy-0.1.0/src/stonepy/models/ClientAccountMarginDTO.py +25 -0
  179. stonepy-0.1.0/src/stonepy/models/ClientAccountMarginResponseDTO.py +25 -0
  180. stonepy-0.1.0/src/stonepy/models/ClientCommunicationMessageDTO.py +18 -0
  181. stonepy-0.1.0/src/stonepy/models/ClientPreferenceKeyDTO.py +14 -0
  182. stonepy-0.1.0/src/stonepy/models/ClientPreferenceRequestDTO.py +13 -0
  183. stonepy-0.1.0/src/stonepy/models/ClientPreferencesRequestDTO.py +13 -0
  184. stonepy-0.1.0/src/stonepy/models/CorporateActionsDTO.py +13 -0
  185. stonepy-0.1.0/src/stonepy/models/DeleteAllocationProfileRequestDTO.py +13 -0
  186. stonepy-0.1.0/src/stonepy/models/DeleteAllocationProfileResponseDTO.py +11 -0
  187. stonepy-0.1.0/src/stonepy/models/DeleteWatchlistItemRequestDTO.py +16 -0
  188. stonepy-0.1.0/src/stonepy/models/DeleteWatchlistResponseDTO.py +13 -0
  189. stonepy-0.1.0/src/stonepy/models/EnrichedOrderDTO.py +42 -0
  190. stonepy-0.1.0/src/stonepy/models/ExecutionResponseDTO.py +15 -0
  191. stonepy-0.1.0/src/stonepy/models/ExecutionVenueRequestDTO.py +32 -0
  192. stonepy-0.1.0/src/stonepy/models/FixedMarginOrderResponseDTO.py +27 -0
  193. stonepy-0.1.0/src/stonepy/models/FullMarketInformationSearchWithTagsResponseDTOv2.py +22 -0
  194. stonepy-0.1.0/src/stonepy/models/GetActiveStopLimitOrderResponseDTOv2.py +20 -0
  195. stonepy-0.1.0/src/stonepy/models/GetClientPreferenceResponseDTO.py +18 -0
  196. stonepy-0.1.0/src/stonepy/models/GetClientPreferencesResponseDTO.py +20 -0
  197. stonepy-0.1.0/src/stonepy/models/GetKeyListClientPreferenceResponseDTO.py +13 -0
  198. stonepy-0.1.0/src/stonepy/models/GetListClientPreferenceResponseDTO.py +20 -0
  199. stonepy-0.1.0/src/stonepy/models/GetMarketInformationResponseDTO.py +20 -0
  200. stonepy-0.1.0/src/stonepy/models/GetMessagePopupResponseDTO.py +14 -0
  201. stonepy-0.1.0/src/stonepy/models/GetOpenPositionResponseDTOv2.py +18 -0
  202. stonepy-0.1.0/src/stonepy/models/GetOrderResponseDTOv2.py +20 -0
  203. stonepy-0.1.0/src/stonepy/models/GetOrdersResponseDTOv2.py +22 -0
  204. stonepy-0.1.0/src/stonepy/models/GetPriceBarResponseDTO.py +19 -0
  205. stonepy-0.1.0/src/stonepy/models/GetPriceTickResponseDTO.py +18 -0
  206. stonepy-0.1.0/src/stonepy/models/GetVersionInformationResponseDTO.py +15 -0
  207. stonepy-0.1.0/src/stonepy/models/HistoricalOrderDTO.py +23 -0
  208. stonepy-0.1.0/src/stonepy/models/HistoricalOrdersResponseDTO.py +20 -0
  209. stonepy-0.1.0/src/stonepy/models/IdentifierDTO.py +15 -0
  210. stonepy-0.1.0/src/stonepy/models/InsertWatchlistItemRequestDTO.py +16 -0
  211. stonepy-0.1.0/src/stonepy/models/LegalPartyDTO.py +21 -0
  212. stonepy-0.1.0/src/stonepy/models/LinkedAccountResult.py +36 -0
  213. stonepy-0.1.0/src/stonepy/models/ListActiveOrdersRequestDTO.py +14 -0
  214. stonepy-0.1.0/src/stonepy/models/ListActiveOrdersResponseDTO.py +18 -0
  215. stonepy-0.1.0/src/stonepy/models/ListActiveStopLimitOrderResponseDTO.py +20 -0
  216. stonepy-0.1.0/src/stonepy/models/ListAllocationProfilesResponseDTO.py +20 -0
  217. stonepy-0.1.0/src/stonepy/models/ListCfdMarketsResponseDTO.py +18 -0
  218. stonepy-0.1.0/src/stonepy/models/ListManagedClientsResponseDTO.py +19 -0
  219. stonepy-0.1.0/src/stonepy/models/ListMarketInformationRequestDTO.py +14 -0
  220. stonepy-0.1.0/src/stonepy/models/ListMarketInformationResponseDTO.py +20 -0
  221. stonepy-0.1.0/src/stonepy/models/ListMarketInformationSearchResponseDTO.py +20 -0
  222. stonepy-0.1.0/src/stonepy/models/ListMarketSearchPaginatedResponseDTO.py +13 -0
  223. stonepy-0.1.0/src/stonepy/models/ListMarketSearchResponseDTO.py +18 -0
  224. stonepy-0.1.0/src/stonepy/models/ListOpenPositionsResponseDTO.py +18 -0
  225. stonepy-0.1.0/src/stonepy/models/ListProductInformationDTO.py +14 -0
  226. stonepy-0.1.0/src/stonepy/models/ListProductInformationResponseDTO.py +20 -0
  227. stonepy-0.1.0/src/stonepy/models/ListSpreadMarketsResponseDTO.py +18 -0
  228. stonepy-0.1.0/src/stonepy/models/ListStopLimitOrderHistoryResponseDTO.py +20 -0
  229. stonepy-0.1.0/src/stonepy/models/ListTradeHistoryResponseDTO.py +21 -0
  230. stonepy-0.1.0/src/stonepy/models/ListWatchlistRequestDTO.py +15 -0
  231. stonepy-0.1.0/src/stonepy/models/ListWatchlistResponseDTO.py +21 -0
  232. stonepy-0.1.0/src/stonepy/models/LogonUser.py +13 -0
  233. stonepy-0.1.0/src/stonepy/models/ManagedClientDTO.py +24 -0
  234. stonepy-0.1.0/src/stonepy/models/ManagedTradingAccountDTO.py +16 -0
  235. stonepy-0.1.0/src/stonepy/models/MarketInformationSearchWithTagsResponseDTO.py +20 -0
  236. stonepy-0.1.0/src/stonepy/models/MarketInformationSearchWithoutTagsResponseDTO.py +18 -0
  237. stonepy-0.1.0/src/stonepy/models/MarketInformationTagLookupResponseDTO.py +18 -0
  238. stonepy-0.1.0/src/stonepy/models/MarketPricesDTO.py +19 -0
  239. stonepy-0.1.0/src/stonepy/models/MarketSearchResultDTO.py +122 -0
  240. stonepy-0.1.0/src/stonepy/models/MarketSpreadData.py +21 -0
  241. stonepy-0.1.0/src/stonepy/models/MultipleMarketInformationRequestDTO.py +14 -0
  242. stonepy-0.1.0/src/stonepy/models/NewFixedMarginTradeOrderRequestDTO.py +18 -0
  243. stonepy-0.1.0/src/stonepy/models/NewStopLimitOrderRequestDTO.py +39 -0
  244. stonepy-0.1.0/src/stonepy/models/NewTradeOrderRequestDTO.py +36 -0
  245. stonepy-0.1.0/src/stonepy/models/NewsResponseDTO.py +17 -0
  246. stonepy-0.1.0/src/stonepy/models/OpenOrderDTO.py +13 -0
  247. stonepy-0.1.0/src/stonepy/models/OpenOrdersResponseDTO.py +18 -0
  248. stonepy-0.1.0/src/stonepy/models/OrderDTO.py +34 -0
  249. stonepy-0.1.0/src/stonepy/models/OrderHistoryDTO.py +34 -0
  250. stonepy-0.1.0/src/stonepy/models/OrderRequestDTO.py +47 -0
  251. stonepy-0.1.0/src/stonepy/models/PendingOrderDTO.py +16 -0
  252. stonepy-0.1.0/src/stonepy/models/PendingOrdersResponseDTO.py +18 -0
  253. stonepy-0.1.0/src/stonepy/models/PreferenceDTO.py +14 -0
  254. stonepy-0.1.0/src/stonepy/models/PriceAlertDTO.py +32 -0
  255. stonepy-0.1.0/src/stonepy/models/PriceAlertResponseDTO.py +18 -0
  256. stonepy-0.1.0/src/stonepy/models/PriceBarDTO.py +19 -0
  257. stonepy-0.1.0/src/stonepy/models/PriceDTO.py +29 -0
  258. stonepy-0.1.0/src/stonepy/models/PriceTickDTO.py +16 -0
  259. stonepy-0.1.0/src/stonepy/models/QuoteDTO.py +31 -0
  260. stonepy-0.1.0/src/stonepy/models/SaveAlertRequestDTOv2.py +27 -0
  261. stonepy-0.1.0/src/stonepy/models/SaveAlertResponseDTOv2.py +13 -0
  262. stonepy-0.1.0/src/stonepy/models/SaveAllocationProfileRequestDTO.py +11 -0
  263. stonepy-0.1.0/src/stonepy/models/SaveAllocationProfileResponseDTO.py +11 -0
  264. stonepy-0.1.0/src/stonepy/models/SaveClientPreferenceRequestDTO.py +20 -0
  265. stonepy-0.1.0/src/stonepy/models/SaveMarketInformationRequestDTO.py +21 -0
  266. stonepy-0.1.0/src/stonepy/models/SaveWatchlistRequestDTO.py +19 -0
  267. stonepy-0.1.0/src/stonepy/models/SaveWatchlistResponseDTO.py +13 -0
  268. stonepy-0.1.0/src/stonepy/models/SecureMessageCount.py +16 -0
  269. stonepy-0.1.0/src/stonepy/models/SignalDTO.py +47 -0
  270. stonepy-0.1.0/src/stonepy/models/SignalPerformanceDTO.py +21 -0
  271. stonepy-0.1.0/src/stonepy/models/SignalPerformanceResponseDTO.py +23 -0
  272. stonepy-0.1.0/src/stonepy/models/SingleActiveStopLimitOrderResponseDTO.py +20 -0
  273. stonepy-0.1.0/src/stonepy/models/SingleOpenPositionResponseDTO.py +18 -0
  274. stonepy-0.1.0/src/stonepy/models/StoryResponseDTO.py +14 -0
  275. stonepy-0.1.0/src/stonepy/models/SystemStatusDTO.py +13 -0
  276. stonepy-0.1.0/src/stonepy/models/SystemStatusRequestDTO.py +13 -0
  277. stonepy-0.1.0/src/stonepy/models/Timestamp.py +14 -0
  278. stonepy-0.1.0/src/stonepy/models/TradeMarginDTO.py +41 -0
  279. stonepy-0.1.0/src/stonepy/models/UpdateDeleteClientPreferenceResponseDTO.py +13 -0
  280. stonepy-0.1.0/src/stonepy/models/UpdateFixedMarginTradeOrderRequestDTO.py +20 -0
  281. stonepy-0.1.0/src/stonepy/models/UpdateStopLimitOrderRequestDTO.py +11 -0
  282. stonepy-0.1.0/src/stonepy/models/UpdateTradeOrderRequestDTO.py +14 -0
  283. stonepy-0.1.0/src/stonepy/models/UpdateWatchlistDisplayOrderRequestDTO.py +15 -0
  284. stonepy-0.1.0/src/stonepy/models/__init__.py +781 -0
  285. stonepy-0.1.0/src/stonepy/models/enums.py +665 -0
  286. stonepy-0.1.0/src/stonepy/py.typed +0 -0
  287. stonepy-0.1.0/src/stonepy/resources/__init__.py +48 -0
  288. stonepy-0.1.0/src/stonepy/resources/cfd/__init__.py +21 -0
  289. stonepy-0.1.0/src/stonepy/resources/cfd/_sync/list_cfd_markets.py +37 -0
  290. stonepy-0.1.0/src/stonepy/resources/cfd/list_cfd_markets.py +36 -0
  291. stonepy-0.1.0/src/stonepy/resources/clientapplication/__init__.py +23 -0
  292. stonepy-0.1.0/src/stonepy/resources/clientapplication/_sync/get_version_information.py +19 -0
  293. stonepy-0.1.0/src/stonepy/resources/clientapplication/get_version_information.py +18 -0
  294. stonepy-0.1.0/src/stonepy/resources/clientpreference/__init__.py +57 -0
  295. stonepy-0.1.0/src/stonepy/resources/clientpreference/_sync/delete.py +20 -0
  296. stonepy-0.1.0/src/stonepy/resources/clientpreference/_sync/get.py +18 -0
  297. stonepy-0.1.0/src/stonepy/resources/clientpreference/_sync/get_key_list.py +20 -0
  298. stonepy-0.1.0/src/stonepy/resources/clientpreference/_sync/get_list.py +14 -0
  299. stonepy-0.1.0/src/stonepy/resources/clientpreference/_sync/get_overridden_settings.py +19 -0
  300. stonepy-0.1.0/src/stonepy/resources/clientpreference/_sync/save.py +20 -0
  301. stonepy-0.1.0/src/stonepy/resources/clientpreference/_sync/save_overridden_settings.py +19 -0
  302. stonepy-0.1.0/src/stonepy/resources/clientpreference/delete.py +19 -0
  303. stonepy-0.1.0/src/stonepy/resources/clientpreference/get.py +17 -0
  304. stonepy-0.1.0/src/stonepy/resources/clientpreference/get_key_list.py +19 -0
  305. stonepy-0.1.0/src/stonepy/resources/clientpreference/get_list.py +15 -0
  306. stonepy-0.1.0/src/stonepy/resources/clientpreference/get_overridden_settings.py +18 -0
  307. stonepy-0.1.0/src/stonepy/resources/clientpreference/save.py +19 -0
  308. stonepy-0.1.0/src/stonepy/resources/clientpreference/save_overridden_settings.py +18 -0
  309. stonepy-0.1.0/src/stonepy/resources/margin/__init__.py +25 -0
  310. stonepy-0.1.0/src/stonepy/resources/margin/_sync/get_client_account_margin.py +14 -0
  311. stonepy-0.1.0/src/stonepy/resources/margin/get_client_account_margin.py +15 -0
  312. stonepy-0.1.0/src/stonepy/resources/market/__init__.py +153 -0
  313. stonepy-0.1.0/src/stonepy/resources/market/_sync/full_search_with_tags.py +49 -0
  314. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_full_search_with_tags.py +51 -0
  315. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_latest_price_bars.py +28 -0
  316. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_latest_price_ticks.py +22 -0
  317. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_market_information.py +16 -0
  318. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_market_information_extended.py +19 -0
  319. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_market_spread.py +14 -0
  320. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_price_bars_after_date.py +42 -0
  321. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_price_bars_before_date.py +41 -0
  322. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_price_bars_between_dates.py +44 -0
  323. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_price_ticks_after_date.py +29 -0
  324. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_price_ticks_before_date.py +29 -0
  325. stonepy-0.1.0/src/stonepy/resources/market/_sync/get_price_ticks_between_dates.py +35 -0
  326. stonepy-0.1.0/src/stonepy/resources/market/_sync/list_market_information.py +16 -0
  327. stonepy-0.1.0/src/stonepy/resources/market/_sync/list_market_information_search.py +45 -0
  328. stonepy-0.1.0/src/stonepy/resources/market/_sync/list_market_search.py +46 -0
  329. stonepy-0.1.0/src/stonepy/resources/market/_sync/list_market_search_paginated.py +52 -0
  330. stonepy-0.1.0/src/stonepy/resources/market/_sync/save_market_information.py +19 -0
  331. stonepy-0.1.0/src/stonepy/resources/market/_sync/save_product_information.py +16 -0
  332. stonepy-0.1.0/src/stonepy/resources/market/_sync/search_with_tags.py +51 -0
  333. stonepy-0.1.0/src/stonepy/resources/market/full_search_with_tags.py +48 -0
  334. stonepy-0.1.0/src/stonepy/resources/market/get_full_search_with_tags.py +50 -0
  335. stonepy-0.1.0/src/stonepy/resources/market/get_latest_price_bars.py +27 -0
  336. stonepy-0.1.0/src/stonepy/resources/market/get_latest_price_ticks.py +21 -0
  337. stonepy-0.1.0/src/stonepy/resources/market/get_market_information.py +15 -0
  338. stonepy-0.1.0/src/stonepy/resources/market/get_market_information_extended.py +18 -0
  339. stonepy-0.1.0/src/stonepy/resources/market/get_market_spread.py +13 -0
  340. stonepy-0.1.0/src/stonepy/resources/market/get_price_bars_after_date.py +41 -0
  341. stonepy-0.1.0/src/stonepy/resources/market/get_price_bars_before_date.py +40 -0
  342. stonepy-0.1.0/src/stonepy/resources/market/get_price_bars_between_dates.py +43 -0
  343. stonepy-0.1.0/src/stonepy/resources/market/get_price_ticks_after_date.py +28 -0
  344. stonepy-0.1.0/src/stonepy/resources/market/get_price_ticks_before_date.py +28 -0
  345. stonepy-0.1.0/src/stonepy/resources/market/get_price_ticks_between_dates.py +34 -0
  346. stonepy-0.1.0/src/stonepy/resources/market/list_market_information.py +15 -0
  347. stonepy-0.1.0/src/stonepy/resources/market/list_market_information_search.py +44 -0
  348. stonepy-0.1.0/src/stonepy/resources/market/list_market_search.py +45 -0
  349. stonepy-0.1.0/src/stonepy/resources/market/list_market_search_paginated.py +51 -0
  350. stonepy-0.1.0/src/stonepy/resources/market/save_market_information.py +18 -0
  351. stonepy-0.1.0/src/stonepy/resources/market/save_product_information.py +15 -0
  352. stonepy-0.1.0/src/stonepy/resources/market/search_with_tags.py +50 -0
  353. stonepy-0.1.0/src/stonepy/resources/message/__init__.py +71 -0
  354. stonepy-0.1.0/src/stonepy/resources/message/_sync/client_communication_message_update.py +23 -0
  355. stonepy-0.1.0/src/stonepy/resources/message/_sync/get_client_application_message_translation.py +21 -0
  356. stonepy-0.1.0/src/stonepy/resources/message/_sync/get_client_application_message_translation_with_interesting_items.py +24 -0
  357. stonepy-0.1.0/src/stonepy/resources/message/_sync/get_client_communication_messages.py +18 -0
  358. stonepy-0.1.0/src/stonepy/resources/message/_sync/get_message_popup.py +16 -0
  359. stonepy-0.1.0/src/stonepy/resources/message/_sync/get_system_lookup.py +20 -0
  360. stonepy-0.1.0/src/stonepy/resources/message/_sync/save_client_communication_message_response.py +19 -0
  361. stonepy-0.1.0/src/stonepy/resources/message/client_communication_message_update.py +22 -0
  362. stonepy-0.1.0/src/stonepy/resources/message/get_client_application_message_translation.py +20 -0
  363. stonepy-0.1.0/src/stonepy/resources/message/get_client_application_message_translation_with_interesting_items.py +23 -0
  364. stonepy-0.1.0/src/stonepy/resources/message/get_client_communication_messages.py +17 -0
  365. stonepy-0.1.0/src/stonepy/resources/message/get_message_popup.py +15 -0
  366. stonepy-0.1.0/src/stonepy/resources/message/get_system_lookup.py +21 -0
  367. stonepy-0.1.0/src/stonepy/resources/message/save_client_communication_message_response.py +18 -0
  368. stonepy-0.1.0/src/stonepy/resources/news/__init__.py +55 -0
  369. stonepy-0.1.0/src/stonepy/resources/news/_sync/get_market_report_headlines.py +18 -0
  370. stonepy-0.1.0/src/stonepy/resources/news/_sync/get_market_reports.py +16 -0
  371. stonepy-0.1.0/src/stonepy/resources/news/_sync/get_news.py +16 -0
  372. stonepy-0.1.0/src/stonepy/resources/news/_sync/get_news_headlines.py +16 -0
  373. stonepy-0.1.0/src/stonepy/resources/news/_sync/get_story.py +14 -0
  374. stonepy-0.1.0/src/stonepy/resources/news/_sync/search_market_reports.py +31 -0
  375. stonepy-0.1.0/src/stonepy/resources/news/_sync/search_news.py +31 -0
  376. stonepy-0.1.0/src/stonepy/resources/news/get_market_report_headlines.py +17 -0
  377. stonepy-0.1.0/src/stonepy/resources/news/get_market_reports.py +17 -0
  378. stonepy-0.1.0/src/stonepy/resources/news/get_news.py +15 -0
  379. stonepy-0.1.0/src/stonepy/resources/news/get_news_headlines.py +15 -0
  380. stonepy-0.1.0/src/stonepy/resources/news/get_story.py +13 -0
  381. stonepy-0.1.0/src/stonepy/resources/news/search_market_reports.py +30 -0
  382. stonepy-0.1.0/src/stonepy/resources/news/search_news.py +30 -0
  383. stonepy-0.1.0/src/stonepy/resources/order/__init__.py +83 -0
  384. stonepy-0.1.0/src/stonepy/resources/order/_sync/cancel_order.py +17 -0
  385. stonepy-0.1.0/src/stonepy/resources/order/_sync/get_active_stop_limit_order.py +21 -0
  386. stonepy-0.1.0/src/stonepy/resources/order/_sync/get_open_position.py +21 -0
  387. stonepy-0.1.0/src/stonepy/resources/order/_sync/get_order.py +18 -0
  388. stonepy-0.1.0/src/stonepy/resources/order/_sync/list_active_orders.py +22 -0
  389. stonepy-0.1.0/src/stonepy/resources/order/_sync/list_active_stop_limit_orders.py +22 -0
  390. stonepy-0.1.0/src/stonepy/resources/order/_sync/list_open_positions.py +22 -0
  391. stonepy-0.1.0/src/stonepy/resources/order/_sync/list_stop_limit_order_history.py +31 -0
  392. stonepy-0.1.0/src/stonepy/resources/order/_sync/list_trade_history.py +30 -0
  393. stonepy-0.1.0/src/stonepy/resources/order/_sync/order.py +19 -0
  394. stonepy-0.1.0/src/stonepy/resources/order/_sync/place_order.py +17 -0
  395. stonepy-0.1.0/src/stonepy/resources/order/_sync/simulate_trade.py +18 -0
  396. stonepy-0.1.0/src/stonepy/resources/order/cancel_order.py +16 -0
  397. stonepy-0.1.0/src/stonepy/resources/order/get_active_stop_limit_order.py +22 -0
  398. stonepy-0.1.0/src/stonepy/resources/order/get_open_position.py +20 -0
  399. stonepy-0.1.0/src/stonepy/resources/order/get_order.py +17 -0
  400. stonepy-0.1.0/src/stonepy/resources/order/list_active_orders.py +21 -0
  401. stonepy-0.1.0/src/stonepy/resources/order/list_active_stop_limit_orders.py +23 -0
  402. stonepy-0.1.0/src/stonepy/resources/order/list_open_positions.py +21 -0
  403. stonepy-0.1.0/src/stonepy/resources/order/list_stop_limit_order_history.py +30 -0
  404. stonepy-0.1.0/src/stonepy/resources/order/list_trade_history.py +29 -0
  405. stonepy-0.1.0/src/stonepy/resources/order/order.py +18 -0
  406. stonepy-0.1.0/src/stonepy/resources/order/place_order.py +16 -0
  407. stonepy-0.1.0/src/stonepy/resources/order/simulate_trade.py +19 -0
  408. stonepy-0.1.0/src/stonepy/resources/preference/__init__.py +37 -0
  409. stonepy-0.1.0/src/stonepy/resources/preference/_sync/delete_user_preference.py +14 -0
  410. stonepy-0.1.0/src/stonepy/resources/preference/_sync/get_user_preference.py +16 -0
  411. stonepy-0.1.0/src/stonepy/resources/preference/_sync/save_user_preference.py +15 -0
  412. stonepy-0.1.0/src/stonepy/resources/preference/delete_user_preference.py +15 -0
  413. stonepy-0.1.0/src/stonepy/resources/preference/get_user_preference.py +15 -0
  414. stonepy-0.1.0/src/stonepy/resources/preference/save_user_preference.py +14 -0
  415. stonepy-0.1.0/src/stonepy/resources/price_alert/__init__.py +35 -0
  416. stonepy-0.1.0/src/stonepy/resources/price_alert/_sync/delete_pa.py +14 -0
  417. stonepy-0.1.0/src/stonepy/resources/price_alert/_sync/get_pa.py +19 -0
  418. stonepy-0.1.0/src/stonepy/resources/price_alert/_sync/save_pa.py +19 -0
  419. stonepy-0.1.0/src/stonepy/resources/price_alert/_sync/save_price_alert.py +18 -0
  420. stonepy-0.1.0/src/stonepy/resources/price_alert/delete_pa.py +13 -0
  421. stonepy-0.1.0/src/stonepy/resources/price_alert/get_pa.py +18 -0
  422. stonepy-0.1.0/src/stonepy/resources/price_alert/save_pa.py +18 -0
  423. stonepy-0.1.0/src/stonepy/resources/price_alert/save_price_alert.py +17 -0
  424. stonepy-0.1.0/src/stonepy/resources/session/__init__.py +29 -0
  425. stonepy-0.1.0/src/stonepy/resources/session/_sync/change_password.py +14 -0
  426. stonepy-0.1.0/src/stonepy/resources/session/_sync/delete_session.py +14 -0
  427. stonepy-0.1.0/src/stonepy/resources/session/_sync/log_on.py +21 -0
  428. stonepy-0.1.0/src/stonepy/resources/session/change_password.py +15 -0
  429. stonepy-0.1.0/src/stonepy/resources/session/delete_session.py +13 -0
  430. stonepy-0.1.0/src/stonepy/resources/session/log_on.py +20 -0
  431. stonepy-0.1.0/src/stonepy/resources/spread/__init__.py +21 -0
  432. stonepy-0.1.0/src/stonepy/resources/spread/_sync/list_spread_markets.py +37 -0
  433. stonepy-0.1.0/src/stonepy/resources/spread/list_spread_markets.py +36 -0
  434. stonepy-0.1.0/src/stonepy/resources/user_account/__init__.py +35 -0
  435. stonepy-0.1.0/src/stonepy/resources/user_account/_sync/get_client_and_trading_account.py +19 -0
  436. stonepy-0.1.0/src/stonepy/resources/user_account/_sync/save_account_information.py +19 -0
  437. stonepy-0.1.0/src/stonepy/resources/user_account/get_client_and_trading_account.py +18 -0
  438. stonepy-0.1.0/src/stonepy/resources/user_account/save_account_information.py +18 -0
  439. stonepy-0.1.0/src/stonepy/resources/watchlist/__init__.py +39 -0
  440. stonepy-0.1.0/src/stonepy/resources/watchlist/_sync/delete_watchlist.py +16 -0
  441. stonepy-0.1.0/src/stonepy/resources/watchlist/_sync/get_watchlists.py +14 -0
  442. stonepy-0.1.0/src/stonepy/resources/watchlist/_sync/get_watchlists_list.py +27 -0
  443. stonepy-0.1.0/src/stonepy/resources/watchlist/_sync/save_watchlist.py +14 -0
  444. stonepy-0.1.0/src/stonepy/resources/watchlist/delete_watchlist.py +15 -0
  445. stonepy-0.1.0/src/stonepy/resources/watchlist/get_watchlists.py +13 -0
  446. stonepy-0.1.0/src/stonepy/resources/watchlist/get_watchlists_list.py +26 -0
  447. stonepy-0.1.0/src/stonepy/resources/watchlist/save_watchlist.py +13 -0
@@ -0,0 +1,11 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .venv/
4
+ .pytest_cache/
5
+ .mypy_cache/
6
+ .ruff_cache/
7
+ dist/
8
+ build/
9
+ *.egg-info/
10
+ .coverage
11
+ htmlcov/
@@ -0,0 +1,7 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 - 2026-06-18
4
+
5
+ - Initial StoneX CIAPI v2 client release.
6
+ - Includes generated endpoint bindings, DTO models, sync and async clients, retry handling,
7
+ rate-limit handling, and typed resource groups.
stonepy-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Aaron Morgan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
stonepy-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,186 @@
1
+ Metadata-Version: 2.4
2
+ Name: stonepy
3
+ Version: 0.1.0
4
+ Summary: Python client for the StoneX (CIAPI) v2 trading API
5
+ Project-URL: Homepage, https://github.com/aaronmgn/stonepy
6
+ Project-URL: Repository, https://github.com/aaronmgn/stonepy
7
+ Project-URL: Issues, https://github.com/aaronmgn/stonepy/issues
8
+ Author-email: Aaron Morgan <aaron@dvops.io>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: ciapi,cityindex,stonex,trading
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Typing :: Typed
20
+ Requires-Python: >=3.11
21
+ Requires-Dist: httpx<1.0,>=0.27
22
+ Requires-Dist: pydantic<3.0,>=2.7
23
+ Requires-Dist: simplejson<4.0,>=3.19
24
+ Provides-Extra: dev
25
+ Requires-Dist: mypy>=1.10; extra == 'dev'
26
+ Requires-Dist: pre-commit>=3.7; extra == 'dev'
27
+ Requires-Dist: pytest-cov>=5; extra == 'dev'
28
+ Requires-Dist: pytest>=8; extra == 'dev'
29
+ Requires-Dist: respx>=0.21; extra == 'dev'
30
+ Requires-Dist: ruff>=0.5; extra == 'dev'
31
+ Requires-Dist: twine>=5; extra == 'dev'
32
+ Requires-Dist: types-simplejson; extra == 'dev'
33
+ Requires-Dist: unasync>=0.6; extra == 'dev'
34
+ Description-Content-Type: text/markdown
35
+
36
+ # stonepy
37
+
38
+ Python client for the StoneX (CIAPI) v2 trading API.
39
+
40
+ ## Installation
41
+
42
+ ```bash
43
+ pip install stonepy
44
+ ```
45
+
46
+ Requires Python >= 3.11.
47
+
48
+ ## Quickstart
49
+
50
+ ```python
51
+ from stonepy import ClientConfig, StoneXClient
52
+ from stonepy.models import ApiLogOnRequestDTO
53
+
54
+ config = ClientConfig(base_url="https://ciapi.cityindex.com/TradingAPI")
55
+
56
+ with StoneXClient(config) as client:
57
+ session = client.session.log_on(
58
+ ApiLogOnRequestDTO(
59
+ UserName="username",
60
+ Password="password",
61
+ AppKey="app-key",
62
+ AppVersion="stonepy",
63
+ AppComments="",
64
+ )
65
+ )
66
+ print(session.status_code)
67
+ ```
68
+
69
+ Environment-based configuration is also available:
70
+
71
+ ```python
72
+ from stonepy import ClientConfig, StoneXClient
73
+
74
+ config = ClientConfig.from_env()
75
+
76
+ with StoneXClient(config) as client:
77
+ print(client.session)
78
+ ```
79
+
80
+ `ClientConfig.from_env()` reads `STONEX_BASE_URL`, `STONEX_APP_KEY`, `STONEX_USERNAME`,
81
+ and `STONEX_PASSWORD`. `STONEX_BASE_URL` is required unless `base_url=` is passed.
82
+
83
+ ## Authentication and Sessions
84
+
85
+ Calling `client.session.log_on(...)` establishes the authenticated session token that the
86
+ client attaches to every subsequent request. The token is held by the client for the life of
87
+ its context manager.
88
+
89
+ If you supply `app_key`, `username`, and `password` on `ClientConfig` (directly or via
90
+ `ClientConfig.from_env()`), the client also refreshes the session automatically: it
91
+ re-authenticates in the background before the token expires, controlled by
92
+ `ClientConfig.proactive_refresh_seconds` (default `1080.0`, i.e. 18 minutes), and transparently
93
+ re-logs-on if a request is rejected with an expired-session error. Without those credentials you
94
+ must call `log_on` yourself and manage re-authentication.
95
+
96
+ ```python
97
+ config = ClientConfig(
98
+ base_url="https://ciapi.cityindex.com/TradingAPI",
99
+ app_key="app-key",
100
+ username="username",
101
+ password="password",
102
+ ) # credentials present -> automatic proactive session refresh
103
+ ```
104
+
105
+ ## Async Usage
106
+
107
+ ```python
108
+ from stonepy import AsyncStoneXClient, ClientConfig
109
+ from stonepy.models import ApiLogOnRequestDTO
110
+
111
+ config = ClientConfig(base_url="https://ciapi.cityindex.com/TradingAPI")
112
+
113
+ async with AsyncStoneXClient(config) as client:
114
+ session = await client.session.log_on(
115
+ ApiLogOnRequestDTO(
116
+ UserName="username",
117
+ Password="password",
118
+ AppKey="app-key",
119
+ AppVersion="stonepy",
120
+ AppComments="",
121
+ )
122
+ )
123
+ print(session.status_code)
124
+ ```
125
+
126
+ Use `aclose()` for async clients when not using `async with`; use `close()` for sync clients.
127
+
128
+ ## Error Handling
129
+
130
+ All library exceptions inherit from `StoneXError`.
131
+
132
+ ```python
133
+ from stonepy import RateLimitError, StoneXAPIError, StoneXError, StoneXClient
134
+
135
+ try:
136
+ with StoneXClient(config) as client:
137
+ client.order.list_active_orders(request_dto)
138
+ except RateLimitError as exc:
139
+ print(exc.retry_after)
140
+ except StoneXAPIError as exc:
141
+ print(exc.http_status, exc.error_code, exc.error_message)
142
+ except StoneXError as exc:
143
+ print(exc)
144
+ ```
145
+
146
+ Important subclasses include `AuthenticationError`, `RateLimitError`,
147
+ `OrderRejectedError`, `ResponseParseError`, `StoneXAPIError`, and `TransportError`.
148
+
149
+ ## Pagination
150
+
151
+ Paginated API methods return the page DTO documented by StoneX. For example,
152
+ `client.market.list_market_search_paginated(...)` accepts `page`, `page_size`, and
153
+ `order_by` keyword arguments and returns `ListMarketSearchPaginatedResponseDTO`:
154
+
155
+ ```python
156
+ page = client.market.list_market_search_paginated(
157
+ "gold",
158
+ search_by_market_code=False,
159
+ search_by_market_name=True,
160
+ spread_product_type=True,
161
+ cfd_product_type=True,
162
+ binary_product_type=False,
163
+ ascending_order=True,
164
+ include_options=False,
165
+ client_account_id=12345,
166
+ page=0,
167
+ page_size=100,
168
+ )
169
+ print(page.total_number_of_results)
170
+ ```
171
+
172
+ ## API Reference
173
+
174
+ See `docs/API_REFERENCE.md` for the public package surface and links to the upstream StoneX
175
+ CIAPI v2 documentation.
176
+
177
+ ## Development
178
+
179
+ ```bash
180
+ uv venv
181
+ uv sync --extra dev
182
+ uv run pytest -q
183
+ uv run ruff check .
184
+ uv run ruff format --check .
185
+ uv run mypy
186
+ ```
@@ -0,0 +1,151 @@
1
+ # stonepy
2
+
3
+ Python client for the StoneX (CIAPI) v2 trading API.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pip install stonepy
9
+ ```
10
+
11
+ Requires Python >= 3.11.
12
+
13
+ ## Quickstart
14
+
15
+ ```python
16
+ from stonepy import ClientConfig, StoneXClient
17
+ from stonepy.models import ApiLogOnRequestDTO
18
+
19
+ config = ClientConfig(base_url="https://ciapi.cityindex.com/TradingAPI")
20
+
21
+ with StoneXClient(config) as client:
22
+ session = client.session.log_on(
23
+ ApiLogOnRequestDTO(
24
+ UserName="username",
25
+ Password="password",
26
+ AppKey="app-key",
27
+ AppVersion="stonepy",
28
+ AppComments="",
29
+ )
30
+ )
31
+ print(session.status_code)
32
+ ```
33
+
34
+ Environment-based configuration is also available:
35
+
36
+ ```python
37
+ from stonepy import ClientConfig, StoneXClient
38
+
39
+ config = ClientConfig.from_env()
40
+
41
+ with StoneXClient(config) as client:
42
+ print(client.session)
43
+ ```
44
+
45
+ `ClientConfig.from_env()` reads `STONEX_BASE_URL`, `STONEX_APP_KEY`, `STONEX_USERNAME`,
46
+ and `STONEX_PASSWORD`. `STONEX_BASE_URL` is required unless `base_url=` is passed.
47
+
48
+ ## Authentication and Sessions
49
+
50
+ Calling `client.session.log_on(...)` establishes the authenticated session token that the
51
+ client attaches to every subsequent request. The token is held by the client for the life of
52
+ its context manager.
53
+
54
+ If you supply `app_key`, `username`, and `password` on `ClientConfig` (directly or via
55
+ `ClientConfig.from_env()`), the client also refreshes the session automatically: it
56
+ re-authenticates in the background before the token expires, controlled by
57
+ `ClientConfig.proactive_refresh_seconds` (default `1080.0`, i.e. 18 minutes), and transparently
58
+ re-logs-on if a request is rejected with an expired-session error. Without those credentials you
59
+ must call `log_on` yourself and manage re-authentication.
60
+
61
+ ```python
62
+ config = ClientConfig(
63
+ base_url="https://ciapi.cityindex.com/TradingAPI",
64
+ app_key="app-key",
65
+ username="username",
66
+ password="password",
67
+ ) # credentials present -> automatic proactive session refresh
68
+ ```
69
+
70
+ ## Async Usage
71
+
72
+ ```python
73
+ from stonepy import AsyncStoneXClient, ClientConfig
74
+ from stonepy.models import ApiLogOnRequestDTO
75
+
76
+ config = ClientConfig(base_url="https://ciapi.cityindex.com/TradingAPI")
77
+
78
+ async with AsyncStoneXClient(config) as client:
79
+ session = await client.session.log_on(
80
+ ApiLogOnRequestDTO(
81
+ UserName="username",
82
+ Password="password",
83
+ AppKey="app-key",
84
+ AppVersion="stonepy",
85
+ AppComments="",
86
+ )
87
+ )
88
+ print(session.status_code)
89
+ ```
90
+
91
+ Use `aclose()` for async clients when not using `async with`; use `close()` for sync clients.
92
+
93
+ ## Error Handling
94
+
95
+ All library exceptions inherit from `StoneXError`.
96
+
97
+ ```python
98
+ from stonepy import RateLimitError, StoneXAPIError, StoneXError, StoneXClient
99
+
100
+ try:
101
+ with StoneXClient(config) as client:
102
+ client.order.list_active_orders(request_dto)
103
+ except RateLimitError as exc:
104
+ print(exc.retry_after)
105
+ except StoneXAPIError as exc:
106
+ print(exc.http_status, exc.error_code, exc.error_message)
107
+ except StoneXError as exc:
108
+ print(exc)
109
+ ```
110
+
111
+ Important subclasses include `AuthenticationError`, `RateLimitError`,
112
+ `OrderRejectedError`, `ResponseParseError`, `StoneXAPIError`, and `TransportError`.
113
+
114
+ ## Pagination
115
+
116
+ Paginated API methods return the page DTO documented by StoneX. For example,
117
+ `client.market.list_market_search_paginated(...)` accepts `page`, `page_size`, and
118
+ `order_by` keyword arguments and returns `ListMarketSearchPaginatedResponseDTO`:
119
+
120
+ ```python
121
+ page = client.market.list_market_search_paginated(
122
+ "gold",
123
+ search_by_market_code=False,
124
+ search_by_market_name=True,
125
+ spread_product_type=True,
126
+ cfd_product_type=True,
127
+ binary_product_type=False,
128
+ ascending_order=True,
129
+ include_options=False,
130
+ client_account_id=12345,
131
+ page=0,
132
+ page_size=100,
133
+ )
134
+ print(page.total_number_of_results)
135
+ ```
136
+
137
+ ## API Reference
138
+
139
+ See `docs/API_REFERENCE.md` for the public package surface and links to the upstream StoneX
140
+ CIAPI v2 documentation.
141
+
142
+ ## Development
143
+
144
+ ```bash
145
+ uv venv
146
+ uv sync --extra dev
147
+ uv run pytest -q
148
+ uv run ruff check .
149
+ uv run ruff format --check .
150
+ uv run mypy
151
+ ```
@@ -0,0 +1,79 @@
1
+ [project]
2
+ name = "stonepy"
3
+ dynamic = ["version"]
4
+ description = "Python client for the StoneX (CIAPI) v2 trading API"
5
+ requires-python = ">=3.11"
6
+ readme = "README.md"
7
+ license = "MIT"
8
+ license-files = ["LICENSE"]
9
+ authors = [{ name = "Aaron Morgan", email = "aaron@dvops.io" }]
10
+ keywords = ["stonex", "ciapi", "trading", "cityindex"]
11
+ classifiers = [
12
+ "Development Status :: 3 - Alpha",
13
+ "Intended Audience :: Developers",
14
+ "License :: OSI Approved :: MIT License",
15
+ "Programming Language :: Python :: 3",
16
+ "Programming Language :: Python :: 3.11",
17
+ "Programming Language :: Python :: 3.12",
18
+ "Programming Language :: Python :: 3.13",
19
+ "Typing :: Typed",
20
+ ]
21
+ dependencies = ["httpx>=0.27,<1.0", "pydantic>=2.7,<3.0", "simplejson>=3.19,<4.0"]
22
+
23
+ [project.urls]
24
+ Homepage = "https://github.com/aaronmgn/stonepy"
25
+ Repository = "https://github.com/aaronmgn/stonepy"
26
+ Issues = "https://github.com/aaronmgn/stonepy/issues"
27
+
28
+ [project.optional-dependencies]
29
+ dev = [
30
+ "pytest>=8",
31
+ "pytest-cov>=5",
32
+ "respx>=0.21",
33
+ "mypy>=1.10",
34
+ "ruff>=0.5",
35
+ "unasync>=0.6",
36
+ "pre-commit>=3.7",
37
+ "types-simplejson",
38
+ "twine>=5",
39
+ ]
40
+
41
+ [build-system]
42
+ requires = ["hatchling"]
43
+ build-backend = "hatchling.build"
44
+
45
+ [tool.hatch.version]
46
+ path = "src/stonepy/__init__.py"
47
+
48
+ [tool.hatch.build.targets.wheel]
49
+ packages = ["src/stonepy"]
50
+
51
+ [tool.hatch.build.targets.wheel.force-include]
52
+ "src/stonepy/py.typed" = "stonepy/py.typed"
53
+
54
+ [tool.hatch.build.targets.sdist]
55
+ include = ["src/stonepy", "README.md", "LICENSE", "CHANGELOG.md", "pyproject.toml"]
56
+
57
+ [tool.ruff]
58
+ line-length = 100
59
+ target-version = "py311"
60
+
61
+ [tool.ruff.lint]
62
+ select = ["E", "F", "I", "UP", "B", "SIM"]
63
+
64
+ [tool.mypy]
65
+ python_version = "3.11"
66
+ strict = true
67
+ files = ["src", "tests"]
68
+
69
+ [tool.pytest.ini_options]
70
+ addopts = "-q"
71
+ testpaths = ["tests"]
72
+
73
+ [tool.coverage.run]
74
+ source = ["src/stonepy"]
75
+ omit = [
76
+ "src/stonepy/models/*",
77
+ "src/stonepy/resources/*/_sync/*",
78
+ "src/stonepy/resources/*/__init__.py",
79
+ ]
@@ -0,0 +1,27 @@
1
+ from stonepy._core.config import ClientConfig
2
+ from stonepy._core.errors import (
3
+ AuthenticationError,
4
+ OrderRejectedError,
5
+ RateLimitError,
6
+ ResponseParseError,
7
+ StoneXAPIError,
8
+ StoneXError,
9
+ TransportError,
10
+ )
11
+ from stonepy.client import AsyncStoneXClient, StoneXClient
12
+
13
+ __version__ = "0.1.0"
14
+
15
+ __all__ = [
16
+ "AsyncStoneXClient",
17
+ "AuthenticationError",
18
+ "ClientConfig",
19
+ "OrderRejectedError",
20
+ "RateLimitError",
21
+ "ResponseParseError",
22
+ "StoneXAPIError",
23
+ "StoneXClient",
24
+ "StoneXError",
25
+ "TransportError",
26
+ "__version__",
27
+ ]
@@ -0,0 +1,49 @@
1
+ """Clock abstraction so timing logic is testable with a fake clock."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import time
7
+ from typing import Protocol, runtime_checkable
8
+
9
+
10
+ class Clock(Protocol):
11
+ def now(self) -> float: ...
12
+ def sleep(self, seconds: float) -> None: ...
13
+
14
+
15
+ @runtime_checkable
16
+ class AsyncClock(Clock, Protocol):
17
+ async def asleep(self, seconds: float) -> None: ...
18
+
19
+
20
+ class SystemClock:
21
+ def now(self) -> float:
22
+ return time.monotonic()
23
+
24
+ def sleep(self, seconds: float) -> None:
25
+ if seconds > 0:
26
+ time.sleep(seconds)
27
+
28
+ async def asleep(self, seconds: float) -> None:
29
+ if seconds > 0:
30
+ await asyncio.sleep(seconds)
31
+
32
+
33
+ class FakeClock:
34
+ def __init__(self) -> None:
35
+ self._t = 0.0
36
+
37
+ def now(self) -> float:
38
+ return self._t
39
+
40
+ def sleep(self, seconds: float) -> None:
41
+ self._t += max(0.0, seconds)
42
+
43
+ async def asleep(self, seconds: float) -> None:
44
+ self.sleep(seconds)
45
+
46
+ def advance(self, seconds: float) -> None:
47
+ if seconds < 0:
48
+ raise ValueError("seconds must be non-negative")
49
+ self._t += seconds
@@ -0,0 +1,96 @@
1
+ """Decimal-safe JSON and WCF (`/Date(ms)/`) date handling."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import re
7
+ from datetime import UTC, datetime, timedelta
8
+ from decimal import Decimal
9
+ from typing import Annotated, Any, NoReturn, TypeAlias
10
+
11
+ import simplejson
12
+ from pydantic import BeforeValidator, PlainSerializer
13
+
14
+ WCF_MINVALUE_MS = -62135596800000
15
+ _WCF_RE = re.compile(r"\\?/Date\((-?\d+)(?:[+-]\d{4})?\)\\?/")
16
+ _UTC_EPOCH = datetime(1970, 1, 1, tzinfo=UTC)
17
+ _MS_PER_DAY = 86_400_000
18
+ _MS_PER_SECOND = 1_000
19
+
20
+
21
+ def _ensure_timezone_aware(value: datetime) -> datetime:
22
+ if value.utcoffset() is None:
23
+ raise ValueError("datetime must be timezone-aware")
24
+ return value
25
+
26
+
27
+ def parse_wcf_date(value: Any) -> datetime | None:
28
+ if value is None:
29
+ return None
30
+ if isinstance(value, datetime):
31
+ return _ensure_timezone_aware(value)
32
+ if isinstance(value, bool):
33
+ raise ValueError(f"not a WCF date: {value!r}")
34
+ if isinstance(value, int):
35
+ ms = value
36
+ elif isinstance(value, str):
37
+ m = _WCF_RE.fullmatch(value)
38
+ if not m:
39
+ raise ValueError(f"not a WCF date: {value!r}")
40
+ ms = int(m.group(1))
41
+ else:
42
+ raise ValueError(f"not a WCF date: {value!r}")
43
+ if ms == WCF_MINVALUE_MS:
44
+ return None
45
+ try:
46
+ return _UTC_EPOCH + timedelta(milliseconds=ms)
47
+ except OverflowError as exc:
48
+ raise ValueError(f"WCF date out of range: {value!r}") from exc
49
+
50
+
51
+ def format_wcf_date(value: datetime | None) -> str | None:
52
+ if value is None:
53
+ return None
54
+ aware_value = _ensure_timezone_aware(value)
55
+ delta = aware_value.astimezone(UTC) - _UTC_EPOCH
56
+ ms = (
57
+ delta.days * _MS_PER_DAY
58
+ + delta.seconds * _MS_PER_SECOND
59
+ + delta.microseconds // _MS_PER_SECOND
60
+ )
61
+ return f"/Date({ms})/"
62
+
63
+
64
+ StoneXDateTime: TypeAlias = Annotated[
65
+ datetime | None,
66
+ BeforeValidator(parse_wcf_date),
67
+ PlainSerializer(format_wcf_date, when_used="always"),
68
+ ]
69
+
70
+
71
+ def _reject_nonfinite_decimals(value: Any) -> None:
72
+ if isinstance(value, Decimal):
73
+ if not value.is_finite():
74
+ raise ValueError("non-finite Decimal values are not valid JSON")
75
+ elif isinstance(value, dict):
76
+ for key, item in value.items():
77
+ _reject_nonfinite_decimals(key)
78
+ _reject_nonfinite_decimals(item)
79
+ elif isinstance(value, (list, tuple)):
80
+ for item in value:
81
+ _reject_nonfinite_decimals(item)
82
+
83
+
84
+ def _reject_json_constant(value: str) -> NoReturn:
85
+ raise ValueError(f"non-finite JSON constant is not allowed: {value}")
86
+
87
+
88
+ def dumps(obj: Any) -> str:
89
+ _reject_nonfinite_decimals(obj)
90
+ return simplejson.dumps(obj, use_decimal=True, allow_nan=False, separators=(",", ":"))
91
+
92
+
93
+ def loads(text: str | bytes) -> Any:
94
+ if isinstance(text, bytes):
95
+ text = text.decode("utf-8")
96
+ return json.loads(text, parse_float=Decimal, parse_constant=_reject_json_constant)