finance_dev 0.9.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 (486) hide show
  1. finance_dev/__init__.py +18 -0
  2. finance_dev/_hooks/__init__.py +7 -0
  3. finance_dev/_hooks/clientcredentials.py +319 -0
  4. finance_dev/_hooks/oauth2scopes.py +50 -0
  5. finance_dev/_hooks/registration.py +13 -0
  6. finance_dev/_hooks/sdkhooks.py +82 -0
  7. finance_dev/_hooks/types.py +125 -0
  8. finance_dev/_version.py +16 -0
  9. finance_dev/accounts.py +797 -0
  10. finance_dev/alternativedata.py +4830 -0
  11. finance_dev/analytics.py +3757 -0
  12. finance_dev/basesdk.py +393 -0
  13. finance_dev/calendar.py +1523 -0
  14. finance_dev/chart.py +1881 -0
  15. finance_dev/company.py +1105 -0
  16. finance_dev/corporateactions.py +1795 -0
  17. finance_dev/economy.py +1153 -0
  18. finance_dev/errors/__init__.py +94 -0
  19. finance_dev/errors/apierror.py +41 -0
  20. finance_dev/errors/authenticationerrorenvelope.py +43 -0
  21. finance_dev/errors/badrequest.py +34 -0
  22. finance_dev/errors/errorenvelope.py +42 -0
  23. finance_dev/errors/errorresponse.py +45 -0
  24. finance_dev/errors/financedevapierror.py +31 -0
  25. finance_dev/errors/forbidden.py +34 -0
  26. finance_dev/errors/internalservererror.py +35 -0
  27. finance_dev/errors/no_response_error.py +18 -0
  28. finance_dev/errors/notfound.py +34 -0
  29. finance_dev/errors/orderhistorybadrequest.py +35 -0
  30. finance_dev/errors/predorderserrorenvelope.py +42 -0
  31. finance_dev/errors/responsevalidationerror.py +28 -0
  32. finance_dev/errors/unauthorized.py +34 -0
  33. finance_dev/estimates.py +1906 -0
  34. finance_dev/etf.py +1108 -0
  35. finance_dev/filings.py +586 -0
  36. finance_dev/financials.py +4079 -0
  37. finance_dev/history.py +477 -0
  38. finance_dev/httpclient.py +126 -0
  39. finance_dev/indices.py +2308 -0
  40. finance_dev/logos.py +692 -0
  41. finance_dev/market.py +1825 -0
  42. finance_dev/markets.py +952 -0
  43. finance_dev/models/__init__.py +4568 -0
  44. finance_dev/models/accountbalancev2.py +340 -0
  45. finance_dev/models/accountitem.py +78 -0
  46. finance_dev/models/accountposition.py +147 -0
  47. finance_dev/models/aggregatetechnicalindicatorsresponse.py +192 -0
  48. finance_dev/models/analystinsightitem.py +161 -0
  49. finance_dev/models/analystinsightsresponse.py +39 -0
  50. finance_dev/models/apperror.py +123 -0
  51. finance_dev/models/authenticationerrordetail.py +58 -0
  52. finance_dev/models/bankbranchesresponse.py +96 -0
  53. finance_dev/models/basicfinancials.py +243 -0
  54. finance_dev/models/bullbearanalysisresponse.py +150 -0
  55. finance_dev/models/cancelorderop.py +40 -0
  56. finance_dev/models/cancelordrequest_union.py +287 -0
  57. finance_dev/models/cancelordresponse.py +115 -0
  58. finance_dev/models/cashflowstatement.py +290 -0
  59. finance_dev/models/cashflowstatementsresponse.py +61 -0
  60. finance_dev/models/chartbars.py +111 -0
  61. finance_dev/models/chartconfig.py +81 -0
  62. finance_dev/models/chartresolution.py +46 -0
  63. finance_dev/models/companyesgresponse.py +408 -0
  64. finance_dev/models/companyexecutive.py +70 -0
  65. finance_dev/models/companyexecutiveresponse.py +39 -0
  66. finance_dev/models/companypeersresponse.py +38 -0
  67. finance_dev/models/companypresentationresponse.py +96 -0
  68. finance_dev/models/companyprofile.py +255 -0
  69. finance_dev/models/conferencecallsresponse.py +169 -0
  70. finance_dev/models/congressionaltradingresponse.py +138 -0
  71. finance_dev/models/covid19uscasesresponse.py +79 -0
  72. finance_dev/models/createconfigwatchlistop.py +40 -0
  73. finance_dev/models/createwatchlistrequest.py +43 -0
  74. finance_dev/models/dailymarketsummaryresponse.py +73 -0
  75. finance_dev/models/deleteconfigwatchlistbyidop.py +53 -0
  76. finance_dev/models/dividenditem.py +125 -0
  77. finance_dev/models/dividendsresponse.py +61 -0
  78. finance_dev/models/earningrelease.py +291 -0
  79. finance_dev/models/earningscallliveresponse.py +103 -0
  80. finance_dev/models/earningsqualityscoreresponse.py +140 -0
  81. finance_dev/models/earningssurprisesresponse.py +125 -0
  82. finance_dev/models/ebitdaestimatesresponse.py +176 -0
  83. finance_dev/models/ebitestimatesresponse.py +176 -0
  84. finance_dev/models/economicscalendarevent.py +160 -0
  85. finance_dev/models/economicsindicator.py +87 -0
  86. finance_dev/models/epsestimatesresponse.py +176 -0
  87. finance_dev/models/equitydetailsdto.py +569 -0
  88. finance_dev/models/errorcode.py +48 -0
  89. finance_dev/models/etblistresponse.py +43 -0
  90. finance_dev/models/etbsearchrequest.py +21 -0
  91. finance_dev/models/etbsearchresponse.py +43 -0
  92. finance_dev/models/etfcountryallocationresponse.py +113 -0
  93. finance_dev/models/etfholdingsresponse.py +163 -0
  94. finance_dev/models/etfprofileresponse.py +234 -0
  95. finance_dev/models/etfsectorallocationresponse.py +113 -0
  96. finance_dev/models/exchangecode.py +90 -0
  97. finance_dev/models/fdaadvisorycommitteecalendarresponse.py +88 -0
  98. finance_dev/models/filingsimilarityrecord.py +115 -0
  99. finance_dev/models/filingssimilarityindexdatawrapper.py +52 -0
  100. finance_dev/models/filingssimilarityindexresponse.py +42 -0
  101. finance_dev/models/financialratiosresponse.py +252 -0
  102. finance_dev/models/financialsreporteddatawrapper.py +49 -0
  103. finance_dev/models/financialsreportedresponse.py +42 -0
  104. finance_dev/models/financialsrevenuebreakdowndatawrapper.py +49 -0
  105. finance_dev/models/financialsrevenuebreakdownresponse.py +42 -0
  106. finance_dev/models/financialsstatementsdatawrapper.py +44 -0
  107. finance_dev/models/financialsstatementsresponse.py +42 -0
  108. finance_dev/models/financialstatement.py +171 -0
  109. finance_dev/models/financialstatementtype.py +14 -0
  110. finance_dev/models/getaccountbalanceop.py +53 -0
  111. finance_dev/models/getaccountpositionsop.py +53 -0
  112. finance_dev/models/getaccountsresponse.py +22 -0
  113. finance_dev/models/getaggregatetechnicalindicatorsop.py +94 -0
  114. finance_dev/models/getanalystinsightsop.py +164 -0
  115. finance_dev/models/getbankbranchesop.py +53 -0
  116. finance_dev/models/getbaseeventop.py +87 -0
  117. finance_dev/models/getbullbearanalysisop.py +91 -0
  118. finance_dev/models/getcashflowstatementsop.py +564 -0
  119. finance_dev/models/getchartconfigop.py +40 -0
  120. finance_dev/models/getcharthistoryop.py +122 -0
  121. finance_dev/models/getcharttimeop.py +39 -0
  122. finance_dev/models/getcompanyesgop.py +53 -0
  123. finance_dev/models/getcompanyexecutivesop.py +56 -0
  124. finance_dev/models/getcompanymetricsop.py +68 -0
  125. finance_dev/models/getcompanypeersop.py +53 -0
  126. finance_dev/models/getcompanypresentationop.py +56 -0
  127. finance_dev/models/getcompanyprofileop.py +86 -0
  128. finance_dev/models/getconferencecallsop.py +111 -0
  129. finance_dev/models/getconfigwatchlistbyidop.py +53 -0
  130. finance_dev/models/getconfigwatchlistsop.py +40 -0
  131. finance_dev/models/getcongressionaltradingop.py +73 -0
  132. finance_dev/models/getcovid19uscasesop.py +43 -0
  133. finance_dev/models/getdailymarketsummaryop.py +92 -0
  134. finance_dev/models/getdividendsop.py +294 -0
  135. finance_dev/models/getearningscalendarop.py +87 -0
  136. finance_dev/models/getearningscallliveop.py +91 -0
  137. finance_dev/models/getearningsqualityscoreop.py +81 -0
  138. finance_dev/models/getearningssurprisesop.py +80 -0
  139. finance_dev/models/getebitdaestimatesop.py +91 -0
  140. finance_dev/models/getebitestimatesop.py +88 -0
  141. finance_dev/models/geteconomicscalendarop.py +92 -0
  142. finance_dev/models/geteconomicscalendarresponse.py +56 -0
  143. finance_dev/models/getepsestimatesop.py +88 -0
  144. finance_dev/models/getequitydetailsop.py +56 -0
  145. finance_dev/models/getequitydetailsresponse.py +45 -0
  146. finance_dev/models/getetblistop.py +40 -0
  147. finance_dev/models/getetfcountryallocationop.py +80 -0
  148. finance_dev/models/getetfholdingsop.py +96 -0
  149. finance_dev/models/getetfprofileop.py +77 -0
  150. finance_dev/models/getetfsectorallocationop.py +80 -0
  151. finance_dev/models/geteventcontractsop.py +87 -0
  152. finance_dev/models/getfdaadvisorycommitteecalendarop.py +47 -0
  153. finance_dev/models/getfilingssimilarityindexop.py +102 -0
  154. finance_dev/models/getfinancialratiosop.py +612 -0
  155. finance_dev/models/getfinancialstatementsop.py +117 -0
  156. finance_dev/models/getfundownershipop.py +77 -0
  157. finance_dev/models/gethistoricaldataop.py +61 -0
  158. finance_dev/models/gethistoricalesgop.py +53 -0
  159. finance_dev/models/gethistorybatchop.py +74 -0
  160. finance_dev/models/gethistoryop.py +123 -0
  161. finance_dev/models/getincomestatementsop.py +564 -0
  162. finance_dev/models/getindexbarop.py +140 -0
  163. finance_dev/models/getindexbarsop.py +149 -0
  164. finance_dev/models/getindexchartbarsop.py +178 -0
  165. finance_dev/models/getindexrealtimevaluesop.py +94 -0
  166. finance_dev/models/getinflationexpectationsop.py +157 -0
  167. finance_dev/models/getinflationop.py +154 -0
  168. finance_dev/models/getinsidertransactionsop.py +90 -0
  169. finance_dev/models/getinstitutionalownershipop.py +99 -0
  170. finance_dev/models/getinstitutionalportfolioop.py +75 -0
  171. finance_dev/models/getinvestmentthemeop.py +68 -0
  172. finance_dev/models/getipocalendarop.py +63 -0
  173. finance_dev/models/getlobbyingop.py +70 -0
  174. finance_dev/models/getmarketbreadthop.py +40 -0
  175. finance_dev/models/getmarketholidaysop.py +65 -0
  176. finance_dev/models/getmarketstatusop.py +65 -0
  177. finance_dev/models/getmergersandacquisitionsop.py +113 -0
  178. finance_dev/models/getnetinflowop.py +40 -0
  179. finance_dev/models/getnewsbyidop.py +73 -0
  180. finance_dev/models/getnewsop.py +98 -0
  181. finance_dev/models/getnewssentimentop.py +53 -0
  182. finance_dev/models/getoptionchainsnapshotop.py +244 -0
  183. finance_dev/models/getoptioncontractsnapshotop.py +69 -0
  184. finance_dev/models/getoptiondetailsop.py +56 -0
  185. finance_dev/models/getoptiondetailsresponse.py +45 -0
  186. finance_dev/models/getoptionlasttradeop.py +56 -0
  187. finance_dev/models/getoptionopencloseop.py +66 -0
  188. finance_dev/models/getoptionpreviousdayop.py +56 -0
  189. finance_dev/models/getoptionquotesop.py +177 -0
  190. finance_dev/models/getoptionsactivityop.py +111 -0
  191. finance_dev/models/getoptionsetfstopvolumeop.py +70 -0
  192. finance_dev/models/getoptionsstockstopgainersop.py +70 -0
  193. finance_dev/models/getoptionsstockstopvolumeop.py +70 -0
  194. finance_dev/models/getoptionsunusualactivityop.py +100 -0
  195. finance_dev/models/getoptiontradesop.py +177 -0
  196. finance_dev/models/getordersv2response.py +66 -0
  197. finance_dev/models/getownershipdataop.py +77 -0
  198. finance_dev/models/getpositionsresponse.py +39 -0
  199. finance_dev/models/getpredictionorderop.py +88 -0
  200. finance_dev/models/getpricetargetop.py +53 -0
  201. finance_dev/models/getquotesop.py +53 -0
  202. finance_dev/models/getratingsop.py +164 -0
  203. finance_dev/models/getratingsresponse.py +39 -0
  204. finance_dev/models/getreportedfinancialsop.py +127 -0
  205. finance_dev/models/getrevenuebreakdownop.py +85 -0
  206. finance_dev/models/getrevenueestimatesop.py +91 -0
  207. finance_dev/models/getsecfilingsop.py +113 -0
  208. finance_dev/models/getsectortickersop.py +124 -0
  209. finance_dev/models/getsectorwisechangeop.py +84 -0
  210. finance_dev/models/getshortinterestop.py +334 -0
  211. finance_dev/models/getshortvolumeop.py +333 -0
  212. finance_dev/models/getsocialsentimentop.py +90 -0
  213. finance_dev/models/getspinoffsop.py +112 -0
  214. finance_dev/models/getstockaggregatesop.py +174 -0
  215. finance_dev/models/getstocklastquoteop.py +56 -0
  216. finance_dev/models/getstocklasttradeop.py +56 -0
  217. finance_dev/models/getstockopencloseop.py +90 -0
  218. finance_dev/models/getstockpreviousdayop.py +80 -0
  219. finance_dev/models/getstockquotesop.py +177 -0
  220. finance_dev/models/getstocksnapshotsop.py +82 -0
  221. finance_dev/models/getstocksplitsop.py +243 -0
  222. finance_dev/models/getstocktradesop.py +177 -0
  223. finance_dev/models/getsupplychainop.py +53 -0
  224. finance_dev/models/getsupportresistancelevelsop.py +90 -0
  225. finance_dev/models/getsymbolinfoop.py +53 -0
  226. finance_dev/models/gettechnicalindicatorop.py +172 -0
  227. finance_dev/models/gettechnicalpatternsop.py +88 -0
  228. finance_dev/models/gettenderoffersop.py +112 -0
  229. finance_dev/models/gettickhistoryop.py +104 -0
  230. finance_dev/models/gettopgainersop.py +78 -0
  231. finance_dev/models/gettoplosersop.py +78 -0
  232. finance_dev/models/gettopmostactiveop.py +78 -0
  233. finance_dev/models/gettranscriptop.py +53 -0
  234. finance_dev/models/gettreasuryyieldsop.py +157 -0
  235. finance_dev/models/getunifiedsnapshotop.py +223 -0
  236. finance_dev/models/getupgradesdowngradesop.py +91 -0
  237. finance_dev/models/getusaspendingop.py +70 -0
  238. finance_dev/models/getuseraccountsop.py +40 -0
  239. finance_dev/models/getusptopatentsop.py +70 -0
  240. finance_dev/models/getvisaapplicationsop.py +73 -0
  241. finance_dev/models/historicalesgresponse.py +439 -0
  242. finance_dev/models/httpmetadata.py +24 -0
  243. finance_dev/models/incomestatement.py +296 -0
  244. finance_dev/models/incomestatementsresponse.py +61 -0
  245. finance_dev/models/indexbarresponse.py +194 -0
  246. finance_dev/models/indexbarsresponse.py +123 -0
  247. finance_dev/models/indexchartbarsresponse.py +213 -0
  248. finance_dev/models/indexgroupsresponse.py +78 -0
  249. finance_dev/models/indexlistresponse.py +95 -0
  250. finance_dev/models/indexsearchresponse.py +93 -0
  251. finance_dev/models/indicesbygroupresponse.py +93 -0
  252. finance_dev/models/indicesidentifiertype.py +28 -0
  253. finance_dev/models/indicesrealtimeindexinfo.py +67 -0
  254. finance_dev/models/indicesrealtimeindexvalue.py +157 -0
  255. finance_dev/models/indicesrealtimevaluesitem.py +80 -0
  256. finance_dev/models/indicesrealtimevaluesresponse.py +42 -0
  257. finance_dev/models/inflationexpectationsresponse.py +140 -0
  258. finance_dev/models/inflationresponse.py +132 -0
  259. finance_dev/models/insidertransaction.py +97 -0
  260. finance_dev/models/insidertransactionsresponse.py +39 -0
  261. finance_dev/models/institutionalholding.py +77 -0
  262. finance_dev/models/institutionalownershipresponse.py +39 -0
  263. finance_dev/models/institutionalportfolioresponse.py +39 -0
  264. finance_dev/models/investmentthemeid.py +35 -0
  265. finance_dev/models/investmentthemeresponse.py +80 -0
  266. finance_dev/models/ipocalendarresponse.py +39 -0
  267. finance_dev/models/ipoitem.py +93 -0
  268. finance_dev/models/listactiveordersop.py +87 -0
  269. finance_dev/models/listcategoriesop.py +79 -0
  270. finance_dev/models/listindexgroupsop.py +40 -0
  271. finance_dev/models/listindicesbygroupop.py +58 -0
  272. finance_dev/models/listindicesop.py +91 -0
  273. finance_dev/models/listoptioncontractsop.py +66 -0
  274. finance_dev/models/listoptionexpirydatesop.py +56 -0
  275. finance_dev/models/listorderhistoryop.py +139 -0
  276. finance_dev/models/listpredictionordersop.py +134 -0
  277. finance_dev/models/listtranscriptsop.py +53 -0
  278. finance_dev/models/lobbyingresponse.py +166 -0
  279. finance_dev/models/logosearchresponse.py +152 -0
  280. finance_dev/models/logosyncresponse.py +277 -0
  281. finance_dev/models/marketbreadth.py +97 -0
  282. finance_dev/models/marketbreadthresponse.py +44 -0
  283. finance_dev/models/marketholiday.py +56 -0
  284. finance_dev/models/marketholidayresponse.py +39 -0
  285. finance_dev/models/marketstatus.py +67 -0
  286. finance_dev/models/mergersandacquisitionsresponse.py +186 -0
  287. finance_dev/models/metricseriespoint.py +43 -0
  288. finance_dev/models/netinflow.py +81 -0
  289. finance_dev/models/netinflowresponse.py +44 -0
  290. finance_dev/models/newsitem.py +102 -0
  291. finance_dev/models/newslistresponse.py +128 -0
  292. finance_dev/models/newssentimentresponse.py +176 -0
  293. finance_dev/models/newstypeenum.py +16 -0
  294. finance_dev/models/optionchainsnapshotresponse.py +64 -0
  295. finance_dev/models/optioncontractsnapshotresponse.py +64 -0
  296. finance_dev/models/optioncontractsnapshotrow.py +164 -0
  297. finance_dev/models/optioncontractsresponse.py +131 -0
  298. finance_dev/models/optiondetailsdto.py +72 -0
  299. finance_dev/models/optionexpirydatesresponse.py +53 -0
  300. finance_dev/models/optionlasttraderesponse.py +169 -0
  301. finance_dev/models/optionopencloseresponse.py +97 -0
  302. finance_dev/models/optionpreviousdayresponse.py +89 -0
  303. finance_dev/models/optionquotesresponse.py +138 -0
  304. finance_dev/models/optionsactivityresponse.py +265 -0
  305. finance_dev/models/optionsnapshotcontractdetails.py +85 -0
  306. finance_dev/models/optionsnapshotdaybar.py +107 -0
  307. finance_dev/models/optionsnapshotgreeks.py +67 -0
  308. finance_dev/models/optionsnapshotlastquote.py +116 -0
  309. finance_dev/models/optionsnapshotlasttrade.py +102 -0
  310. finance_dev/models/optionsnapshotunderlying.py +86 -0
  311. finance_dev/models/optionsscreeneritem.py +151 -0
  312. finance_dev/models/optionsunusualactivityresponse.py +62 -0
  313. finance_dev/models/optionsunusualactivitytrade.py +103 -0
  314. finance_dev/models/optiontradesresponse.py +132 -0
  315. finance_dev/models/orderrequesttimeinforceenum.py +29 -0
  316. finance_dev/models/ordersideenum.py +20 -0
  317. finance_dev/models/ordertypeenum.py +20 -0
  318. finance_dev/models/ordleg.py +162 -0
  319. finance_dev/models/ordresponse.py +202 -0
  320. finance_dev/models/ownershipdataresponse.py +39 -0
  321. finance_dev/models/ownershiprecord.py +74 -0
  322. finance_dev/models/placeorderop.py +40 -0
  323. finance_dev/models/placeordrequest_union.py +335 -0
  324. finance_dev/models/placepredictionorderop.py +114 -0
  325. finance_dev/models/predmdbaseevent.py +62 -0
  326. finance_dev/models/predmdbaseeventhit.py +53 -0
  327. finance_dev/models/predmdbaseeventsearchresult.py +46 -0
  328. finance_dev/models/predmdbaseeventwithevents.py +32 -0
  329. finance_dev/models/predmdbatchhistoryrequest.py +16 -0
  330. finance_dev/models/predmdbatchhistoryresponse.py +16 -0
  331. finance_dev/models/predmdcategory.py +48 -0
  332. finance_dev/models/predmdcontract.py +177 -0
  333. finance_dev/models/predmdcontracthit.py +157 -0
  334. finance_dev/models/predmdcontractsearchresult.py +46 -0
  335. finance_dev/models/predmdevent.py +136 -0
  336. finance_dev/models/predmdeventhit.py +73 -0
  337. finance_dev/models/predmdeventsearchresult.py +46 -0
  338. finance_dev/models/predmdeventwithcontracts.py +22 -0
  339. finance_dev/models/predmdhistoryrequest.py +59 -0
  340. finance_dev/models/predmdhistoryresponse.py +53 -0
  341. finance_dev/models/predmdtick.py +53 -0
  342. finance_dev/models/predordersapperror.py +78 -0
  343. finance_dev/models/predordersorder.py +267 -0
  344. finance_dev/models/predordersorderdetail.py +26 -0
  345. finance_dev/models/predordersorderpage.py +45 -0
  346. finance_dev/models/predordersorderreport.py +88 -0
  347. finance_dev/models/predordersplaceorderrequest.py +159 -0
  348. finance_dev/models/previeworderop.py +40 -0
  349. finance_dev/models/previeworderresponse.py +127 -0
  350. finance_dev/models/pricetargetresponse.py +89 -0
  351. finance_dev/models/quotedata.py +49 -0
  352. finance_dev/models/quotesresponse.py +62 -0
  353. finance_dev/models/quotevalues.py +114 -0
  354. finance_dev/models/rating.py +193 -0
  355. finance_dev/models/ratingsaccuracy.py +242 -0
  356. finance_dev/models/replaceconfigwatchlistsop.py +40 -0
  357. finance_dev/models/replaceorderop.py +40 -0
  358. finance_dev/models/replaceordrequest_union.py +367 -0
  359. finance_dev/models/replaceordresponse.py +144 -0
  360. finance_dev/models/reportedbsitem.py +53 -0
  361. finance_dev/models/reportedfiling.py +110 -0
  362. finance_dev/models/reportedreport.py +39 -0
  363. finance_dev/models/reportingfrequency.py +16 -0
  364. finance_dev/models/revenuebreakdownaxis.py +52 -0
  365. finance_dev/models/revenuebreakdowndatapoint.py +58 -0
  366. finance_dev/models/revenuebreakdownentry.py +51 -0
  367. finance_dev/models/revenuebreakdowninner.py +75 -0
  368. finance_dev/models/revenueestimatesresponse.py +176 -0
  369. finance_dev/models/screenclause.py +70 -0
  370. finance_dev/models/screengroup.py +75 -0
  371. finance_dev/models/searchetbsymbolsop.py +40 -0
  372. finance_dev/models/searchindicesop.py +55 -0
  373. finance_dev/models/searchlogosop.py +158 -0
  374. finance_dev/models/searchmarketsymbolsop.py +80 -0
  375. finance_dev/models/searchop.py +232 -0
  376. finance_dev/models/searchsymbolitem.py +76 -0
  377. finance_dev/models/searchsymbolresponseitem.py +71 -0
  378. finance_dev/models/searchsymbolsop.py +77 -0
  379. finance_dev/models/secfiling.py +91 -0
  380. finance_dev/models/secfilingsresponse.py +39 -0
  381. finance_dev/models/sectoravgchange.py +50 -0
  382. finance_dev/models/security.py +59 -0
  383. finance_dev/models/securitytypeenum.py +16 -0
  384. finance_dev/models/shortinterestresponse.py +126 -0
  385. finance_dev/models/shortvolumeresponse.py +198 -0
  386. finance_dev/models/socialsentimentresponse.py +124 -0
  387. finance_dev/models/sortorderenum.py +13 -0
  388. finance_dev/models/spinoffsresponse.py +136 -0
  389. finance_dev/models/stockaggregatesresponse.py +92 -0
  390. finance_dev/models/stocklastquoteresponse.py +175 -0
  391. finance_dev/models/stocklasttraderesponse.py +169 -0
  392. finance_dev/models/stockohlcbar.py +85 -0
  393. finance_dev/models/stockopencloseresponse.py +109 -0
  394. finance_dev/models/stockpreviousdayresponse.py +86 -0
  395. finance_dev/models/stockquotesresponse.py +170 -0
  396. finance_dev/models/stockscreenerop.py +144 -0
  397. finance_dev/models/stockscreenerrequest.py +131 -0
  398. finance_dev/models/stockscreenerresponse.py +197 -0
  399. finance_dev/models/stocksnapshotsresponse.py +454 -0
  400. finance_dev/models/stocksplitsresponse.py +144 -0
  401. finance_dev/models/stocktradesresponse.py +164 -0
  402. finance_dev/models/supplychainresponse.py +158 -0
  403. finance_dev/models/supportresistancelevelsresponse.py +68 -0
  404. finance_dev/models/symboldetails.py +119 -0
  405. finance_dev/models/symbolerror.py +43 -0
  406. finance_dev/models/symbolinfo.py +183 -0
  407. finance_dev/models/synclogosop.py +146 -0
  408. finance_dev/models/technicalindicatorresponse.py +43 -0
  409. finance_dev/models/technicalindicatortype.py +21 -0
  410. finance_dev/models/technicalpatternsresponse.py +249 -0
  411. finance_dev/models/tenderofferidentifiertype.py +26 -0
  412. finance_dev/models/tenderoffersresponse.py +548 -0
  413. finance_dev/models/tickchartbars.py +104 -0
  414. finance_dev/models/tickresolution.py +20 -0
  415. finance_dev/models/timeinforceenum.py +26 -0
  416. finance_dev/models/tradeorderlegv2.py +164 -0
  417. finance_dev/models/tradeorderv2.py +434 -0
  418. finance_dev/models/transcriptresponse.py +162 -0
  419. finance_dev/models/transcriptsresponse.py +89 -0
  420. finance_dev/models/treasuryyieldsresponse.py +160 -0
  421. finance_dev/models/unifiedsnapshotresponse.py +308 -0
  422. finance_dev/models/updateconfigwatchlistbyidop.py +65 -0
  423. finance_dev/models/updatewatchlistrequest_union.py +134 -0
  424. finance_dev/models/upgradesdowngradesresponse.py +98 -0
  425. finance_dev/models/usaspendingresponse.py +222 -0
  426. finance_dev/models/usptopatentsresponse.py +134 -0
  427. finance_dev/models/visaapplicationsresponse.py +228 -0
  428. finance_dev/models/watchlist.py +68 -0
  429. finance_dev/models/watchlistrequest.py +43 -0
  430. finance_dev/models/watchlistresponse.py +44 -0
  431. finance_dev/news_sdk.py +829 -0
  432. finance_dev/options.py +3443 -0
  433. finance_dev/orders.py +1907 -0
  434. finance_dev/ownership.py +1386 -0
  435. finance_dev/predictions.py +29 -0
  436. finance_dev/predictions_orders.py +852 -0
  437. finance_dev/py.typed +1 -0
  438. finance_dev/sdk.py +347 -0
  439. finance_dev/sdkconfiguration.py +50 -0
  440. finance_dev/signals.py +338 -0
  441. finance_dev/stocks.py +3131 -0
  442. finance_dev/technicalanalysis_sdk.py +1137 -0
  443. finance_dev/types/__init__.py +25 -0
  444. finance_dev/types/base64fileinput.py +44 -0
  445. finance_dev/types/basemodel.py +78 -0
  446. finance_dev/utils/__init__.py +181 -0
  447. finance_dev/utils/annotations.py +80 -0
  448. finance_dev/utils/datetimes.py +42 -0
  449. finance_dev/utils/dynamic_imports.py +55 -0
  450. finance_dev/utils/enums.py +135 -0
  451. finance_dev/utils/eventstreaming.py +327 -0
  452. finance_dev/utils/forms.py +240 -0
  453. finance_dev/utils/headers.py +137 -0
  454. finance_dev/utils/logger.py +23 -0
  455. finance_dev/utils/metadata.py +120 -0
  456. finance_dev/utils/queryparams.py +218 -0
  457. finance_dev/utils/requestbodies.py +68 -0
  458. finance_dev/utils/retries.py +373 -0
  459. finance_dev/utils/security.py +199 -0
  460. finance_dev/utils/serializers.py +327 -0
  461. finance_dev/utils/unmarshal_json_response.py +39 -0
  462. finance_dev/utils/url.py +155 -0
  463. finance_dev/utils/values.py +143 -0
  464. finance_dev/watchlist_sdk.py +1583 -0
  465. finance_dev/websocket/__init__.py +57 -0
  466. finance_dev/websocket/account.py +5 -0
  467. finance_dev/websocket/auth.py +124 -0
  468. finance_dev/websocket/chart.py +5 -0
  469. finance_dev/websocket/codec.py +66 -0
  470. finance_dev/websocket/config.py +52 -0
  471. finance_dev/websocket/errors.py +54 -0
  472. finance_dev/websocket/market.py +5 -0
  473. finance_dev/websocket/models/__init__.py +52 -0
  474. finance_dev/websocket/models/account.py +60 -0
  475. finance_dev/websocket/models/chart.py +44 -0
  476. finance_dev/websocket/models/common.py +85 -0
  477. finance_dev/websocket/models/market.py +113 -0
  478. finance_dev/websocket/resources.py +327 -0
  479. finance_dev/websocket/sdk.py +13 -0
  480. finance_dev/websocket/transport/async_connection.py +493 -0
  481. finance_dev/websocket/transport/base.py +78 -0
  482. finance_dev/websocket/transport/sync_connection.py +470 -0
  483. finance_dev-0.9.0.dist-info/METADATA +913 -0
  484. finance_dev-0.9.0.dist-info/RECORD +486 -0
  485. finance_dev-0.9.0.dist-info/WHEEL +5 -0
  486. finance_dev-0.9.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1795 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: a292b510ebce
3
+
4
+ from .basesdk import BaseSDK
5
+ from datetime import date
6
+ from finance_dev import errors, models, utils
7
+ from finance_dev._hooks import HookContext
8
+ from finance_dev.types import OptionalNullable, UNSET
9
+ from finance_dev.utils.unmarshal_json_response import unmarshal_json_response
10
+ from jsonpath import JSONPath
11
+ from typing import Any, Dict, List, Mapping, Optional, Union
12
+
13
+
14
+ class CorporateActions(BaseSDK):
15
+ def get_dividends(
16
+ self,
17
+ *,
18
+ ticker: Optional[str] = None,
19
+ tickers_any_of: Optional[str] = None,
20
+ ticker_from: Optional[str] = None,
21
+ ticker_after: Optional[str] = None,
22
+ ticker_to: Optional[str] = None,
23
+ ticker_before: Optional[str] = None,
24
+ ex_dividend_date: Optional[date] = None,
25
+ ex_dividend_date_from: Optional[date] = None,
26
+ ex_dividend_date_after: Optional[date] = None,
27
+ ex_dividend_date_to: Optional[date] = None,
28
+ ex_dividend_date_before: Optional[date] = None,
29
+ frequency: Optional[int] = None,
30
+ frequency_min: Optional[int] = None,
31
+ frequency_above: Optional[int] = None,
32
+ frequency_max: Optional[int] = None,
33
+ frequency_below: Optional[int] = None,
34
+ distribution_type: Optional[models.DistributionType] = None,
35
+ distribution_types: Optional[str] = None,
36
+ limit: Optional[int] = None,
37
+ sort: Optional[str] = None,
38
+ next: Optional[str] = None,
39
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
40
+ server_url: Optional[str] = None,
41
+ url_override: Optional[str] = None,
42
+ timeout_ms: Optional[int] = None,
43
+ http_headers: Optional[Mapping[str, str]] = None,
44
+ ) -> Optional[models.GetDividendsResponse]:
45
+ r"""Get Dividend History
46
+
47
+ Retrieve historical dividend payments including declaration dates, ex-dividend dates, payment dates, and dividend amounts per share. `ticker` accepts a single symbol only. Use `tickersAnyOf` for multiple symbols. If `ticker` contains multiple comma-separated values, the API returns 400: \"Multiple tickers are not supported. Please provide a single ticker.\" If both `ticker` and `tickersAnyOf` are set, the API returns 400: \"Cannot specify both ticker and tickersAnyOf. Use ticker for a single symbol or tickersAnyOf for multiple.\"
48
+
49
+ If set, this operation will use `client_id` from the global security.
50
+
51
+ :param ticker: Single ticker symbol only, such as AAPL. Do not send a comma-separated list here; if you need multiple symbols, use `tickersAnyOf` instead.
52
+ :param tickers_any_of: Comma-separated list of ticker symbols.
53
+ :param ticker_from: Filter tickers >= this value (inclusive)
54
+ :param ticker_after: Filter tickers > this value (exclusive)
55
+ :param ticker_to: Filter tickers <= this value (inclusive)
56
+ :param ticker_before: Filter tickers < this value (exclusive)
57
+ :param ex_dividend_date: Exact ex-dividend date in YYYY-MM-DD format
58
+ :param ex_dividend_date_from: Ex-dividend start-date filter. Returns dividends with ex-dividend dates on or after this date.
59
+ :param ex_dividend_date_after: Ex-dividend after-date filter. Returns dividends after this date, excluding the date itself.
60
+ :param ex_dividend_date_to: Ex-dividend end-date filter. Returns dividends with ex-dividend dates on or before this date.
61
+ :param ex_dividend_date_before: Ex-dividend before-date filter. Returns dividends before this date, excluding the date itself.
62
+ :param frequency: Exact frequency (0=irregular, 1=annual, 4=quarterly, 12=monthly)
63
+ :param frequency_min: Dividend frequency lower-bound filter. Returns records with frequency greater than or equal to this value.
64
+ :param frequency_above: Dividend frequency lower-bound filter. Returns records above this value, excluding the value itself.
65
+ :param frequency_max: Dividend frequency upper-bound filter. Returns records with frequency less than or equal to this value.
66
+ :param frequency_below: Dividend frequency upper-bound filter. Returns records below this value, excluding the value itself.
67
+ :param distribution_type: Exact type: recurring, special, supplemental, irregular, unknown
68
+ :param distribution_types: Comma-separated list of distribution types
69
+ :param limit: Maximum number of results to return. Use smaller values for UI pages and larger values for exports within API limits. (1-5000)
70
+ :param sort: A comma-separated list of sort columns. For each column, append `.asc` or `.desc` to specify direction. Defaults to `ticker.asc` when not specified. Examples: `ticker.asc`, `ex_dividend_date.desc`, or `ticker.asc,ex_dividend_date.desc`.
71
+ :param next: Pagination cursor from the previous response. Omit it on the first request, then send the returned cursor to fetch the next page.
72
+ :param retries: Override the default retry configuration for this method
73
+ :param server_url: Override the default server URL for this method
74
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
75
+ :param http_headers: Additional headers to set or replace on requests.
76
+ """
77
+ base_url = None
78
+ url_variables = None
79
+ if timeout_ms is None:
80
+ timeout_ms = self.sdk_configuration.timeout_ms
81
+
82
+ if timeout_ms is None:
83
+ timeout_ms = 30000
84
+
85
+ if server_url is not None:
86
+ base_url = server_url
87
+ else:
88
+ base_url = self._get_url(base_url, url_variables)
89
+
90
+ request = models.GetDividendsRequest(
91
+ ticker=ticker,
92
+ tickers_any_of=tickers_any_of,
93
+ ticker_from=ticker_from,
94
+ ticker_after=ticker_after,
95
+ ticker_to=ticker_to,
96
+ ticker_before=ticker_before,
97
+ ex_dividend_date=ex_dividend_date,
98
+ ex_dividend_date_from=ex_dividend_date_from,
99
+ ex_dividend_date_after=ex_dividend_date_after,
100
+ ex_dividend_date_to=ex_dividend_date_to,
101
+ ex_dividend_date_before=ex_dividend_date_before,
102
+ frequency=frequency,
103
+ frequency_min=frequency_min,
104
+ frequency_above=frequency_above,
105
+ frequency_max=frequency_max,
106
+ frequency_below=frequency_below,
107
+ distribution_type=distribution_type,
108
+ distribution_types=distribution_types,
109
+ limit=limit,
110
+ sort=sort,
111
+ next=next,
112
+ )
113
+
114
+ req = self._build_request(
115
+ method="GET",
116
+ path="/v1/corporate-actions/dividends",
117
+ base_url=base_url,
118
+ url_variables=url_variables,
119
+ url_override=url_override,
120
+ request=request,
121
+ request_body_required=False,
122
+ request_has_path_params=False,
123
+ request_has_query_params=True,
124
+ user_agent_header="user-agent",
125
+ accept_header_value="application/json",
126
+ http_headers=http_headers,
127
+ security=self.sdk_configuration.security,
128
+ allow_empty_value=None,
129
+ allowed_fields=["client_id"],
130
+ timeout_ms=timeout_ms,
131
+ )
132
+
133
+ if retries == UNSET:
134
+ if self.sdk_configuration.retry_config is not UNSET:
135
+ retries = self.sdk_configuration.retry_config
136
+ else:
137
+ retries = utils.RetryConfig(
138
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
139
+ )
140
+
141
+ retry_config = None
142
+ if isinstance(retries, utils.RetryConfig):
143
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
144
+
145
+ http_res = self.do_request(
146
+ hook_ctx=HookContext(
147
+ config=self.sdk_configuration,
148
+ base_url=base_url or "",
149
+ operation_id="getDividends",
150
+ oauth2_scopes=["market:supplemental"],
151
+ security_source=self.sdk_configuration.security,
152
+ tags=["Corporate Actions"],
153
+ extensions=None,
154
+ ),
155
+ request=req,
156
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
157
+ retry_config=retry_config,
158
+ )
159
+
160
+ def next_func() -> Optional[models.GetDividendsResponse]:
161
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
162
+ next_url_match = JSONPath("$.nextUrl").parse(body)
163
+ if len(next_url_match) == 0:
164
+ return None
165
+
166
+ next_url = next_url_match[0]
167
+ if not next_url:
168
+ return None
169
+
170
+ if next_url[0] == "/":
171
+ url = self._get_url(base_url, url_variables)
172
+ next_url = url + next_url
173
+
174
+ return self.get_dividends(
175
+ ticker=ticker,
176
+ tickers_any_of=tickers_any_of,
177
+ ticker_from=ticker_from,
178
+ ticker_after=ticker_after,
179
+ ticker_to=ticker_to,
180
+ ticker_before=ticker_before,
181
+ ex_dividend_date=ex_dividend_date,
182
+ ex_dividend_date_from=ex_dividend_date_from,
183
+ ex_dividend_date_after=ex_dividend_date_after,
184
+ ex_dividend_date_to=ex_dividend_date_to,
185
+ ex_dividend_date_before=ex_dividend_date_before,
186
+ frequency=frequency,
187
+ frequency_min=frequency_min,
188
+ frequency_above=frequency_above,
189
+ frequency_max=frequency_max,
190
+ frequency_below=frequency_below,
191
+ distribution_type=distribution_type,
192
+ distribution_types=distribution_types,
193
+ limit=limit,
194
+ sort=sort,
195
+ next=next,
196
+ retries=retries,
197
+ server_url=server_url,
198
+ timeout_ms=timeout_ms,
199
+ http_headers=http_headers,
200
+ url_override=next_url,
201
+ )
202
+
203
+ response_data: Any = None
204
+ if utils.match_response(http_res, "200", "application/json"):
205
+ return models.GetDividendsResponse(
206
+ dividends_response=unmarshal_json_response(
207
+ Optional[models.DividendsResponse], http_res
208
+ ),
209
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
210
+ next=next_func,
211
+ )
212
+ if utils.match_response(http_res, "400", "application/json"):
213
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
214
+ response_data.http_meta = models.HTTPMetadata(
215
+ request=req, response=http_res
216
+ )
217
+ raise errors.BadRequest(response_data, http_res)
218
+ if utils.match_response(http_res, "401", "application/json"):
219
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
220
+ response_data.http_meta = models.HTTPMetadata(
221
+ request=req, response=http_res
222
+ )
223
+ raise errors.Unauthorized(response_data, http_res)
224
+ if utils.match_response(http_res, "403", "application/json"):
225
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
226
+ response_data.http_meta = models.HTTPMetadata(
227
+ request=req, response=http_res
228
+ )
229
+ raise errors.Forbidden(response_data, http_res)
230
+ if utils.match_response(http_res, "404", "application/json"):
231
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
232
+ response_data.http_meta = models.HTTPMetadata(
233
+ request=req, response=http_res
234
+ )
235
+ raise errors.NotFound(response_data, http_res)
236
+ if utils.match_response(http_res, "500", "application/json"):
237
+ response_data = unmarshal_json_response(
238
+ errors.InternalServerErrorUnion, http_res
239
+ )
240
+ response_data.http_meta = models.HTTPMetadata(
241
+ request=req, response=http_res
242
+ )
243
+ raise errors.InternalServerError(response_data, http_res)
244
+ if utils.match_response(http_res, "4XX", "*"):
245
+ http_res_text = utils.stream_to_text(http_res)
246
+ raise errors.APIError("API error occurred", http_res, http_res_text)
247
+ if utils.match_response(http_res, "5XX", "*"):
248
+ http_res_text = utils.stream_to_text(http_res)
249
+ raise errors.APIError("API error occurred", http_res, http_res_text)
250
+
251
+ raise errors.APIError("Unexpected response received", http_res)
252
+
253
+ async def get_dividends_async(
254
+ self,
255
+ *,
256
+ ticker: Optional[str] = None,
257
+ tickers_any_of: Optional[str] = None,
258
+ ticker_from: Optional[str] = None,
259
+ ticker_after: Optional[str] = None,
260
+ ticker_to: Optional[str] = None,
261
+ ticker_before: Optional[str] = None,
262
+ ex_dividend_date: Optional[date] = None,
263
+ ex_dividend_date_from: Optional[date] = None,
264
+ ex_dividend_date_after: Optional[date] = None,
265
+ ex_dividend_date_to: Optional[date] = None,
266
+ ex_dividend_date_before: Optional[date] = None,
267
+ frequency: Optional[int] = None,
268
+ frequency_min: Optional[int] = None,
269
+ frequency_above: Optional[int] = None,
270
+ frequency_max: Optional[int] = None,
271
+ frequency_below: Optional[int] = None,
272
+ distribution_type: Optional[models.DistributionType] = None,
273
+ distribution_types: Optional[str] = None,
274
+ limit: Optional[int] = None,
275
+ sort: Optional[str] = None,
276
+ next: Optional[str] = None,
277
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
278
+ server_url: Optional[str] = None,
279
+ url_override: Optional[str] = None,
280
+ timeout_ms: Optional[int] = None,
281
+ http_headers: Optional[Mapping[str, str]] = None,
282
+ ) -> Optional[models.GetDividendsResponse]:
283
+ r"""Get Dividend History
284
+
285
+ Retrieve historical dividend payments including declaration dates, ex-dividend dates, payment dates, and dividend amounts per share. `ticker` accepts a single symbol only. Use `tickersAnyOf` for multiple symbols. If `ticker` contains multiple comma-separated values, the API returns 400: \"Multiple tickers are not supported. Please provide a single ticker.\" If both `ticker` and `tickersAnyOf` are set, the API returns 400: \"Cannot specify both ticker and tickersAnyOf. Use ticker for a single symbol or tickersAnyOf for multiple.\"
286
+
287
+ If set, this operation will use `client_id` from the global security.
288
+
289
+ :param ticker: Single ticker symbol only, such as AAPL. Do not send a comma-separated list here; if you need multiple symbols, use `tickersAnyOf` instead.
290
+ :param tickers_any_of: Comma-separated list of ticker symbols.
291
+ :param ticker_from: Filter tickers >= this value (inclusive)
292
+ :param ticker_after: Filter tickers > this value (exclusive)
293
+ :param ticker_to: Filter tickers <= this value (inclusive)
294
+ :param ticker_before: Filter tickers < this value (exclusive)
295
+ :param ex_dividend_date: Exact ex-dividend date in YYYY-MM-DD format
296
+ :param ex_dividend_date_from: Ex-dividend start-date filter. Returns dividends with ex-dividend dates on or after this date.
297
+ :param ex_dividend_date_after: Ex-dividend after-date filter. Returns dividends after this date, excluding the date itself.
298
+ :param ex_dividend_date_to: Ex-dividend end-date filter. Returns dividends with ex-dividend dates on or before this date.
299
+ :param ex_dividend_date_before: Ex-dividend before-date filter. Returns dividends before this date, excluding the date itself.
300
+ :param frequency: Exact frequency (0=irregular, 1=annual, 4=quarterly, 12=monthly)
301
+ :param frequency_min: Dividend frequency lower-bound filter. Returns records with frequency greater than or equal to this value.
302
+ :param frequency_above: Dividend frequency lower-bound filter. Returns records above this value, excluding the value itself.
303
+ :param frequency_max: Dividend frequency upper-bound filter. Returns records with frequency less than or equal to this value.
304
+ :param frequency_below: Dividend frequency upper-bound filter. Returns records below this value, excluding the value itself.
305
+ :param distribution_type: Exact type: recurring, special, supplemental, irregular, unknown
306
+ :param distribution_types: Comma-separated list of distribution types
307
+ :param limit: Maximum number of results to return. Use smaller values for UI pages and larger values for exports within API limits. (1-5000)
308
+ :param sort: A comma-separated list of sort columns. For each column, append `.asc` or `.desc` to specify direction. Defaults to `ticker.asc` when not specified. Examples: `ticker.asc`, `ex_dividend_date.desc`, or `ticker.asc,ex_dividend_date.desc`.
309
+ :param next: Pagination cursor from the previous response. Omit it on the first request, then send the returned cursor to fetch the next page.
310
+ :param retries: Override the default retry configuration for this method
311
+ :param server_url: Override the default server URL for this method
312
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
313
+ :param http_headers: Additional headers to set or replace on requests.
314
+ """
315
+ base_url = None
316
+ url_variables = None
317
+ if timeout_ms is None:
318
+ timeout_ms = self.sdk_configuration.timeout_ms
319
+
320
+ if timeout_ms is None:
321
+ timeout_ms = 30000
322
+
323
+ if server_url is not None:
324
+ base_url = server_url
325
+ else:
326
+ base_url = self._get_url(base_url, url_variables)
327
+
328
+ request = models.GetDividendsRequest(
329
+ ticker=ticker,
330
+ tickers_any_of=tickers_any_of,
331
+ ticker_from=ticker_from,
332
+ ticker_after=ticker_after,
333
+ ticker_to=ticker_to,
334
+ ticker_before=ticker_before,
335
+ ex_dividend_date=ex_dividend_date,
336
+ ex_dividend_date_from=ex_dividend_date_from,
337
+ ex_dividend_date_after=ex_dividend_date_after,
338
+ ex_dividend_date_to=ex_dividend_date_to,
339
+ ex_dividend_date_before=ex_dividend_date_before,
340
+ frequency=frequency,
341
+ frequency_min=frequency_min,
342
+ frequency_above=frequency_above,
343
+ frequency_max=frequency_max,
344
+ frequency_below=frequency_below,
345
+ distribution_type=distribution_type,
346
+ distribution_types=distribution_types,
347
+ limit=limit,
348
+ sort=sort,
349
+ next=next,
350
+ )
351
+
352
+ req = self._build_request_async(
353
+ method="GET",
354
+ path="/v1/corporate-actions/dividends",
355
+ base_url=base_url,
356
+ url_variables=url_variables,
357
+ url_override=url_override,
358
+ request=request,
359
+ request_body_required=False,
360
+ request_has_path_params=False,
361
+ request_has_query_params=True,
362
+ user_agent_header="user-agent",
363
+ accept_header_value="application/json",
364
+ http_headers=http_headers,
365
+ security=self.sdk_configuration.security,
366
+ allow_empty_value=None,
367
+ allowed_fields=["client_id"],
368
+ timeout_ms=timeout_ms,
369
+ )
370
+
371
+ if retries == UNSET:
372
+ if self.sdk_configuration.retry_config is not UNSET:
373
+ retries = self.sdk_configuration.retry_config
374
+ else:
375
+ retries = utils.RetryConfig(
376
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
377
+ )
378
+
379
+ retry_config = None
380
+ if isinstance(retries, utils.RetryConfig):
381
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
382
+
383
+ http_res = await self.do_request_async(
384
+ hook_ctx=HookContext(
385
+ config=self.sdk_configuration,
386
+ base_url=base_url or "",
387
+ operation_id="getDividends",
388
+ oauth2_scopes=["market:supplemental"],
389
+ security_source=self.sdk_configuration.security,
390
+ tags=["Corporate Actions"],
391
+ extensions=None,
392
+ ),
393
+ request=req,
394
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
395
+ retry_config=retry_config,
396
+ )
397
+
398
+ def next_func() -> Optional[models.GetDividendsResponse]:
399
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
400
+ next_url_match = JSONPath("$.nextUrl").parse(body)
401
+ if len(next_url_match) == 0:
402
+ return None
403
+
404
+ next_url = next_url_match[0]
405
+ if not next_url:
406
+ return None
407
+
408
+ if next_url[0] == "/":
409
+ url = self._get_url(base_url, url_variables)
410
+ next_url = url + next_url
411
+
412
+ return self.get_dividends(
413
+ ticker=ticker,
414
+ tickers_any_of=tickers_any_of,
415
+ ticker_from=ticker_from,
416
+ ticker_after=ticker_after,
417
+ ticker_to=ticker_to,
418
+ ticker_before=ticker_before,
419
+ ex_dividend_date=ex_dividend_date,
420
+ ex_dividend_date_from=ex_dividend_date_from,
421
+ ex_dividend_date_after=ex_dividend_date_after,
422
+ ex_dividend_date_to=ex_dividend_date_to,
423
+ ex_dividend_date_before=ex_dividend_date_before,
424
+ frequency=frequency,
425
+ frequency_min=frequency_min,
426
+ frequency_above=frequency_above,
427
+ frequency_max=frequency_max,
428
+ frequency_below=frequency_below,
429
+ distribution_type=distribution_type,
430
+ distribution_types=distribution_types,
431
+ limit=limit,
432
+ sort=sort,
433
+ next=next,
434
+ retries=retries,
435
+ server_url=server_url,
436
+ timeout_ms=timeout_ms,
437
+ http_headers=http_headers,
438
+ url_override=next_url,
439
+ )
440
+
441
+ response_data: Any = None
442
+ if utils.match_response(http_res, "200", "application/json"):
443
+ return models.GetDividendsResponse(
444
+ dividends_response=unmarshal_json_response(
445
+ Optional[models.DividendsResponse], http_res
446
+ ),
447
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
448
+ next=next_func,
449
+ )
450
+ if utils.match_response(http_res, "400", "application/json"):
451
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
452
+ response_data.http_meta = models.HTTPMetadata(
453
+ request=req, response=http_res
454
+ )
455
+ raise errors.BadRequest(response_data, http_res)
456
+ if utils.match_response(http_res, "401", "application/json"):
457
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
458
+ response_data.http_meta = models.HTTPMetadata(
459
+ request=req, response=http_res
460
+ )
461
+ raise errors.Unauthorized(response_data, http_res)
462
+ if utils.match_response(http_res, "403", "application/json"):
463
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
464
+ response_data.http_meta = models.HTTPMetadata(
465
+ request=req, response=http_res
466
+ )
467
+ raise errors.Forbidden(response_data, http_res)
468
+ if utils.match_response(http_res, "404", "application/json"):
469
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
470
+ response_data.http_meta = models.HTTPMetadata(
471
+ request=req, response=http_res
472
+ )
473
+ raise errors.NotFound(response_data, http_res)
474
+ if utils.match_response(http_res, "500", "application/json"):
475
+ response_data = unmarshal_json_response(
476
+ errors.InternalServerErrorUnion, http_res
477
+ )
478
+ response_data.http_meta = models.HTTPMetadata(
479
+ request=req, response=http_res
480
+ )
481
+ raise errors.InternalServerError(response_data, http_res)
482
+ if utils.match_response(http_res, "4XX", "*"):
483
+ http_res_text = await utils.stream_to_text_async(http_res)
484
+ raise errors.APIError("API error occurred", http_res, http_res_text)
485
+ if utils.match_response(http_res, "5XX", "*"):
486
+ http_res_text = await utils.stream_to_text_async(http_res)
487
+ raise errors.APIError("API error occurred", http_res, http_res_text)
488
+
489
+ raise errors.APIError("Unexpected response received", http_res)
490
+
491
+ def get_ipo_calendar(
492
+ self,
493
+ *,
494
+ from_: date,
495
+ to: date,
496
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
497
+ server_url: Optional[str] = None,
498
+ timeout_ms: Optional[int] = None,
499
+ http_headers: Optional[Mapping[str, str]] = None,
500
+ ) -> models.GetIpoCalendarResponse:
501
+ r"""Get IPO Calendar
502
+
503
+ Retrieve upcoming and recent initial public offerings (IPOs) including offering dates, price ranges, share counts, and underwriters.
504
+
505
+ If set, this operation will use `client_id` from the global security.
506
+
507
+ :param from_: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
508
+ :param to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
509
+ :param retries: Override the default retry configuration for this method
510
+ :param server_url: Override the default server URL for this method
511
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
512
+ :param http_headers: Additional headers to set or replace on requests.
513
+ """
514
+ base_url = None
515
+ url_variables = None
516
+ if timeout_ms is None:
517
+ timeout_ms = self.sdk_configuration.timeout_ms
518
+
519
+ if timeout_ms is None:
520
+ timeout_ms = 30000
521
+
522
+ if server_url is not None:
523
+ base_url = server_url
524
+ else:
525
+ base_url = self._get_url(base_url, url_variables)
526
+
527
+ request = models.GetIpoCalendarRequest(
528
+ from_=from_,
529
+ to=to,
530
+ )
531
+
532
+ req = self._build_request(
533
+ method="GET",
534
+ path="/v1/corporate-actions/ipo-calendar",
535
+ base_url=base_url,
536
+ url_variables=url_variables,
537
+ request=request,
538
+ request_body_required=False,
539
+ request_has_path_params=False,
540
+ request_has_query_params=True,
541
+ user_agent_header="user-agent",
542
+ accept_header_value="application/json",
543
+ http_headers=http_headers,
544
+ security=self.sdk_configuration.security,
545
+ allow_empty_value=None,
546
+ allowed_fields=["client_id"],
547
+ timeout_ms=timeout_ms,
548
+ )
549
+
550
+ if retries == UNSET:
551
+ if self.sdk_configuration.retry_config is not UNSET:
552
+ retries = self.sdk_configuration.retry_config
553
+ else:
554
+ retries = utils.RetryConfig(
555
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
556
+ )
557
+
558
+ retry_config = None
559
+ if isinstance(retries, utils.RetryConfig):
560
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
561
+
562
+ http_res = self.do_request(
563
+ hook_ctx=HookContext(
564
+ config=self.sdk_configuration,
565
+ base_url=base_url or "",
566
+ operation_id="getIpoCalendar",
567
+ oauth2_scopes=["market:supplemental"],
568
+ security_source=self.sdk_configuration.security,
569
+ tags=["Corporate Actions"],
570
+ extensions=None,
571
+ ),
572
+ request=req,
573
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
574
+ retry_config=retry_config,
575
+ )
576
+
577
+ response_data: Any = None
578
+ if utils.match_response(http_res, "200", "application/json"):
579
+ return models.GetIpoCalendarResponse(
580
+ ipo_calendar_response=unmarshal_json_response(
581
+ Optional[models.IpoCalendarResponse], http_res
582
+ ),
583
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
584
+ )
585
+ if utils.match_response(http_res, "400", "application/json"):
586
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
587
+ response_data.http_meta = models.HTTPMetadata(
588
+ request=req, response=http_res
589
+ )
590
+ raise errors.BadRequest(response_data, http_res)
591
+ if utils.match_response(http_res, "401", "application/json"):
592
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
593
+ response_data.http_meta = models.HTTPMetadata(
594
+ request=req, response=http_res
595
+ )
596
+ raise errors.Unauthorized(response_data, http_res)
597
+ if utils.match_response(http_res, "403", "application/json"):
598
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
599
+ response_data.http_meta = models.HTTPMetadata(
600
+ request=req, response=http_res
601
+ )
602
+ raise errors.Forbidden(response_data, http_res)
603
+ if utils.match_response(http_res, "404", "application/json"):
604
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
605
+ response_data.http_meta = models.HTTPMetadata(
606
+ request=req, response=http_res
607
+ )
608
+ raise errors.NotFound(response_data, http_res)
609
+ if utils.match_response(http_res, "500", "application/json"):
610
+ response_data = unmarshal_json_response(
611
+ errors.InternalServerErrorUnion, http_res
612
+ )
613
+ response_data.http_meta = models.HTTPMetadata(
614
+ request=req, response=http_res
615
+ )
616
+ raise errors.InternalServerError(response_data, http_res)
617
+ if utils.match_response(http_res, "4XX", "*"):
618
+ http_res_text = utils.stream_to_text(http_res)
619
+ raise errors.APIError("API error occurred", http_res, http_res_text)
620
+ if utils.match_response(http_res, "5XX", "*"):
621
+ http_res_text = utils.stream_to_text(http_res)
622
+ raise errors.APIError("API error occurred", http_res, http_res_text)
623
+
624
+ raise errors.APIError("Unexpected response received", http_res)
625
+
626
+ async def get_ipo_calendar_async(
627
+ self,
628
+ *,
629
+ from_: date,
630
+ to: date,
631
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
632
+ server_url: Optional[str] = None,
633
+ timeout_ms: Optional[int] = None,
634
+ http_headers: Optional[Mapping[str, str]] = None,
635
+ ) -> models.GetIpoCalendarResponse:
636
+ r"""Get IPO Calendar
637
+
638
+ Retrieve upcoming and recent initial public offerings (IPOs) including offering dates, price ranges, share counts, and underwriters.
639
+
640
+ If set, this operation will use `client_id` from the global security.
641
+
642
+ :param from_: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
643
+ :param to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
644
+ :param retries: Override the default retry configuration for this method
645
+ :param server_url: Override the default server URL for this method
646
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
647
+ :param http_headers: Additional headers to set or replace on requests.
648
+ """
649
+ base_url = None
650
+ url_variables = None
651
+ if timeout_ms is None:
652
+ timeout_ms = self.sdk_configuration.timeout_ms
653
+
654
+ if timeout_ms is None:
655
+ timeout_ms = 30000
656
+
657
+ if server_url is not None:
658
+ base_url = server_url
659
+ else:
660
+ base_url = self._get_url(base_url, url_variables)
661
+
662
+ request = models.GetIpoCalendarRequest(
663
+ from_=from_,
664
+ to=to,
665
+ )
666
+
667
+ req = self._build_request_async(
668
+ method="GET",
669
+ path="/v1/corporate-actions/ipo-calendar",
670
+ base_url=base_url,
671
+ url_variables=url_variables,
672
+ request=request,
673
+ request_body_required=False,
674
+ request_has_path_params=False,
675
+ request_has_query_params=True,
676
+ user_agent_header="user-agent",
677
+ accept_header_value="application/json",
678
+ http_headers=http_headers,
679
+ security=self.sdk_configuration.security,
680
+ allow_empty_value=None,
681
+ allowed_fields=["client_id"],
682
+ timeout_ms=timeout_ms,
683
+ )
684
+
685
+ if retries == UNSET:
686
+ if self.sdk_configuration.retry_config is not UNSET:
687
+ retries = self.sdk_configuration.retry_config
688
+ else:
689
+ retries = utils.RetryConfig(
690
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
691
+ )
692
+
693
+ retry_config = None
694
+ if isinstance(retries, utils.RetryConfig):
695
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
696
+
697
+ http_res = await self.do_request_async(
698
+ hook_ctx=HookContext(
699
+ config=self.sdk_configuration,
700
+ base_url=base_url or "",
701
+ operation_id="getIpoCalendar",
702
+ oauth2_scopes=["market:supplemental"],
703
+ security_source=self.sdk_configuration.security,
704
+ tags=["Corporate Actions"],
705
+ extensions=None,
706
+ ),
707
+ request=req,
708
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
709
+ retry_config=retry_config,
710
+ )
711
+
712
+ response_data: Any = None
713
+ if utils.match_response(http_res, "200", "application/json"):
714
+ return models.GetIpoCalendarResponse(
715
+ ipo_calendar_response=unmarshal_json_response(
716
+ Optional[models.IpoCalendarResponse], http_res
717
+ ),
718
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
719
+ )
720
+ if utils.match_response(http_res, "400", "application/json"):
721
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
722
+ response_data.http_meta = models.HTTPMetadata(
723
+ request=req, response=http_res
724
+ )
725
+ raise errors.BadRequest(response_data, http_res)
726
+ if utils.match_response(http_res, "401", "application/json"):
727
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
728
+ response_data.http_meta = models.HTTPMetadata(
729
+ request=req, response=http_res
730
+ )
731
+ raise errors.Unauthorized(response_data, http_res)
732
+ if utils.match_response(http_res, "403", "application/json"):
733
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
734
+ response_data.http_meta = models.HTTPMetadata(
735
+ request=req, response=http_res
736
+ )
737
+ raise errors.Forbidden(response_data, http_res)
738
+ if utils.match_response(http_res, "404", "application/json"):
739
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
740
+ response_data.http_meta = models.HTTPMetadata(
741
+ request=req, response=http_res
742
+ )
743
+ raise errors.NotFound(response_data, http_res)
744
+ if utils.match_response(http_res, "500", "application/json"):
745
+ response_data = unmarshal_json_response(
746
+ errors.InternalServerErrorUnion, http_res
747
+ )
748
+ response_data.http_meta = models.HTTPMetadata(
749
+ request=req, response=http_res
750
+ )
751
+ raise errors.InternalServerError(response_data, http_res)
752
+ if utils.match_response(http_res, "4XX", "*"):
753
+ http_res_text = await utils.stream_to_text_async(http_res)
754
+ raise errors.APIError("API error occurred", http_res, http_res_text)
755
+ if utils.match_response(http_res, "5XX", "*"):
756
+ http_res_text = await utils.stream_to_text_async(http_res)
757
+ raise errors.APIError("API error occurred", http_res, http_res_text)
758
+
759
+ raise errors.APIError("Unexpected response received", http_res)
760
+
761
+ def get_spinoffs(
762
+ self,
763
+ *,
764
+ identifier: str,
765
+ identifier_type: models.TenderOfferIdentifierType,
766
+ start_date: date,
767
+ end_date: date,
768
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
769
+ server_url: Optional[str] = None,
770
+ timeout_ms: Optional[int] = None,
771
+ http_headers: Optional[Mapping[str, str]] = None,
772
+ ) -> models.GetSpinoffsResponse:
773
+ r"""Get Corporate Spinoffs
774
+
775
+ Retrieve information about corporate spinoffs including separation dates, distribution ratios, and details of the newly independent entities.
776
+
777
+ If set, this operation will use `client_id` from the global security.
778
+
779
+ :param identifier: Identifier value for the company you're querying. The format depends on `identifierType`:
780
+ - `Symbol` — exchange ticker (e.g. `AAPL`).
781
+ - `CUSIP` — 9-character U.S./Canadian identifier (e.g. `037833100`).
782
+ - `ISIN` — 12-character international identifier (e.g. `US0378331005`).
783
+ - `SEDOL` — 7-character UK identifier.
784
+ - `Valoren` — Swiss security identifier.
785
+ - `FIGI` — Bloomberg Financial Instrument Global Identifier.
786
+ - `CompositeFIGI` — country-level composite FIGI.
787
+
788
+ Must match the kind selected in `identifierType`.
789
+ :param identifier_type: Tells the API how to interpret `identifier`. See `TenderOfferIdentifierType` for the full set of supported values and what each one means.
790
+ :param start_date: Start of the spin-off announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2020-01-01`).
791
+ :param end_date: End of the spin-off announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2020-12-31`).
792
+ :param retries: Override the default retry configuration for this method
793
+ :param server_url: Override the default server URL for this method
794
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
795
+ :param http_headers: Additional headers to set or replace on requests.
796
+ """
797
+ base_url = None
798
+ url_variables = None
799
+ if timeout_ms is None:
800
+ timeout_ms = self.sdk_configuration.timeout_ms
801
+
802
+ if timeout_ms is None:
803
+ timeout_ms = 30000
804
+
805
+ if server_url is not None:
806
+ base_url = server_url
807
+ else:
808
+ base_url = self._get_url(base_url, url_variables)
809
+
810
+ request = models.GetSpinoffsRequest(
811
+ identifier=identifier,
812
+ identifier_type=identifier_type,
813
+ start_date=start_date,
814
+ end_date=end_date,
815
+ )
816
+
817
+ req = self._build_request(
818
+ method="GET",
819
+ path="/v1/corporate-actions/spinoffs",
820
+ base_url=base_url,
821
+ url_variables=url_variables,
822
+ request=request,
823
+ request_body_required=False,
824
+ request_has_path_params=False,
825
+ request_has_query_params=True,
826
+ user_agent_header="user-agent",
827
+ accept_header_value="application/json",
828
+ http_headers=http_headers,
829
+ security=self.sdk_configuration.security,
830
+ allow_empty_value=None,
831
+ allowed_fields=["client_id"],
832
+ timeout_ms=timeout_ms,
833
+ )
834
+
835
+ if retries == UNSET:
836
+ if self.sdk_configuration.retry_config is not UNSET:
837
+ retries = self.sdk_configuration.retry_config
838
+ else:
839
+ retries = utils.RetryConfig(
840
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
841
+ )
842
+
843
+ retry_config = None
844
+ if isinstance(retries, utils.RetryConfig):
845
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
846
+
847
+ http_res = self.do_request(
848
+ hook_ctx=HookContext(
849
+ config=self.sdk_configuration,
850
+ base_url=base_url or "",
851
+ operation_id="getSpinoffs",
852
+ oauth2_scopes=["market:supplemental"],
853
+ security_source=self.sdk_configuration.security,
854
+ tags=["Corporate Actions"],
855
+ extensions=None,
856
+ ),
857
+ request=req,
858
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
859
+ retry_config=retry_config,
860
+ )
861
+
862
+ response_data: Any = None
863
+ if utils.match_response(http_res, "200", "application/json"):
864
+ return models.GetSpinoffsResponse(
865
+ spinoffs_response=unmarshal_json_response(
866
+ Optional[models.SpinoffsResponse], http_res
867
+ ),
868
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
869
+ )
870
+ if utils.match_response(http_res, "400", "application/json"):
871
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
872
+ response_data.http_meta = models.HTTPMetadata(
873
+ request=req, response=http_res
874
+ )
875
+ raise errors.BadRequest(response_data, http_res)
876
+ if utils.match_response(http_res, "401", "application/json"):
877
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
878
+ response_data.http_meta = models.HTTPMetadata(
879
+ request=req, response=http_res
880
+ )
881
+ raise errors.Unauthorized(response_data, http_res)
882
+ if utils.match_response(http_res, "403", "application/json"):
883
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
884
+ response_data.http_meta = models.HTTPMetadata(
885
+ request=req, response=http_res
886
+ )
887
+ raise errors.Forbidden(response_data, http_res)
888
+ if utils.match_response(http_res, "404", "application/json"):
889
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
890
+ response_data.http_meta = models.HTTPMetadata(
891
+ request=req, response=http_res
892
+ )
893
+ raise errors.NotFound(response_data, http_res)
894
+ if utils.match_response(http_res, "500", "application/json"):
895
+ response_data = unmarshal_json_response(
896
+ errors.InternalServerErrorUnion, http_res
897
+ )
898
+ response_data.http_meta = models.HTTPMetadata(
899
+ request=req, response=http_res
900
+ )
901
+ raise errors.InternalServerError(response_data, http_res)
902
+ if utils.match_response(http_res, "4XX", "*"):
903
+ http_res_text = utils.stream_to_text(http_res)
904
+ raise errors.APIError("API error occurred", http_res, http_res_text)
905
+ if utils.match_response(http_res, "5XX", "*"):
906
+ http_res_text = utils.stream_to_text(http_res)
907
+ raise errors.APIError("API error occurred", http_res, http_res_text)
908
+
909
+ raise errors.APIError("Unexpected response received", http_res)
910
+
911
+ async def get_spinoffs_async(
912
+ self,
913
+ *,
914
+ identifier: str,
915
+ identifier_type: models.TenderOfferIdentifierType,
916
+ start_date: date,
917
+ end_date: date,
918
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
919
+ server_url: Optional[str] = None,
920
+ timeout_ms: Optional[int] = None,
921
+ http_headers: Optional[Mapping[str, str]] = None,
922
+ ) -> models.GetSpinoffsResponse:
923
+ r"""Get Corporate Spinoffs
924
+
925
+ Retrieve information about corporate spinoffs including separation dates, distribution ratios, and details of the newly independent entities.
926
+
927
+ If set, this operation will use `client_id` from the global security.
928
+
929
+ :param identifier: Identifier value for the company you're querying. The format depends on `identifierType`:
930
+ - `Symbol` — exchange ticker (e.g. `AAPL`).
931
+ - `CUSIP` — 9-character U.S./Canadian identifier (e.g. `037833100`).
932
+ - `ISIN` — 12-character international identifier (e.g. `US0378331005`).
933
+ - `SEDOL` — 7-character UK identifier.
934
+ - `Valoren` — Swiss security identifier.
935
+ - `FIGI` — Bloomberg Financial Instrument Global Identifier.
936
+ - `CompositeFIGI` — country-level composite FIGI.
937
+
938
+ Must match the kind selected in `identifierType`.
939
+ :param identifier_type: Tells the API how to interpret `identifier`. See `TenderOfferIdentifierType` for the full set of supported values and what each one means.
940
+ :param start_date: Start of the spin-off announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2020-01-01`).
941
+ :param end_date: End of the spin-off announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2020-12-31`).
942
+ :param retries: Override the default retry configuration for this method
943
+ :param server_url: Override the default server URL for this method
944
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
945
+ :param http_headers: Additional headers to set or replace on requests.
946
+ """
947
+ base_url = None
948
+ url_variables = None
949
+ if timeout_ms is None:
950
+ timeout_ms = self.sdk_configuration.timeout_ms
951
+
952
+ if timeout_ms is None:
953
+ timeout_ms = 30000
954
+
955
+ if server_url is not None:
956
+ base_url = server_url
957
+ else:
958
+ base_url = self._get_url(base_url, url_variables)
959
+
960
+ request = models.GetSpinoffsRequest(
961
+ identifier=identifier,
962
+ identifier_type=identifier_type,
963
+ start_date=start_date,
964
+ end_date=end_date,
965
+ )
966
+
967
+ req = self._build_request_async(
968
+ method="GET",
969
+ path="/v1/corporate-actions/spinoffs",
970
+ base_url=base_url,
971
+ url_variables=url_variables,
972
+ request=request,
973
+ request_body_required=False,
974
+ request_has_path_params=False,
975
+ request_has_query_params=True,
976
+ user_agent_header="user-agent",
977
+ accept_header_value="application/json",
978
+ http_headers=http_headers,
979
+ security=self.sdk_configuration.security,
980
+ allow_empty_value=None,
981
+ allowed_fields=["client_id"],
982
+ timeout_ms=timeout_ms,
983
+ )
984
+
985
+ if retries == UNSET:
986
+ if self.sdk_configuration.retry_config is not UNSET:
987
+ retries = self.sdk_configuration.retry_config
988
+ else:
989
+ retries = utils.RetryConfig(
990
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
991
+ )
992
+
993
+ retry_config = None
994
+ if isinstance(retries, utils.RetryConfig):
995
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
996
+
997
+ http_res = await self.do_request_async(
998
+ hook_ctx=HookContext(
999
+ config=self.sdk_configuration,
1000
+ base_url=base_url or "",
1001
+ operation_id="getSpinoffs",
1002
+ oauth2_scopes=["market:supplemental"],
1003
+ security_source=self.sdk_configuration.security,
1004
+ tags=["Corporate Actions"],
1005
+ extensions=None,
1006
+ ),
1007
+ request=req,
1008
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1009
+ retry_config=retry_config,
1010
+ )
1011
+
1012
+ response_data: Any = None
1013
+ if utils.match_response(http_res, "200", "application/json"):
1014
+ return models.GetSpinoffsResponse(
1015
+ spinoffs_response=unmarshal_json_response(
1016
+ Optional[models.SpinoffsResponse], http_res
1017
+ ),
1018
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1019
+ )
1020
+ if utils.match_response(http_res, "400", "application/json"):
1021
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1022
+ response_data.http_meta = models.HTTPMetadata(
1023
+ request=req, response=http_res
1024
+ )
1025
+ raise errors.BadRequest(response_data, http_res)
1026
+ if utils.match_response(http_res, "401", "application/json"):
1027
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1028
+ response_data.http_meta = models.HTTPMetadata(
1029
+ request=req, response=http_res
1030
+ )
1031
+ raise errors.Unauthorized(response_data, http_res)
1032
+ if utils.match_response(http_res, "403", "application/json"):
1033
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1034
+ response_data.http_meta = models.HTTPMetadata(
1035
+ request=req, response=http_res
1036
+ )
1037
+ raise errors.Forbidden(response_data, http_res)
1038
+ if utils.match_response(http_res, "404", "application/json"):
1039
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1040
+ response_data.http_meta = models.HTTPMetadata(
1041
+ request=req, response=http_res
1042
+ )
1043
+ raise errors.NotFound(response_data, http_res)
1044
+ if utils.match_response(http_res, "500", "application/json"):
1045
+ response_data = unmarshal_json_response(
1046
+ errors.InternalServerErrorUnion, http_res
1047
+ )
1048
+ response_data.http_meta = models.HTTPMetadata(
1049
+ request=req, response=http_res
1050
+ )
1051
+ raise errors.InternalServerError(response_data, http_res)
1052
+ if utils.match_response(http_res, "4XX", "*"):
1053
+ http_res_text = await utils.stream_to_text_async(http_res)
1054
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1055
+ if utils.match_response(http_res, "5XX", "*"):
1056
+ http_res_text = await utils.stream_to_text_async(http_res)
1057
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1058
+
1059
+ raise errors.APIError("Unexpected response received", http_res)
1060
+
1061
+ def get_tender_offers(
1062
+ self,
1063
+ *,
1064
+ identifier: str,
1065
+ identifier_type: models.TenderOfferIdentifierType,
1066
+ start_date: date,
1067
+ end_date: date,
1068
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1069
+ server_url: Optional[str] = None,
1070
+ timeout_ms: Optional[int] = None,
1071
+ http_headers: Optional[Mapping[str, str]] = None,
1072
+ ) -> models.GetTenderOffersResponse:
1073
+ r"""Get Tender Offers
1074
+
1075
+ Retrieve information about tender offers including offer prices, expiration dates, and terms for acquiring company shares.
1076
+
1077
+ If set, this operation will use `client_id` from the global security.
1078
+
1079
+ :param identifier: Identifier value for the company you're querying. The format depends on `identifierType`:
1080
+ - `Symbol` — exchange ticker (e.g. `AAPL`).
1081
+ - `CUSIP` — 9-character U.S./Canadian identifier (e.g. `037833100`).
1082
+ - `ISIN` — 12-character international identifier (e.g. `US0378331005`).
1083
+ - `SEDOL` — 7-character UK identifier.
1084
+ - `Valoren` — Swiss security identifier.
1085
+ - `FIGI` — Bloomberg Financial Instrument Global Identifier.
1086
+ - `CompositeFIGI` — country-level composite FIGI.
1087
+
1088
+ Must match the kind selected in `identifierType`.
1089
+ :param identifier_type: Tells the API how to interpret `identifier`. See `TenderOfferIdentifierType` for the full set of supported values and what each one means.
1090
+ :param start_date: Start of the tender-offer announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2024-01-01`).
1091
+ :param end_date: End of the tender-offer announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2024-12-31`).
1092
+ :param retries: Override the default retry configuration for this method
1093
+ :param server_url: Override the default server URL for this method
1094
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1095
+ :param http_headers: Additional headers to set or replace on requests.
1096
+ """
1097
+ base_url = None
1098
+ url_variables = None
1099
+ if timeout_ms is None:
1100
+ timeout_ms = self.sdk_configuration.timeout_ms
1101
+
1102
+ if timeout_ms is None:
1103
+ timeout_ms = 30000
1104
+
1105
+ if server_url is not None:
1106
+ base_url = server_url
1107
+ else:
1108
+ base_url = self._get_url(base_url, url_variables)
1109
+
1110
+ request = models.GetTenderOffersRequest(
1111
+ identifier=identifier,
1112
+ identifier_type=identifier_type,
1113
+ start_date=start_date,
1114
+ end_date=end_date,
1115
+ )
1116
+
1117
+ req = self._build_request(
1118
+ method="GET",
1119
+ path="/v1/corporate-actions/tender-offers",
1120
+ base_url=base_url,
1121
+ url_variables=url_variables,
1122
+ request=request,
1123
+ request_body_required=False,
1124
+ request_has_path_params=False,
1125
+ request_has_query_params=True,
1126
+ user_agent_header="user-agent",
1127
+ accept_header_value="application/json",
1128
+ http_headers=http_headers,
1129
+ security=self.sdk_configuration.security,
1130
+ allow_empty_value=None,
1131
+ allowed_fields=["client_id"],
1132
+ timeout_ms=timeout_ms,
1133
+ )
1134
+
1135
+ if retries == UNSET:
1136
+ if self.sdk_configuration.retry_config is not UNSET:
1137
+ retries = self.sdk_configuration.retry_config
1138
+ else:
1139
+ retries = utils.RetryConfig(
1140
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
1141
+ )
1142
+
1143
+ retry_config = None
1144
+ if isinstance(retries, utils.RetryConfig):
1145
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1146
+
1147
+ http_res = self.do_request(
1148
+ hook_ctx=HookContext(
1149
+ config=self.sdk_configuration,
1150
+ base_url=base_url or "",
1151
+ operation_id="getTenderOffers",
1152
+ oauth2_scopes=["market:supplemental"],
1153
+ security_source=self.sdk_configuration.security,
1154
+ tags=["Corporate Actions"],
1155
+ extensions=None,
1156
+ ),
1157
+ request=req,
1158
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1159
+ retry_config=retry_config,
1160
+ )
1161
+
1162
+ response_data: Any = None
1163
+ if utils.match_response(http_res, "200", "application/json"):
1164
+ return models.GetTenderOffersResponse(
1165
+ tender_offers_response=unmarshal_json_response(
1166
+ Optional[models.TenderOffersResponse], http_res
1167
+ ),
1168
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1169
+ )
1170
+ if utils.match_response(http_res, "400", "application/json"):
1171
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1172
+ response_data.http_meta = models.HTTPMetadata(
1173
+ request=req, response=http_res
1174
+ )
1175
+ raise errors.BadRequest(response_data, http_res)
1176
+ if utils.match_response(http_res, "401", "application/json"):
1177
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1178
+ response_data.http_meta = models.HTTPMetadata(
1179
+ request=req, response=http_res
1180
+ )
1181
+ raise errors.Unauthorized(response_data, http_res)
1182
+ if utils.match_response(http_res, "403", "application/json"):
1183
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1184
+ response_data.http_meta = models.HTTPMetadata(
1185
+ request=req, response=http_res
1186
+ )
1187
+ raise errors.Forbidden(response_data, http_res)
1188
+ if utils.match_response(http_res, "404", "application/json"):
1189
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1190
+ response_data.http_meta = models.HTTPMetadata(
1191
+ request=req, response=http_res
1192
+ )
1193
+ raise errors.NotFound(response_data, http_res)
1194
+ if utils.match_response(http_res, "500", "application/json"):
1195
+ response_data = unmarshal_json_response(
1196
+ errors.InternalServerErrorUnion, http_res
1197
+ )
1198
+ response_data.http_meta = models.HTTPMetadata(
1199
+ request=req, response=http_res
1200
+ )
1201
+ raise errors.InternalServerError(response_data, http_res)
1202
+ if utils.match_response(http_res, "4XX", "*"):
1203
+ http_res_text = utils.stream_to_text(http_res)
1204
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1205
+ if utils.match_response(http_res, "5XX", "*"):
1206
+ http_res_text = utils.stream_to_text(http_res)
1207
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1208
+
1209
+ raise errors.APIError("Unexpected response received", http_res)
1210
+
1211
+ async def get_tender_offers_async(
1212
+ self,
1213
+ *,
1214
+ identifier: str,
1215
+ identifier_type: models.TenderOfferIdentifierType,
1216
+ start_date: date,
1217
+ end_date: date,
1218
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1219
+ server_url: Optional[str] = None,
1220
+ timeout_ms: Optional[int] = None,
1221
+ http_headers: Optional[Mapping[str, str]] = None,
1222
+ ) -> models.GetTenderOffersResponse:
1223
+ r"""Get Tender Offers
1224
+
1225
+ Retrieve information about tender offers including offer prices, expiration dates, and terms for acquiring company shares.
1226
+
1227
+ If set, this operation will use `client_id` from the global security.
1228
+
1229
+ :param identifier: Identifier value for the company you're querying. The format depends on `identifierType`:
1230
+ - `Symbol` — exchange ticker (e.g. `AAPL`).
1231
+ - `CUSIP` — 9-character U.S./Canadian identifier (e.g. `037833100`).
1232
+ - `ISIN` — 12-character international identifier (e.g. `US0378331005`).
1233
+ - `SEDOL` — 7-character UK identifier.
1234
+ - `Valoren` — Swiss security identifier.
1235
+ - `FIGI` — Bloomberg Financial Instrument Global Identifier.
1236
+ - `CompositeFIGI` — country-level composite FIGI.
1237
+
1238
+ Must match the kind selected in `identifierType`.
1239
+ :param identifier_type: Tells the API how to interpret `identifier`. See `TenderOfferIdentifierType` for the full set of supported values and what each one means.
1240
+ :param start_date: Start of the tender-offer announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2024-01-01`).
1241
+ :param end_date: End of the tender-offer announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2024-12-31`).
1242
+ :param retries: Override the default retry configuration for this method
1243
+ :param server_url: Override the default server URL for this method
1244
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1245
+ :param http_headers: Additional headers to set or replace on requests.
1246
+ """
1247
+ base_url = None
1248
+ url_variables = None
1249
+ if timeout_ms is None:
1250
+ timeout_ms = self.sdk_configuration.timeout_ms
1251
+
1252
+ if timeout_ms is None:
1253
+ timeout_ms = 30000
1254
+
1255
+ if server_url is not None:
1256
+ base_url = server_url
1257
+ else:
1258
+ base_url = self._get_url(base_url, url_variables)
1259
+
1260
+ request = models.GetTenderOffersRequest(
1261
+ identifier=identifier,
1262
+ identifier_type=identifier_type,
1263
+ start_date=start_date,
1264
+ end_date=end_date,
1265
+ )
1266
+
1267
+ req = self._build_request_async(
1268
+ method="GET",
1269
+ path="/v1/corporate-actions/tender-offers",
1270
+ base_url=base_url,
1271
+ url_variables=url_variables,
1272
+ request=request,
1273
+ request_body_required=False,
1274
+ request_has_path_params=False,
1275
+ request_has_query_params=True,
1276
+ user_agent_header="user-agent",
1277
+ accept_header_value="application/json",
1278
+ http_headers=http_headers,
1279
+ security=self.sdk_configuration.security,
1280
+ allow_empty_value=None,
1281
+ allowed_fields=["client_id"],
1282
+ timeout_ms=timeout_ms,
1283
+ )
1284
+
1285
+ if retries == UNSET:
1286
+ if self.sdk_configuration.retry_config is not UNSET:
1287
+ retries = self.sdk_configuration.retry_config
1288
+ else:
1289
+ retries = utils.RetryConfig(
1290
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
1291
+ )
1292
+
1293
+ retry_config = None
1294
+ if isinstance(retries, utils.RetryConfig):
1295
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1296
+
1297
+ http_res = await self.do_request_async(
1298
+ hook_ctx=HookContext(
1299
+ config=self.sdk_configuration,
1300
+ base_url=base_url or "",
1301
+ operation_id="getTenderOffers",
1302
+ oauth2_scopes=["market:supplemental"],
1303
+ security_source=self.sdk_configuration.security,
1304
+ tags=["Corporate Actions"],
1305
+ extensions=None,
1306
+ ),
1307
+ request=req,
1308
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1309
+ retry_config=retry_config,
1310
+ )
1311
+
1312
+ response_data: Any = None
1313
+ if utils.match_response(http_res, "200", "application/json"):
1314
+ return models.GetTenderOffersResponse(
1315
+ tender_offers_response=unmarshal_json_response(
1316
+ Optional[models.TenderOffersResponse], http_res
1317
+ ),
1318
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1319
+ )
1320
+ if utils.match_response(http_res, "400", "application/json"):
1321
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1322
+ response_data.http_meta = models.HTTPMetadata(
1323
+ request=req, response=http_res
1324
+ )
1325
+ raise errors.BadRequest(response_data, http_res)
1326
+ if utils.match_response(http_res, "401", "application/json"):
1327
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1328
+ response_data.http_meta = models.HTTPMetadata(
1329
+ request=req, response=http_res
1330
+ )
1331
+ raise errors.Unauthorized(response_data, http_res)
1332
+ if utils.match_response(http_res, "403", "application/json"):
1333
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1334
+ response_data.http_meta = models.HTTPMetadata(
1335
+ request=req, response=http_res
1336
+ )
1337
+ raise errors.Forbidden(response_data, http_res)
1338
+ if utils.match_response(http_res, "404", "application/json"):
1339
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1340
+ response_data.http_meta = models.HTTPMetadata(
1341
+ request=req, response=http_res
1342
+ )
1343
+ raise errors.NotFound(response_data, http_res)
1344
+ if utils.match_response(http_res, "500", "application/json"):
1345
+ response_data = unmarshal_json_response(
1346
+ errors.InternalServerErrorUnion, http_res
1347
+ )
1348
+ response_data.http_meta = models.HTTPMetadata(
1349
+ request=req, response=http_res
1350
+ )
1351
+ raise errors.InternalServerError(response_data, http_res)
1352
+ if utils.match_response(http_res, "4XX", "*"):
1353
+ http_res_text = await utils.stream_to_text_async(http_res)
1354
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1355
+ if utils.match_response(http_res, "5XX", "*"):
1356
+ http_res_text = await utils.stream_to_text_async(http_res)
1357
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1358
+
1359
+ raise errors.APIError("Unexpected response received", http_res)
1360
+
1361
+ def get_stock_splits(
1362
+ self,
1363
+ *,
1364
+ ticker: Optional[str] = None,
1365
+ tickers_any_of: Optional[str] = None,
1366
+ ticker_from: Optional[str] = None,
1367
+ ticker_after: Optional[str] = None,
1368
+ ticker_to: Optional[str] = None,
1369
+ ticker_before: Optional[str] = None,
1370
+ execution_date: Optional[date] = None,
1371
+ execution_date_from: Optional[date] = None,
1372
+ execution_date_after: Optional[date] = None,
1373
+ execution_date_to: Optional[date] = None,
1374
+ execution_date_before: Optional[date] = None,
1375
+ adjustment_type: Optional[models.GetStockSplitsAdjustmentType] = None,
1376
+ adjustment_types: Optional[str] = None,
1377
+ limit: Optional[int] = None,
1378
+ sort: Optional[str] = None,
1379
+ next: Optional[str] = None,
1380
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1381
+ server_url: Optional[str] = None,
1382
+ url_override: Optional[str] = None,
1383
+ timeout_ms: Optional[int] = None,
1384
+ http_headers: Optional[Mapping[str, str]] = None,
1385
+ ) -> Optional[models.GetStockSplitsResponse]:
1386
+ r"""Get Stock Split History
1387
+
1388
+ Retrieve historical stock split events including split ratios, execution dates, and pre/post-split price adjustments. `ticker` accepts a single symbol only. Use `tickersAnyOf` for multiple symbols. If `ticker` contains multiple comma-separated values, the API returns 400: \"Multiple tickers are not supported. Please provide a single ticker.\" If both `ticker` and `tickersAnyOf` are set, the API returns 400: \"Cannot specify both ticker and tickersAnyOf. Use ticker for a single symbol or tickersAnyOf for multiple.\"
1389
+
1390
+ If set, this operation will use `client_id` from the global security.
1391
+
1392
+ :param ticker: Single ticker symbol only, such as AAPL. Do not send a comma-separated list here; if you need multiple symbols, use `tickersAnyOf` instead.
1393
+ :param tickers_any_of: Comma-separated list of ticker symbols.
1394
+ :param ticker_from: Filter tickers >= this value (inclusive)
1395
+ :param ticker_after: Filter tickers > this value (exclusive)
1396
+ :param ticker_to: Filter tickers <= this value (inclusive)
1397
+ :param ticker_before: Filter tickers < this value (exclusive)
1398
+ :param execution_date: Exact execution date in YYYY-MM-DD format
1399
+ :param execution_date_from: Filter to splits that executed on or after this date (inclusive). Format: `YYYY-MM-DD`.
1400
+ :param execution_date_after: Filter to splits that executed strictly after this date (exclusive). Format: `YYYY-MM-DD`.
1401
+ :param execution_date_to: Filter to splits that executed on or before this date (inclusive). Format: `YYYY-MM-DD`.
1402
+ :param execution_date_before: Filter to splits that executed strictly before this date (exclusive). Format: `YYYY-MM-DD`.
1403
+ :param adjustment_type: Exact type: forward_split, reverse_split, stock_dividend
1404
+ :param adjustment_types: Comma-separated list of adjustment types
1405
+ :param limit: Maximum number of results to return. Range: 1 to 5000. Use smaller values for UI pages, larger for batch exports.
1406
+ :param sort: A comma-separated list of sort columns. For each column, append `.asc` or `.desc` to specify direction. Defaults to `ticker.asc` when not specified. Examples: `execution_date.desc` or `ticker.asc,execution_date.desc`.
1407
+ :param next: Pagination cursor from previous response
1408
+ :param retries: Override the default retry configuration for this method
1409
+ :param server_url: Override the default server URL for this method
1410
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1411
+ :param http_headers: Additional headers to set or replace on requests.
1412
+ """
1413
+ base_url = None
1414
+ url_variables = None
1415
+ if timeout_ms is None:
1416
+ timeout_ms = self.sdk_configuration.timeout_ms
1417
+
1418
+ if timeout_ms is None:
1419
+ timeout_ms = 30000
1420
+
1421
+ if server_url is not None:
1422
+ base_url = server_url
1423
+ else:
1424
+ base_url = self._get_url(base_url, url_variables)
1425
+
1426
+ request = models.GetStockSplitsRequest(
1427
+ ticker=ticker,
1428
+ tickers_any_of=tickers_any_of,
1429
+ ticker_from=ticker_from,
1430
+ ticker_after=ticker_after,
1431
+ ticker_to=ticker_to,
1432
+ ticker_before=ticker_before,
1433
+ execution_date=execution_date,
1434
+ execution_date_from=execution_date_from,
1435
+ execution_date_after=execution_date_after,
1436
+ execution_date_to=execution_date_to,
1437
+ execution_date_before=execution_date_before,
1438
+ adjustment_type=adjustment_type,
1439
+ adjustment_types=adjustment_types,
1440
+ limit=limit,
1441
+ sort=sort,
1442
+ next=next,
1443
+ )
1444
+
1445
+ req = self._build_request(
1446
+ method="GET",
1447
+ path="/v1/stock/split",
1448
+ base_url=base_url,
1449
+ url_variables=url_variables,
1450
+ url_override=url_override,
1451
+ request=request,
1452
+ request_body_required=False,
1453
+ request_has_path_params=False,
1454
+ request_has_query_params=True,
1455
+ user_agent_header="user-agent",
1456
+ accept_header_value="application/json",
1457
+ http_headers=http_headers,
1458
+ security=self.sdk_configuration.security,
1459
+ allow_empty_value=None,
1460
+ allowed_fields=["client_id"],
1461
+ timeout_ms=timeout_ms,
1462
+ )
1463
+
1464
+ if retries == UNSET:
1465
+ if self.sdk_configuration.retry_config is not UNSET:
1466
+ retries = self.sdk_configuration.retry_config
1467
+ else:
1468
+ retries = utils.RetryConfig(
1469
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
1470
+ )
1471
+
1472
+ retry_config = None
1473
+ if isinstance(retries, utils.RetryConfig):
1474
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1475
+
1476
+ http_res = self.do_request(
1477
+ hook_ctx=HookContext(
1478
+ config=self.sdk_configuration,
1479
+ base_url=base_url or "",
1480
+ operation_id="getStockSplits",
1481
+ oauth2_scopes=["market:supplemental"],
1482
+ security_source=self.sdk_configuration.security,
1483
+ tags=["Corporate Actions"],
1484
+ extensions=None,
1485
+ ),
1486
+ request=req,
1487
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1488
+ retry_config=retry_config,
1489
+ )
1490
+
1491
+ def next_func() -> Optional[models.GetStockSplitsResponse]:
1492
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
1493
+ next_url_match = JSONPath("$.nextUrl").parse(body)
1494
+ if len(next_url_match) == 0:
1495
+ return None
1496
+
1497
+ next_url = next_url_match[0]
1498
+ if not next_url:
1499
+ return None
1500
+
1501
+ if next_url[0] == "/":
1502
+ url = self._get_url(base_url, url_variables)
1503
+ next_url = url + next_url
1504
+
1505
+ return self.get_stock_splits(
1506
+ ticker=ticker,
1507
+ tickers_any_of=tickers_any_of,
1508
+ ticker_from=ticker_from,
1509
+ ticker_after=ticker_after,
1510
+ ticker_to=ticker_to,
1511
+ ticker_before=ticker_before,
1512
+ execution_date=execution_date,
1513
+ execution_date_from=execution_date_from,
1514
+ execution_date_after=execution_date_after,
1515
+ execution_date_to=execution_date_to,
1516
+ execution_date_before=execution_date_before,
1517
+ adjustment_type=adjustment_type,
1518
+ adjustment_types=adjustment_types,
1519
+ limit=limit,
1520
+ sort=sort,
1521
+ next=next,
1522
+ retries=retries,
1523
+ server_url=server_url,
1524
+ timeout_ms=timeout_ms,
1525
+ http_headers=http_headers,
1526
+ url_override=next_url,
1527
+ )
1528
+
1529
+ response_data: Any = None
1530
+ if utils.match_response(http_res, "200", "application/json"):
1531
+ return models.GetStockSplitsResponse(
1532
+ stock_splits_response=unmarshal_json_response(
1533
+ Optional[models.StockSplitsResponse], http_res
1534
+ ),
1535
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1536
+ next=next_func,
1537
+ )
1538
+ if utils.match_response(http_res, "400", "application/json"):
1539
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1540
+ response_data.http_meta = models.HTTPMetadata(
1541
+ request=req, response=http_res
1542
+ )
1543
+ raise errors.BadRequest(response_data, http_res)
1544
+ if utils.match_response(http_res, "401", "application/json"):
1545
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1546
+ response_data.http_meta = models.HTTPMetadata(
1547
+ request=req, response=http_res
1548
+ )
1549
+ raise errors.Unauthorized(response_data, http_res)
1550
+ if utils.match_response(http_res, "403", "application/json"):
1551
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1552
+ response_data.http_meta = models.HTTPMetadata(
1553
+ request=req, response=http_res
1554
+ )
1555
+ raise errors.Forbidden(response_data, http_res)
1556
+ if utils.match_response(http_res, "404", "application/json"):
1557
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1558
+ response_data.http_meta = models.HTTPMetadata(
1559
+ request=req, response=http_res
1560
+ )
1561
+ raise errors.NotFound(response_data, http_res)
1562
+ if utils.match_response(http_res, "500", "application/json"):
1563
+ response_data = unmarshal_json_response(
1564
+ errors.InternalServerErrorUnion, http_res
1565
+ )
1566
+ response_data.http_meta = models.HTTPMetadata(
1567
+ request=req, response=http_res
1568
+ )
1569
+ raise errors.InternalServerError(response_data, http_res)
1570
+ if utils.match_response(http_res, "4XX", "*"):
1571
+ http_res_text = utils.stream_to_text(http_res)
1572
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1573
+ if utils.match_response(http_res, "5XX", "*"):
1574
+ http_res_text = utils.stream_to_text(http_res)
1575
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1576
+
1577
+ raise errors.APIError("Unexpected response received", http_res)
1578
+
1579
+ async def get_stock_splits_async(
1580
+ self,
1581
+ *,
1582
+ ticker: Optional[str] = None,
1583
+ tickers_any_of: Optional[str] = None,
1584
+ ticker_from: Optional[str] = None,
1585
+ ticker_after: Optional[str] = None,
1586
+ ticker_to: Optional[str] = None,
1587
+ ticker_before: Optional[str] = None,
1588
+ execution_date: Optional[date] = None,
1589
+ execution_date_from: Optional[date] = None,
1590
+ execution_date_after: Optional[date] = None,
1591
+ execution_date_to: Optional[date] = None,
1592
+ execution_date_before: Optional[date] = None,
1593
+ adjustment_type: Optional[models.GetStockSplitsAdjustmentType] = None,
1594
+ adjustment_types: Optional[str] = None,
1595
+ limit: Optional[int] = None,
1596
+ sort: Optional[str] = None,
1597
+ next: Optional[str] = None,
1598
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1599
+ server_url: Optional[str] = None,
1600
+ url_override: Optional[str] = None,
1601
+ timeout_ms: Optional[int] = None,
1602
+ http_headers: Optional[Mapping[str, str]] = None,
1603
+ ) -> Optional[models.GetStockSplitsResponse]:
1604
+ r"""Get Stock Split History
1605
+
1606
+ Retrieve historical stock split events including split ratios, execution dates, and pre/post-split price adjustments. `ticker` accepts a single symbol only. Use `tickersAnyOf` for multiple symbols. If `ticker` contains multiple comma-separated values, the API returns 400: \"Multiple tickers are not supported. Please provide a single ticker.\" If both `ticker` and `tickersAnyOf` are set, the API returns 400: \"Cannot specify both ticker and tickersAnyOf. Use ticker for a single symbol or tickersAnyOf for multiple.\"
1607
+
1608
+ If set, this operation will use `client_id` from the global security.
1609
+
1610
+ :param ticker: Single ticker symbol only, such as AAPL. Do not send a comma-separated list here; if you need multiple symbols, use `tickersAnyOf` instead.
1611
+ :param tickers_any_of: Comma-separated list of ticker symbols.
1612
+ :param ticker_from: Filter tickers >= this value (inclusive)
1613
+ :param ticker_after: Filter tickers > this value (exclusive)
1614
+ :param ticker_to: Filter tickers <= this value (inclusive)
1615
+ :param ticker_before: Filter tickers < this value (exclusive)
1616
+ :param execution_date: Exact execution date in YYYY-MM-DD format
1617
+ :param execution_date_from: Filter to splits that executed on or after this date (inclusive). Format: `YYYY-MM-DD`.
1618
+ :param execution_date_after: Filter to splits that executed strictly after this date (exclusive). Format: `YYYY-MM-DD`.
1619
+ :param execution_date_to: Filter to splits that executed on or before this date (inclusive). Format: `YYYY-MM-DD`.
1620
+ :param execution_date_before: Filter to splits that executed strictly before this date (exclusive). Format: `YYYY-MM-DD`.
1621
+ :param adjustment_type: Exact type: forward_split, reverse_split, stock_dividend
1622
+ :param adjustment_types: Comma-separated list of adjustment types
1623
+ :param limit: Maximum number of results to return. Range: 1 to 5000. Use smaller values for UI pages, larger for batch exports.
1624
+ :param sort: A comma-separated list of sort columns. For each column, append `.asc` or `.desc` to specify direction. Defaults to `ticker.asc` when not specified. Examples: `execution_date.desc` or `ticker.asc,execution_date.desc`.
1625
+ :param next: Pagination cursor from previous response
1626
+ :param retries: Override the default retry configuration for this method
1627
+ :param server_url: Override the default server URL for this method
1628
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1629
+ :param http_headers: Additional headers to set or replace on requests.
1630
+ """
1631
+ base_url = None
1632
+ url_variables = None
1633
+ if timeout_ms is None:
1634
+ timeout_ms = self.sdk_configuration.timeout_ms
1635
+
1636
+ if timeout_ms is None:
1637
+ timeout_ms = 30000
1638
+
1639
+ if server_url is not None:
1640
+ base_url = server_url
1641
+ else:
1642
+ base_url = self._get_url(base_url, url_variables)
1643
+
1644
+ request = models.GetStockSplitsRequest(
1645
+ ticker=ticker,
1646
+ tickers_any_of=tickers_any_of,
1647
+ ticker_from=ticker_from,
1648
+ ticker_after=ticker_after,
1649
+ ticker_to=ticker_to,
1650
+ ticker_before=ticker_before,
1651
+ execution_date=execution_date,
1652
+ execution_date_from=execution_date_from,
1653
+ execution_date_after=execution_date_after,
1654
+ execution_date_to=execution_date_to,
1655
+ execution_date_before=execution_date_before,
1656
+ adjustment_type=adjustment_type,
1657
+ adjustment_types=adjustment_types,
1658
+ limit=limit,
1659
+ sort=sort,
1660
+ next=next,
1661
+ )
1662
+
1663
+ req = self._build_request_async(
1664
+ method="GET",
1665
+ path="/v1/stock/split",
1666
+ base_url=base_url,
1667
+ url_variables=url_variables,
1668
+ url_override=url_override,
1669
+ request=request,
1670
+ request_body_required=False,
1671
+ request_has_path_params=False,
1672
+ request_has_query_params=True,
1673
+ user_agent_header="user-agent",
1674
+ accept_header_value="application/json",
1675
+ http_headers=http_headers,
1676
+ security=self.sdk_configuration.security,
1677
+ allow_empty_value=None,
1678
+ allowed_fields=["client_id"],
1679
+ timeout_ms=timeout_ms,
1680
+ )
1681
+
1682
+ if retries == UNSET:
1683
+ if self.sdk_configuration.retry_config is not UNSET:
1684
+ retries = self.sdk_configuration.retry_config
1685
+ else:
1686
+ retries = utils.RetryConfig(
1687
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
1688
+ )
1689
+
1690
+ retry_config = None
1691
+ if isinstance(retries, utils.RetryConfig):
1692
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1693
+
1694
+ http_res = await self.do_request_async(
1695
+ hook_ctx=HookContext(
1696
+ config=self.sdk_configuration,
1697
+ base_url=base_url or "",
1698
+ operation_id="getStockSplits",
1699
+ oauth2_scopes=["market:supplemental"],
1700
+ security_source=self.sdk_configuration.security,
1701
+ tags=["Corporate Actions"],
1702
+ extensions=None,
1703
+ ),
1704
+ request=req,
1705
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1706
+ retry_config=retry_config,
1707
+ )
1708
+
1709
+ def next_func() -> Optional[models.GetStockSplitsResponse]:
1710
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
1711
+ next_url_match = JSONPath("$.nextUrl").parse(body)
1712
+ if len(next_url_match) == 0:
1713
+ return None
1714
+
1715
+ next_url = next_url_match[0]
1716
+ if not next_url:
1717
+ return None
1718
+
1719
+ if next_url[0] == "/":
1720
+ url = self._get_url(base_url, url_variables)
1721
+ next_url = url + next_url
1722
+
1723
+ return self.get_stock_splits(
1724
+ ticker=ticker,
1725
+ tickers_any_of=tickers_any_of,
1726
+ ticker_from=ticker_from,
1727
+ ticker_after=ticker_after,
1728
+ ticker_to=ticker_to,
1729
+ ticker_before=ticker_before,
1730
+ execution_date=execution_date,
1731
+ execution_date_from=execution_date_from,
1732
+ execution_date_after=execution_date_after,
1733
+ execution_date_to=execution_date_to,
1734
+ execution_date_before=execution_date_before,
1735
+ adjustment_type=adjustment_type,
1736
+ adjustment_types=adjustment_types,
1737
+ limit=limit,
1738
+ sort=sort,
1739
+ next=next,
1740
+ retries=retries,
1741
+ server_url=server_url,
1742
+ timeout_ms=timeout_ms,
1743
+ http_headers=http_headers,
1744
+ url_override=next_url,
1745
+ )
1746
+
1747
+ response_data: Any = None
1748
+ if utils.match_response(http_res, "200", "application/json"):
1749
+ return models.GetStockSplitsResponse(
1750
+ stock_splits_response=unmarshal_json_response(
1751
+ Optional[models.StockSplitsResponse], http_res
1752
+ ),
1753
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1754
+ next=next_func,
1755
+ )
1756
+ if utils.match_response(http_res, "400", "application/json"):
1757
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1758
+ response_data.http_meta = models.HTTPMetadata(
1759
+ request=req, response=http_res
1760
+ )
1761
+ raise errors.BadRequest(response_data, http_res)
1762
+ if utils.match_response(http_res, "401", "application/json"):
1763
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1764
+ response_data.http_meta = models.HTTPMetadata(
1765
+ request=req, response=http_res
1766
+ )
1767
+ raise errors.Unauthorized(response_data, http_res)
1768
+ if utils.match_response(http_res, "403", "application/json"):
1769
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1770
+ response_data.http_meta = models.HTTPMetadata(
1771
+ request=req, response=http_res
1772
+ )
1773
+ raise errors.Forbidden(response_data, http_res)
1774
+ if utils.match_response(http_res, "404", "application/json"):
1775
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1776
+ response_data.http_meta = models.HTTPMetadata(
1777
+ request=req, response=http_res
1778
+ )
1779
+ raise errors.NotFound(response_data, http_res)
1780
+ if utils.match_response(http_res, "500", "application/json"):
1781
+ response_data = unmarshal_json_response(
1782
+ errors.InternalServerErrorUnion, http_res
1783
+ )
1784
+ response_data.http_meta = models.HTTPMetadata(
1785
+ request=req, response=http_res
1786
+ )
1787
+ raise errors.InternalServerError(response_data, http_res)
1788
+ if utils.match_response(http_res, "4XX", "*"):
1789
+ http_res_text = await utils.stream_to_text_async(http_res)
1790
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1791
+ if utils.match_response(http_res, "5XX", "*"):
1792
+ http_res_text = await utils.stream_to_text_async(http_res)
1793
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1794
+
1795
+ raise errors.APIError("Unexpected response received", http_res)