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,1523 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 7846457e7396
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 Calendar(BaseSDK):
15
+ def get_conference_calls(
16
+ self,
17
+ *,
18
+ date_from: Optional[date] = None,
19
+ date_to: Optional[date] = None,
20
+ tickers: Optional[str] = None,
21
+ page: Optional[int] = None,
22
+ page_size: Optional[int] = None,
23
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
24
+ server_url: Optional[str] = None,
25
+ timeout_ms: Optional[int] = None,
26
+ http_headers: Optional[Mapping[str, str]] = None,
27
+ ) -> Optional[models.GetConferenceCallsResponse]:
28
+ r"""Get Conference Calls
29
+
30
+ Retrieve upcoming and past earnings conference call schedules including dates, times, and dial-in information for management discussions.
31
+
32
+ If set, this operation will use `client_id` from the global security.
33
+
34
+ :param date_from: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
35
+ :param date_to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
36
+ :param tickers: Comma-separated list of ticker symbols (max 50)
37
+ :param page: Page number for pagination (0-indexed, max 100000)
38
+ :param page_size: Number of results per page. Use this to control pagination size in list views. Enter a value from 1 to 1000 depending on how much data your UI can display.
39
+ :param retries: Override the default retry configuration for this method
40
+ :param server_url: Override the default server URL for this method
41
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
42
+ :param http_headers: Additional headers to set or replace on requests.
43
+ """
44
+ base_url = None
45
+ url_variables = None
46
+ if timeout_ms is None:
47
+ timeout_ms = self.sdk_configuration.timeout_ms
48
+
49
+ if timeout_ms is None:
50
+ timeout_ms = 30000
51
+
52
+ if server_url is not None:
53
+ base_url = server_url
54
+ else:
55
+ base_url = self._get_url(base_url, url_variables)
56
+
57
+ request = models.GetConferenceCallsRequest(
58
+ date_from=date_from,
59
+ date_to=date_to,
60
+ tickers=tickers,
61
+ page=page,
62
+ page_size=page_size,
63
+ )
64
+
65
+ req = self._build_request(
66
+ method="GET",
67
+ path="/v1/calendars/conference-calls",
68
+ base_url=base_url,
69
+ url_variables=url_variables,
70
+ request=request,
71
+ request_body_required=False,
72
+ request_has_path_params=False,
73
+ request_has_query_params=True,
74
+ user_agent_header="user-agent",
75
+ accept_header_value="application/json",
76
+ http_headers=http_headers,
77
+ security=self.sdk_configuration.security,
78
+ allow_empty_value=None,
79
+ allowed_fields=["client_id"],
80
+ timeout_ms=timeout_ms,
81
+ )
82
+
83
+ if retries == UNSET:
84
+ if self.sdk_configuration.retry_config is not UNSET:
85
+ retries = self.sdk_configuration.retry_config
86
+ else:
87
+ retries = utils.RetryConfig(
88
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
89
+ )
90
+
91
+ retry_config = None
92
+ if isinstance(retries, utils.RetryConfig):
93
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
94
+
95
+ http_res = self.do_request(
96
+ hook_ctx=HookContext(
97
+ config=self.sdk_configuration,
98
+ base_url=base_url or "",
99
+ operation_id="getConferenceCalls",
100
+ oauth2_scopes=["calendar:information"],
101
+ security_source=self.sdk_configuration.security,
102
+ tags=["Calendar"],
103
+ extensions=None,
104
+ ),
105
+ request=req,
106
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
107
+ retry_config=retry_config,
108
+ )
109
+
110
+ def next_func() -> Optional[models.GetConferenceCallsResponse]:
111
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
112
+ page = request.page if isinstance(request.page, int) else 1
113
+ next_page = page + 1
114
+
115
+ if not http_res.text:
116
+ return None
117
+ results = JSONPath("$.conferenceCalls").parse(body)
118
+ if len(results) == 0 or len(results[0]) == 0:
119
+ return None
120
+ limit_ = request.page_size if isinstance(request.page_size, int) else 0
121
+ if len(results[0]) < limit_:
122
+ return None
123
+
124
+ return self.get_conference_calls(
125
+ date_from=date_from,
126
+ date_to=date_to,
127
+ tickers=tickers,
128
+ page=next_page,
129
+ page_size=page_size,
130
+ retries=retries,
131
+ server_url=server_url,
132
+ timeout_ms=timeout_ms,
133
+ http_headers=http_headers,
134
+ )
135
+
136
+ response_data: Any = None
137
+ if utils.match_response(http_res, "200", "application/json"):
138
+ return models.GetConferenceCallsResponse(
139
+ conference_calls_response=unmarshal_json_response(
140
+ Optional[models.ConferenceCallsResponse], http_res
141
+ ),
142
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
143
+ next=next_func,
144
+ )
145
+ if utils.match_response(http_res, "400", "application/json"):
146
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
147
+ response_data.http_meta = models.HTTPMetadata(
148
+ request=req, response=http_res
149
+ )
150
+ raise errors.BadRequest(response_data, http_res)
151
+ if utils.match_response(http_res, "401", "application/json"):
152
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
153
+ response_data.http_meta = models.HTTPMetadata(
154
+ request=req, response=http_res
155
+ )
156
+ raise errors.Unauthorized(response_data, http_res)
157
+ if utils.match_response(http_res, "403", "application/json"):
158
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
159
+ response_data.http_meta = models.HTTPMetadata(
160
+ request=req, response=http_res
161
+ )
162
+ raise errors.Forbidden(response_data, http_res)
163
+ if utils.match_response(http_res, "404", "application/json"):
164
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
165
+ response_data.http_meta = models.HTTPMetadata(
166
+ request=req, response=http_res
167
+ )
168
+ raise errors.NotFound(response_data, http_res)
169
+ if utils.match_response(http_res, "500", "application/json"):
170
+ response_data = unmarshal_json_response(
171
+ errors.InternalServerErrorUnion, http_res
172
+ )
173
+ response_data.http_meta = models.HTTPMetadata(
174
+ request=req, response=http_res
175
+ )
176
+ raise errors.InternalServerError(response_data, http_res)
177
+ if utils.match_response(http_res, "4XX", "*"):
178
+ http_res_text = utils.stream_to_text(http_res)
179
+ raise errors.APIError("API error occurred", http_res, http_res_text)
180
+ if utils.match_response(http_res, "5XX", "*"):
181
+ http_res_text = utils.stream_to_text(http_res)
182
+ raise errors.APIError("API error occurred", http_res, http_res_text)
183
+
184
+ raise errors.APIError("Unexpected response received", http_res)
185
+
186
+ async def get_conference_calls_async(
187
+ self,
188
+ *,
189
+ date_from: Optional[date] = None,
190
+ date_to: Optional[date] = None,
191
+ tickers: Optional[str] = None,
192
+ page: Optional[int] = None,
193
+ page_size: Optional[int] = None,
194
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
195
+ server_url: Optional[str] = None,
196
+ timeout_ms: Optional[int] = None,
197
+ http_headers: Optional[Mapping[str, str]] = None,
198
+ ) -> Optional[models.GetConferenceCallsResponse]:
199
+ r"""Get Conference Calls
200
+
201
+ Retrieve upcoming and past earnings conference call schedules including dates, times, and dial-in information for management discussions.
202
+
203
+ If set, this operation will use `client_id` from the global security.
204
+
205
+ :param date_from: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
206
+ :param date_to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
207
+ :param tickers: Comma-separated list of ticker symbols (max 50)
208
+ :param page: Page number for pagination (0-indexed, max 100000)
209
+ :param page_size: Number of results per page. Use this to control pagination size in list views. Enter a value from 1 to 1000 depending on how much data your UI can display.
210
+ :param retries: Override the default retry configuration for this method
211
+ :param server_url: Override the default server URL for this method
212
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
213
+ :param http_headers: Additional headers to set or replace on requests.
214
+ """
215
+ base_url = None
216
+ url_variables = None
217
+ if timeout_ms is None:
218
+ timeout_ms = self.sdk_configuration.timeout_ms
219
+
220
+ if timeout_ms is None:
221
+ timeout_ms = 30000
222
+
223
+ if server_url is not None:
224
+ base_url = server_url
225
+ else:
226
+ base_url = self._get_url(base_url, url_variables)
227
+
228
+ request = models.GetConferenceCallsRequest(
229
+ date_from=date_from,
230
+ date_to=date_to,
231
+ tickers=tickers,
232
+ page=page,
233
+ page_size=page_size,
234
+ )
235
+
236
+ req = self._build_request_async(
237
+ method="GET",
238
+ path="/v1/calendars/conference-calls",
239
+ base_url=base_url,
240
+ url_variables=url_variables,
241
+ request=request,
242
+ request_body_required=False,
243
+ request_has_path_params=False,
244
+ request_has_query_params=True,
245
+ user_agent_header="user-agent",
246
+ accept_header_value="application/json",
247
+ http_headers=http_headers,
248
+ security=self.sdk_configuration.security,
249
+ allow_empty_value=None,
250
+ allowed_fields=["client_id"],
251
+ timeout_ms=timeout_ms,
252
+ )
253
+
254
+ if retries == UNSET:
255
+ if self.sdk_configuration.retry_config is not UNSET:
256
+ retries = self.sdk_configuration.retry_config
257
+ else:
258
+ retries = utils.RetryConfig(
259
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
260
+ )
261
+
262
+ retry_config = None
263
+ if isinstance(retries, utils.RetryConfig):
264
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
265
+
266
+ http_res = await self.do_request_async(
267
+ hook_ctx=HookContext(
268
+ config=self.sdk_configuration,
269
+ base_url=base_url or "",
270
+ operation_id="getConferenceCalls",
271
+ oauth2_scopes=["calendar:information"],
272
+ security_source=self.sdk_configuration.security,
273
+ tags=["Calendar"],
274
+ extensions=None,
275
+ ),
276
+ request=req,
277
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
278
+ retry_config=retry_config,
279
+ )
280
+
281
+ def next_func() -> Optional[models.GetConferenceCallsResponse]:
282
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
283
+ page = request.page if isinstance(request.page, int) else 1
284
+ next_page = page + 1
285
+
286
+ if not http_res.text:
287
+ return None
288
+ results = JSONPath("$.conferenceCalls").parse(body)
289
+ if len(results) == 0 or len(results[0]) == 0:
290
+ return None
291
+ limit_ = request.page_size if isinstance(request.page_size, int) else 0
292
+ if len(results[0]) < limit_:
293
+ return None
294
+
295
+ return self.get_conference_calls(
296
+ date_from=date_from,
297
+ date_to=date_to,
298
+ tickers=tickers,
299
+ page=next_page,
300
+ page_size=page_size,
301
+ retries=retries,
302
+ server_url=server_url,
303
+ timeout_ms=timeout_ms,
304
+ http_headers=http_headers,
305
+ )
306
+
307
+ response_data: Any = None
308
+ if utils.match_response(http_res, "200", "application/json"):
309
+ return models.GetConferenceCallsResponse(
310
+ conference_calls_response=unmarshal_json_response(
311
+ Optional[models.ConferenceCallsResponse], http_res
312
+ ),
313
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
314
+ next=next_func,
315
+ )
316
+ if utils.match_response(http_res, "400", "application/json"):
317
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
318
+ response_data.http_meta = models.HTTPMetadata(
319
+ request=req, response=http_res
320
+ )
321
+ raise errors.BadRequest(response_data, http_res)
322
+ if utils.match_response(http_res, "401", "application/json"):
323
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
324
+ response_data.http_meta = models.HTTPMetadata(
325
+ request=req, response=http_res
326
+ )
327
+ raise errors.Unauthorized(response_data, http_res)
328
+ if utils.match_response(http_res, "403", "application/json"):
329
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
330
+ response_data.http_meta = models.HTTPMetadata(
331
+ request=req, response=http_res
332
+ )
333
+ raise errors.Forbidden(response_data, http_res)
334
+ if utils.match_response(http_res, "404", "application/json"):
335
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
336
+ response_data.http_meta = models.HTTPMetadata(
337
+ request=req, response=http_res
338
+ )
339
+ raise errors.NotFound(response_data, http_res)
340
+ if utils.match_response(http_res, "500", "application/json"):
341
+ response_data = unmarshal_json_response(
342
+ errors.InternalServerErrorUnion, http_res
343
+ )
344
+ response_data.http_meta = models.HTTPMetadata(
345
+ request=req, response=http_res
346
+ )
347
+ raise errors.InternalServerError(response_data, http_res)
348
+ if utils.match_response(http_res, "4XX", "*"):
349
+ http_res_text = await utils.stream_to_text_async(http_res)
350
+ raise errors.APIError("API error occurred", http_res, http_res_text)
351
+ if utils.match_response(http_res, "5XX", "*"):
352
+ http_res_text = await utils.stream_to_text_async(http_res)
353
+ raise errors.APIError("API error occurred", http_res, http_res_text)
354
+
355
+ raise errors.APIError("Unexpected response received", http_res)
356
+
357
+ def get_earnings_calendar(
358
+ self,
359
+ *,
360
+ from_: date,
361
+ to: date,
362
+ symbol: Optional[str] = None,
363
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
364
+ server_url: Optional[str] = None,
365
+ timeout_ms: Optional[int] = None,
366
+ http_headers: Optional[Mapping[str, str]] = None,
367
+ ) -> models.GetEarningsCalendarResponse:
368
+ r"""Get Earnings Calendar
369
+
370
+ Retrieve upcoming earnings release dates and historical earnings announcement schedules for earnings season planning.
371
+
372
+ If set, this operation will use `client_id` from the global security.
373
+
374
+ :param from_: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
375
+ :param to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
376
+ :param symbol: Optional stock symbol to filter results. If not provided, returns earnings for all symbols.
377
+ :param retries: Override the default retry configuration for this method
378
+ :param server_url: Override the default server URL for this method
379
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
380
+ :param http_headers: Additional headers to set or replace on requests.
381
+ """
382
+ base_url = None
383
+ url_variables = None
384
+ if timeout_ms is None:
385
+ timeout_ms = self.sdk_configuration.timeout_ms
386
+
387
+ if timeout_ms is None:
388
+ timeout_ms = 30000
389
+
390
+ if server_url is not None:
391
+ base_url = server_url
392
+ else:
393
+ base_url = self._get_url(base_url, url_variables)
394
+
395
+ request = models.GetEarningsCalendarRequest(
396
+ from_=from_,
397
+ to=to,
398
+ symbol=symbol,
399
+ )
400
+
401
+ req = self._build_request(
402
+ method="GET",
403
+ path="/v1/calendars/earnings",
404
+ base_url=base_url,
405
+ url_variables=url_variables,
406
+ request=request,
407
+ request_body_required=False,
408
+ request_has_path_params=False,
409
+ request_has_query_params=True,
410
+ user_agent_header="user-agent",
411
+ accept_header_value="application/json",
412
+ http_headers=http_headers,
413
+ security=self.sdk_configuration.security,
414
+ allow_empty_value=None,
415
+ allowed_fields=["client_id"],
416
+ timeout_ms=timeout_ms,
417
+ )
418
+
419
+ if retries == UNSET:
420
+ if self.sdk_configuration.retry_config is not UNSET:
421
+ retries = self.sdk_configuration.retry_config
422
+ else:
423
+ retries = utils.RetryConfig(
424
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
425
+ )
426
+
427
+ retry_config = None
428
+ if isinstance(retries, utils.RetryConfig):
429
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
430
+
431
+ http_res = self.do_request(
432
+ hook_ctx=HookContext(
433
+ config=self.sdk_configuration,
434
+ base_url=base_url or "",
435
+ operation_id="getEarningsCalendar",
436
+ oauth2_scopes=["calendar:information"],
437
+ security_source=self.sdk_configuration.security,
438
+ tags=["Calendar"],
439
+ extensions=None,
440
+ ),
441
+ request=req,
442
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
443
+ retry_config=retry_config,
444
+ )
445
+
446
+ response_data: Any = None
447
+ if utils.match_response(http_res, "200", "application/json"):
448
+ return models.GetEarningsCalendarResponse(
449
+ get_earnings_calendar_response=unmarshal_json_response(
450
+ Optional[List[models.EarningRelease]], http_res
451
+ ),
452
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
453
+ )
454
+ if utils.match_response(http_res, "400", "application/json"):
455
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
456
+ response_data.http_meta = models.HTTPMetadata(
457
+ request=req, response=http_res
458
+ )
459
+ raise errors.BadRequest(response_data, http_res)
460
+ if utils.match_response(http_res, "401", "application/json"):
461
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
462
+ response_data.http_meta = models.HTTPMetadata(
463
+ request=req, response=http_res
464
+ )
465
+ raise errors.Unauthorized(response_data, http_res)
466
+ if utils.match_response(http_res, "403", "application/json"):
467
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
468
+ response_data.http_meta = models.HTTPMetadata(
469
+ request=req, response=http_res
470
+ )
471
+ raise errors.Forbidden(response_data, http_res)
472
+ if utils.match_response(http_res, "404", "application/json"):
473
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
474
+ response_data.http_meta = models.HTTPMetadata(
475
+ request=req, response=http_res
476
+ )
477
+ raise errors.NotFound(response_data, http_res)
478
+ if utils.match_response(http_res, "500", "application/json"):
479
+ response_data = unmarshal_json_response(
480
+ errors.InternalServerErrorUnion, http_res
481
+ )
482
+ response_data.http_meta = models.HTTPMetadata(
483
+ request=req, response=http_res
484
+ )
485
+ raise errors.InternalServerError(response_data, http_res)
486
+ if utils.match_response(http_res, "4XX", "*"):
487
+ http_res_text = utils.stream_to_text(http_res)
488
+ raise errors.APIError("API error occurred", http_res, http_res_text)
489
+ if utils.match_response(http_res, "5XX", "*"):
490
+ http_res_text = utils.stream_to_text(http_res)
491
+ raise errors.APIError("API error occurred", http_res, http_res_text)
492
+
493
+ raise errors.APIError("Unexpected response received", http_res)
494
+
495
+ async def get_earnings_calendar_async(
496
+ self,
497
+ *,
498
+ from_: date,
499
+ to: date,
500
+ symbol: Optional[str] = None,
501
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
502
+ server_url: Optional[str] = None,
503
+ timeout_ms: Optional[int] = None,
504
+ http_headers: Optional[Mapping[str, str]] = None,
505
+ ) -> models.GetEarningsCalendarResponse:
506
+ r"""Get Earnings Calendar
507
+
508
+ Retrieve upcoming earnings release dates and historical earnings announcement schedules for earnings season planning.
509
+
510
+ If set, this operation will use `client_id` from the global security.
511
+
512
+ :param from_: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
513
+ :param to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
514
+ :param symbol: Optional stock symbol to filter results. If not provided, returns earnings for all symbols.
515
+ :param retries: Override the default retry configuration for this method
516
+ :param server_url: Override the default server URL for this method
517
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
518
+ :param http_headers: Additional headers to set or replace on requests.
519
+ """
520
+ base_url = None
521
+ url_variables = None
522
+ if timeout_ms is None:
523
+ timeout_ms = self.sdk_configuration.timeout_ms
524
+
525
+ if timeout_ms is None:
526
+ timeout_ms = 30000
527
+
528
+ if server_url is not None:
529
+ base_url = server_url
530
+ else:
531
+ base_url = self._get_url(base_url, url_variables)
532
+
533
+ request = models.GetEarningsCalendarRequest(
534
+ from_=from_,
535
+ to=to,
536
+ symbol=symbol,
537
+ )
538
+
539
+ req = self._build_request_async(
540
+ method="GET",
541
+ path="/v1/calendars/earnings",
542
+ base_url=base_url,
543
+ url_variables=url_variables,
544
+ request=request,
545
+ request_body_required=False,
546
+ request_has_path_params=False,
547
+ request_has_query_params=True,
548
+ user_agent_header="user-agent",
549
+ accept_header_value="application/json",
550
+ http_headers=http_headers,
551
+ security=self.sdk_configuration.security,
552
+ allow_empty_value=None,
553
+ allowed_fields=["client_id"],
554
+ timeout_ms=timeout_ms,
555
+ )
556
+
557
+ if retries == UNSET:
558
+ if self.sdk_configuration.retry_config is not UNSET:
559
+ retries = self.sdk_configuration.retry_config
560
+ else:
561
+ retries = utils.RetryConfig(
562
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
563
+ )
564
+
565
+ retry_config = None
566
+ if isinstance(retries, utils.RetryConfig):
567
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
568
+
569
+ http_res = await self.do_request_async(
570
+ hook_ctx=HookContext(
571
+ config=self.sdk_configuration,
572
+ base_url=base_url or "",
573
+ operation_id="getEarningsCalendar",
574
+ oauth2_scopes=["calendar:information"],
575
+ security_source=self.sdk_configuration.security,
576
+ tags=["Calendar"],
577
+ extensions=None,
578
+ ),
579
+ request=req,
580
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
581
+ retry_config=retry_config,
582
+ )
583
+
584
+ response_data: Any = None
585
+ if utils.match_response(http_res, "200", "application/json"):
586
+ return models.GetEarningsCalendarResponse(
587
+ get_earnings_calendar_response=unmarshal_json_response(
588
+ Optional[List[models.EarningRelease]], http_res
589
+ ),
590
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
591
+ )
592
+ if utils.match_response(http_res, "400", "application/json"):
593
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
594
+ response_data.http_meta = models.HTTPMetadata(
595
+ request=req, response=http_res
596
+ )
597
+ raise errors.BadRequest(response_data, http_res)
598
+ if utils.match_response(http_res, "401", "application/json"):
599
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
600
+ response_data.http_meta = models.HTTPMetadata(
601
+ request=req, response=http_res
602
+ )
603
+ raise errors.Unauthorized(response_data, http_res)
604
+ if utils.match_response(http_res, "403", "application/json"):
605
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
606
+ response_data.http_meta = models.HTTPMetadata(
607
+ request=req, response=http_res
608
+ )
609
+ raise errors.Forbidden(response_data, http_res)
610
+ if utils.match_response(http_res, "404", "application/json"):
611
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
612
+ response_data.http_meta = models.HTTPMetadata(
613
+ request=req, response=http_res
614
+ )
615
+ raise errors.NotFound(response_data, http_res)
616
+ if utils.match_response(http_res, "500", "application/json"):
617
+ response_data = unmarshal_json_response(
618
+ errors.InternalServerErrorUnion, http_res
619
+ )
620
+ response_data.http_meta = models.HTTPMetadata(
621
+ request=req, response=http_res
622
+ )
623
+ raise errors.InternalServerError(response_data, http_res)
624
+ if utils.match_response(http_res, "4XX", "*"):
625
+ http_res_text = await utils.stream_to_text_async(http_res)
626
+ raise errors.APIError("API error occurred", http_res, http_res_text)
627
+ if utils.match_response(http_res, "5XX", "*"):
628
+ http_res_text = await utils.stream_to_text_async(http_res)
629
+ raise errors.APIError("API error occurred", http_res, http_res_text)
630
+
631
+ raise errors.APIError("Unexpected response received", http_res)
632
+
633
+ def get_economics_calendar(
634
+ self,
635
+ *,
636
+ date_: Optional[date] = None,
637
+ from_: Optional[date] = None,
638
+ to: Optional[date] = None,
639
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
640
+ server_url: Optional[str] = None,
641
+ timeout_ms: Optional[int] = None,
642
+ http_headers: Optional[Mapping[str, str]] = None,
643
+ ) -> models.GetEconomicsCalendarResponseResponse:
644
+ r"""Get Economics Calendar
645
+
646
+ Retrieve scheduled economic data releases including employment reports, GDP announcements, inflation data, and central bank decisions. Supports two independent query modes: (1) single date, or (2) explicit date range. Use only one mode per request.
647
+
648
+ Supply date, or supply both from and to. A complete from/to range takes precedence when date is also supplied.
649
+
650
+ If set, this operation will use `client_id` from the global security.
651
+
652
+ :param date_: Single date in YYYY-MM-DD format. Returns events for that date plus 1 month ahead. Either 'date' or 'from' must be provided.
653
+ :param from_: Start date of range in YYYY-MM-DD format. Must be used with 'to'. Either 'date' or 'from' must be provided.
654
+ :param to: End date of range in YYYY-MM-DD format. Required when 'from' is specified.
655
+ :param retries: Override the default retry configuration for this method
656
+ :param server_url: Override the default server URL for this method
657
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
658
+ :param http_headers: Additional headers to set or replace on requests.
659
+ """
660
+ base_url = None
661
+ url_variables = None
662
+ if timeout_ms is None:
663
+ timeout_ms = self.sdk_configuration.timeout_ms
664
+
665
+ if timeout_ms is None:
666
+ timeout_ms = 30000
667
+
668
+ if server_url is not None:
669
+ base_url = server_url
670
+ else:
671
+ base_url = self._get_url(base_url, url_variables)
672
+
673
+ request = models.GetEconomicsCalendarRequest(
674
+ date_=date_,
675
+ from_=from_,
676
+ to=to,
677
+ )
678
+
679
+ req = self._build_request(
680
+ method="GET",
681
+ path="/v1/calendars/economics",
682
+ base_url=base_url,
683
+ url_variables=url_variables,
684
+ request=request,
685
+ request_body_required=False,
686
+ request_has_path_params=False,
687
+ request_has_query_params=True,
688
+ user_agent_header="user-agent",
689
+ accept_header_value="application/json",
690
+ http_headers=http_headers,
691
+ security=self.sdk_configuration.security,
692
+ allow_empty_value=None,
693
+ allowed_fields=["client_id"],
694
+ timeout_ms=timeout_ms,
695
+ )
696
+
697
+ if retries == UNSET:
698
+ if self.sdk_configuration.retry_config is not UNSET:
699
+ retries = self.sdk_configuration.retry_config
700
+ else:
701
+ retries = utils.RetryConfig(
702
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
703
+ )
704
+
705
+ retry_config = None
706
+ if isinstance(retries, utils.RetryConfig):
707
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
708
+
709
+ http_res = self.do_request(
710
+ hook_ctx=HookContext(
711
+ config=self.sdk_configuration,
712
+ base_url=base_url or "",
713
+ operation_id="getEconomicsCalendar",
714
+ oauth2_scopes=["calendar:information"],
715
+ security_source=self.sdk_configuration.security,
716
+ tags=["Calendar"],
717
+ extensions=None,
718
+ ),
719
+ request=req,
720
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
721
+ retry_config=retry_config,
722
+ )
723
+
724
+ response_data: Any = None
725
+ if utils.match_response(http_res, "200", "application/json"):
726
+ return models.GetEconomicsCalendarResponseResponse(
727
+ get_economics_calendar_response=unmarshal_json_response(
728
+ Optional[models.GetEconomicsCalendarResponse], http_res
729
+ ),
730
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
731
+ )
732
+ if utils.match_response(http_res, "400", "application/json"):
733
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
734
+ response_data.http_meta = models.HTTPMetadata(
735
+ request=req, response=http_res
736
+ )
737
+ raise errors.BadRequest(response_data, http_res)
738
+ if utils.match_response(http_res, "401", "application/json"):
739
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
740
+ response_data.http_meta = models.HTTPMetadata(
741
+ request=req, response=http_res
742
+ )
743
+ raise errors.Unauthorized(response_data, http_res)
744
+ if utils.match_response(http_res, "403", "application/json"):
745
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
746
+ response_data.http_meta = models.HTTPMetadata(
747
+ request=req, response=http_res
748
+ )
749
+ raise errors.Forbidden(response_data, http_res)
750
+ if utils.match_response(http_res, "404", "application/json"):
751
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
752
+ response_data.http_meta = models.HTTPMetadata(
753
+ request=req, response=http_res
754
+ )
755
+ raise errors.NotFound(response_data, http_res)
756
+ if utils.match_response(http_res, "500", "application/json"):
757
+ response_data = unmarshal_json_response(
758
+ errors.InternalServerErrorUnion, http_res
759
+ )
760
+ response_data.http_meta = models.HTTPMetadata(
761
+ request=req, response=http_res
762
+ )
763
+ raise errors.InternalServerError(response_data, http_res)
764
+ if utils.match_response(http_res, "4XX", "*"):
765
+ http_res_text = utils.stream_to_text(http_res)
766
+ raise errors.APIError("API error occurred", http_res, http_res_text)
767
+ if utils.match_response(http_res, "5XX", "*"):
768
+ http_res_text = utils.stream_to_text(http_res)
769
+ raise errors.APIError("API error occurred", http_res, http_res_text)
770
+
771
+ raise errors.APIError("Unexpected response received", http_res)
772
+
773
+ async def get_economics_calendar_async(
774
+ self,
775
+ *,
776
+ date_: Optional[date] = None,
777
+ from_: Optional[date] = None,
778
+ to: Optional[date] = None,
779
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
780
+ server_url: Optional[str] = None,
781
+ timeout_ms: Optional[int] = None,
782
+ http_headers: Optional[Mapping[str, str]] = None,
783
+ ) -> models.GetEconomicsCalendarResponseResponse:
784
+ r"""Get Economics Calendar
785
+
786
+ Retrieve scheduled economic data releases including employment reports, GDP announcements, inflation data, and central bank decisions. Supports two independent query modes: (1) single date, or (2) explicit date range. Use only one mode per request.
787
+
788
+ Supply date, or supply both from and to. A complete from/to range takes precedence when date is also supplied.
789
+
790
+ If set, this operation will use `client_id` from the global security.
791
+
792
+ :param date_: Single date in YYYY-MM-DD format. Returns events for that date plus 1 month ahead. Either 'date' or 'from' must be provided.
793
+ :param from_: Start date of range in YYYY-MM-DD format. Must be used with 'to'. Either 'date' or 'from' must be provided.
794
+ :param to: End date of range in YYYY-MM-DD format. Required when 'from' is specified.
795
+ :param retries: Override the default retry configuration for this method
796
+ :param server_url: Override the default server URL for this method
797
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
798
+ :param http_headers: Additional headers to set or replace on requests.
799
+ """
800
+ base_url = None
801
+ url_variables = None
802
+ if timeout_ms is None:
803
+ timeout_ms = self.sdk_configuration.timeout_ms
804
+
805
+ if timeout_ms is None:
806
+ timeout_ms = 30000
807
+
808
+ if server_url is not None:
809
+ base_url = server_url
810
+ else:
811
+ base_url = self._get_url(base_url, url_variables)
812
+
813
+ request = models.GetEconomicsCalendarRequest(
814
+ date_=date_,
815
+ from_=from_,
816
+ to=to,
817
+ )
818
+
819
+ req = self._build_request_async(
820
+ method="GET",
821
+ path="/v1/calendars/economics",
822
+ base_url=base_url,
823
+ url_variables=url_variables,
824
+ request=request,
825
+ request_body_required=False,
826
+ request_has_path_params=False,
827
+ request_has_query_params=True,
828
+ user_agent_header="user-agent",
829
+ accept_header_value="application/json",
830
+ http_headers=http_headers,
831
+ security=self.sdk_configuration.security,
832
+ allow_empty_value=None,
833
+ allowed_fields=["client_id"],
834
+ timeout_ms=timeout_ms,
835
+ )
836
+
837
+ if retries == UNSET:
838
+ if self.sdk_configuration.retry_config is not UNSET:
839
+ retries = self.sdk_configuration.retry_config
840
+ else:
841
+ retries = utils.RetryConfig(
842
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
843
+ )
844
+
845
+ retry_config = None
846
+ if isinstance(retries, utils.RetryConfig):
847
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
848
+
849
+ http_res = await self.do_request_async(
850
+ hook_ctx=HookContext(
851
+ config=self.sdk_configuration,
852
+ base_url=base_url or "",
853
+ operation_id="getEconomicsCalendar",
854
+ oauth2_scopes=["calendar:information"],
855
+ security_source=self.sdk_configuration.security,
856
+ tags=["Calendar"],
857
+ extensions=None,
858
+ ),
859
+ request=req,
860
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
861
+ retry_config=retry_config,
862
+ )
863
+
864
+ response_data: Any = None
865
+ if utils.match_response(http_res, "200", "application/json"):
866
+ return models.GetEconomicsCalendarResponseResponse(
867
+ get_economics_calendar_response=unmarshal_json_response(
868
+ Optional[models.GetEconomicsCalendarResponse], http_res
869
+ ),
870
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
871
+ )
872
+ if utils.match_response(http_res, "400", "application/json"):
873
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
874
+ response_data.http_meta = models.HTTPMetadata(
875
+ request=req, response=http_res
876
+ )
877
+ raise errors.BadRequest(response_data, http_res)
878
+ if utils.match_response(http_res, "401", "application/json"):
879
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
880
+ response_data.http_meta = models.HTTPMetadata(
881
+ request=req, response=http_res
882
+ )
883
+ raise errors.Unauthorized(response_data, http_res)
884
+ if utils.match_response(http_res, "403", "application/json"):
885
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
886
+ response_data.http_meta = models.HTTPMetadata(
887
+ request=req, response=http_res
888
+ )
889
+ raise errors.Forbidden(response_data, http_res)
890
+ if utils.match_response(http_res, "404", "application/json"):
891
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
892
+ response_data.http_meta = models.HTTPMetadata(
893
+ request=req, response=http_res
894
+ )
895
+ raise errors.NotFound(response_data, http_res)
896
+ if utils.match_response(http_res, "500", "application/json"):
897
+ response_data = unmarshal_json_response(
898
+ errors.InternalServerErrorUnion, http_res
899
+ )
900
+ response_data.http_meta = models.HTTPMetadata(
901
+ request=req, response=http_res
902
+ )
903
+ raise errors.InternalServerError(response_data, http_res)
904
+ if utils.match_response(http_res, "4XX", "*"):
905
+ http_res_text = await utils.stream_to_text_async(http_res)
906
+ raise errors.APIError("API error occurred", http_res, http_res_text)
907
+ if utils.match_response(http_res, "5XX", "*"):
908
+ http_res_text = await utils.stream_to_text_async(http_res)
909
+ raise errors.APIError("API error occurred", http_res, http_res_text)
910
+
911
+ raise errors.APIError("Unexpected response received", http_res)
912
+
913
+ def get_historical_data(
914
+ self,
915
+ *,
916
+ symbol: str,
917
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
918
+ server_url: Optional[str] = None,
919
+ timeout_ms: Optional[int] = None,
920
+ http_headers: Optional[Mapping[str, str]] = None,
921
+ ) -> models.GetHistoricalDataResponse:
922
+ r"""Get Historical Economic Data
923
+
924
+ Retrieve historical time series data for an economic indicator. Returns a direct array of data points (no wrapper). Path parameter **symbol** is the economic indicator symbol (e.g. USURTOT, UNITEDSTACONJOBCLA, UNITEDSTACONCRE). No query parameters.
925
+
926
+ If set, this operation will use `client_id` from the global security.
927
+
928
+ :param symbol: Economic indicator code from the upstream calendar provider. These codes are not a fixed enum on our side — fetch [GET /v1/calendars/economics](/api-reference/calendars/economics) to see the codes attached to recent calendar entries, then use that code here for the historical series. Common examples:
929
+ - `USURTOT` — United States Unemployment Rate (total).
930
+ - `UNITEDSTACONJOBCLA` — U.S. Continuing Jobless Claims.
931
+ - `UNITEDSTACONCRE` — U.S. Consumer Credit.
932
+ :param retries: Override the default retry configuration for this method
933
+ :param server_url: Override the default server URL for this method
934
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
935
+ :param http_headers: Additional headers to set or replace on requests.
936
+ """
937
+ base_url = None
938
+ url_variables = None
939
+ if timeout_ms is None:
940
+ timeout_ms = self.sdk_configuration.timeout_ms
941
+
942
+ if timeout_ms is None:
943
+ timeout_ms = 30000
944
+
945
+ if server_url is not None:
946
+ base_url = server_url
947
+ else:
948
+ base_url = self._get_url(base_url, url_variables)
949
+
950
+ request = models.GetHistoricalDataRequest(
951
+ symbol=symbol,
952
+ )
953
+
954
+ req = self._build_request(
955
+ method="GET",
956
+ path="/v1/calendars/historical/{symbol}",
957
+ base_url=base_url,
958
+ url_variables=url_variables,
959
+ request=request,
960
+ request_body_required=False,
961
+ request_has_path_params=True,
962
+ request_has_query_params=True,
963
+ user_agent_header="user-agent",
964
+ accept_header_value="application/json",
965
+ http_headers=http_headers,
966
+ security=self.sdk_configuration.security,
967
+ allow_empty_value=None,
968
+ allowed_fields=["client_id"],
969
+ timeout_ms=timeout_ms,
970
+ )
971
+
972
+ if retries == UNSET:
973
+ if self.sdk_configuration.retry_config is not UNSET:
974
+ retries = self.sdk_configuration.retry_config
975
+ else:
976
+ retries = utils.RetryConfig(
977
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
978
+ )
979
+
980
+ retry_config = None
981
+ if isinstance(retries, utils.RetryConfig):
982
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
983
+
984
+ http_res = self.do_request(
985
+ hook_ctx=HookContext(
986
+ config=self.sdk_configuration,
987
+ base_url=base_url or "",
988
+ operation_id="getHistoricalData",
989
+ oauth2_scopes=["calendar:information"],
990
+ security_source=self.sdk_configuration.security,
991
+ tags=["Calendar"],
992
+ extensions=None,
993
+ ),
994
+ request=req,
995
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
996
+ retry_config=retry_config,
997
+ )
998
+
999
+ response_data: Any = None
1000
+ if utils.match_response(http_res, "200", "application/json"):
1001
+ return models.GetHistoricalDataResponse(
1002
+ get_historical_data_response=unmarshal_json_response(
1003
+ Optional[List[models.EconomicsIndicator]], http_res
1004
+ ),
1005
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1006
+ )
1007
+ if utils.match_response(http_res, "400", "application/json"):
1008
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1009
+ response_data.http_meta = models.HTTPMetadata(
1010
+ request=req, response=http_res
1011
+ )
1012
+ raise errors.BadRequest(response_data, http_res)
1013
+ if utils.match_response(http_res, "401", "application/json"):
1014
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1015
+ response_data.http_meta = models.HTTPMetadata(
1016
+ request=req, response=http_res
1017
+ )
1018
+ raise errors.Unauthorized(response_data, http_res)
1019
+ if utils.match_response(http_res, "403", "application/json"):
1020
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1021
+ response_data.http_meta = models.HTTPMetadata(
1022
+ request=req, response=http_res
1023
+ )
1024
+ raise errors.Forbidden(response_data, http_res)
1025
+ if utils.match_response(http_res, "404", "application/json"):
1026
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1027
+ response_data.http_meta = models.HTTPMetadata(
1028
+ request=req, response=http_res
1029
+ )
1030
+ raise errors.NotFound(response_data, http_res)
1031
+ if utils.match_response(http_res, "500", "application/json"):
1032
+ response_data = unmarshal_json_response(
1033
+ errors.InternalServerErrorUnion, http_res
1034
+ )
1035
+ response_data.http_meta = models.HTTPMetadata(
1036
+ request=req, response=http_res
1037
+ )
1038
+ raise errors.InternalServerError(response_data, http_res)
1039
+ if utils.match_response(http_res, "4XX", "*"):
1040
+ http_res_text = utils.stream_to_text(http_res)
1041
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1042
+ if utils.match_response(http_res, "5XX", "*"):
1043
+ http_res_text = utils.stream_to_text(http_res)
1044
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1045
+
1046
+ raise errors.APIError("Unexpected response received", http_res)
1047
+
1048
+ async def get_historical_data_async(
1049
+ self,
1050
+ *,
1051
+ symbol: str,
1052
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1053
+ server_url: Optional[str] = None,
1054
+ timeout_ms: Optional[int] = None,
1055
+ http_headers: Optional[Mapping[str, str]] = None,
1056
+ ) -> models.GetHistoricalDataResponse:
1057
+ r"""Get Historical Economic Data
1058
+
1059
+ Retrieve historical time series data for an economic indicator. Returns a direct array of data points (no wrapper). Path parameter **symbol** is the economic indicator symbol (e.g. USURTOT, UNITEDSTACONJOBCLA, UNITEDSTACONCRE). No query parameters.
1060
+
1061
+ If set, this operation will use `client_id` from the global security.
1062
+
1063
+ :param symbol: Economic indicator code from the upstream calendar provider. These codes are not a fixed enum on our side — fetch [GET /v1/calendars/economics](/api-reference/calendars/economics) to see the codes attached to recent calendar entries, then use that code here for the historical series. Common examples:
1064
+ - `USURTOT` — United States Unemployment Rate (total).
1065
+ - `UNITEDSTACONJOBCLA` — U.S. Continuing Jobless Claims.
1066
+ - `UNITEDSTACONCRE` — U.S. Consumer Credit.
1067
+ :param retries: Override the default retry configuration for this method
1068
+ :param server_url: Override the default server URL for this method
1069
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1070
+ :param http_headers: Additional headers to set or replace on requests.
1071
+ """
1072
+ base_url = None
1073
+ url_variables = None
1074
+ if timeout_ms is None:
1075
+ timeout_ms = self.sdk_configuration.timeout_ms
1076
+
1077
+ if timeout_ms is None:
1078
+ timeout_ms = 30000
1079
+
1080
+ if server_url is not None:
1081
+ base_url = server_url
1082
+ else:
1083
+ base_url = self._get_url(base_url, url_variables)
1084
+
1085
+ request = models.GetHistoricalDataRequest(
1086
+ symbol=symbol,
1087
+ )
1088
+
1089
+ req = self._build_request_async(
1090
+ method="GET",
1091
+ path="/v1/calendars/historical/{symbol}",
1092
+ base_url=base_url,
1093
+ url_variables=url_variables,
1094
+ request=request,
1095
+ request_body_required=False,
1096
+ request_has_path_params=True,
1097
+ request_has_query_params=True,
1098
+ user_agent_header="user-agent",
1099
+ accept_header_value="application/json",
1100
+ http_headers=http_headers,
1101
+ security=self.sdk_configuration.security,
1102
+ allow_empty_value=None,
1103
+ allowed_fields=["client_id"],
1104
+ timeout_ms=timeout_ms,
1105
+ )
1106
+
1107
+ if retries == UNSET:
1108
+ if self.sdk_configuration.retry_config is not UNSET:
1109
+ retries = self.sdk_configuration.retry_config
1110
+ else:
1111
+ retries = utils.RetryConfig(
1112
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
1113
+ )
1114
+
1115
+ retry_config = None
1116
+ if isinstance(retries, utils.RetryConfig):
1117
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1118
+
1119
+ http_res = await self.do_request_async(
1120
+ hook_ctx=HookContext(
1121
+ config=self.sdk_configuration,
1122
+ base_url=base_url or "",
1123
+ operation_id="getHistoricalData",
1124
+ oauth2_scopes=["calendar:information"],
1125
+ security_source=self.sdk_configuration.security,
1126
+ tags=["Calendar"],
1127
+ extensions=None,
1128
+ ),
1129
+ request=req,
1130
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1131
+ retry_config=retry_config,
1132
+ )
1133
+
1134
+ response_data: Any = None
1135
+ if utils.match_response(http_res, "200", "application/json"):
1136
+ return models.GetHistoricalDataResponse(
1137
+ get_historical_data_response=unmarshal_json_response(
1138
+ Optional[List[models.EconomicsIndicator]], http_res
1139
+ ),
1140
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1141
+ )
1142
+ if utils.match_response(http_res, "400", "application/json"):
1143
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1144
+ response_data.http_meta = models.HTTPMetadata(
1145
+ request=req, response=http_res
1146
+ )
1147
+ raise errors.BadRequest(response_data, http_res)
1148
+ if utils.match_response(http_res, "401", "application/json"):
1149
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1150
+ response_data.http_meta = models.HTTPMetadata(
1151
+ request=req, response=http_res
1152
+ )
1153
+ raise errors.Unauthorized(response_data, http_res)
1154
+ if utils.match_response(http_res, "403", "application/json"):
1155
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1156
+ response_data.http_meta = models.HTTPMetadata(
1157
+ request=req, response=http_res
1158
+ )
1159
+ raise errors.Forbidden(response_data, http_res)
1160
+ if utils.match_response(http_res, "404", "application/json"):
1161
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1162
+ response_data.http_meta = models.HTTPMetadata(
1163
+ request=req, response=http_res
1164
+ )
1165
+ raise errors.NotFound(response_data, http_res)
1166
+ if utils.match_response(http_res, "500", "application/json"):
1167
+ response_data = unmarshal_json_response(
1168
+ errors.InternalServerErrorUnion, http_res
1169
+ )
1170
+ response_data.http_meta = models.HTTPMetadata(
1171
+ request=req, response=http_res
1172
+ )
1173
+ raise errors.InternalServerError(response_data, http_res)
1174
+ if utils.match_response(http_res, "4XX", "*"):
1175
+ http_res_text = await utils.stream_to_text_async(http_res)
1176
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1177
+ if utils.match_response(http_res, "5XX", "*"):
1178
+ http_res_text = await utils.stream_to_text_async(http_res)
1179
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1180
+
1181
+ raise errors.APIError("Unexpected response received", http_res)
1182
+
1183
+ def get_mergers_and_acquisitions(
1184
+ self,
1185
+ *,
1186
+ date_from: Optional[date] = None,
1187
+ date_to: Optional[date] = None,
1188
+ tickers: Optional[str] = None,
1189
+ page: Optional[int] = None,
1190
+ page_size: Optional[int] = None,
1191
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1192
+ server_url: Optional[str] = None,
1193
+ timeout_ms: Optional[int] = None,
1194
+ http_headers: Optional[Mapping[str, str]] = None,
1195
+ ) -> Optional[models.GetMergersAndAcquisitionsResponse]:
1196
+ r"""Get Mergers & Acquisitions
1197
+
1198
+ Retrieve M&A activity including announced deals, merger terms, acquisition prices, and transaction timelines.
1199
+
1200
+ If set, this operation will use `client_id` from the global security.
1201
+
1202
+ :param date_from: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
1203
+ :param date_to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
1204
+ :param tickers: Comma-separated ticker symbols, such as AAPL,MSFT. Use this to request or filter multiple companies in one call.
1205
+ :param page: Zero-based page offset. Enter 0 for the first page of results.
1206
+ :param page_size: Number of results per page. Use this to control pagination size in list views. (1-1000)
1207
+ :param retries: Override the default retry configuration for this method
1208
+ :param server_url: Override the default server URL for this method
1209
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1210
+ :param http_headers: Additional headers to set or replace on requests.
1211
+ """
1212
+ base_url = None
1213
+ url_variables = None
1214
+ if timeout_ms is None:
1215
+ timeout_ms = self.sdk_configuration.timeout_ms
1216
+
1217
+ if timeout_ms is None:
1218
+ timeout_ms = 30000
1219
+
1220
+ if server_url is not None:
1221
+ base_url = server_url
1222
+ else:
1223
+ base_url = self._get_url(base_url, url_variables)
1224
+
1225
+ request = models.GetMergersAndAcquisitionsRequest(
1226
+ date_from=date_from,
1227
+ date_to=date_to,
1228
+ tickers=tickers,
1229
+ page=page,
1230
+ page_size=page_size,
1231
+ )
1232
+
1233
+ req = self._build_request(
1234
+ method="GET",
1235
+ path="/v1/calendars/mergers-acquisitions",
1236
+ base_url=base_url,
1237
+ url_variables=url_variables,
1238
+ request=request,
1239
+ request_body_required=False,
1240
+ request_has_path_params=False,
1241
+ request_has_query_params=True,
1242
+ user_agent_header="user-agent",
1243
+ accept_header_value="application/json",
1244
+ http_headers=http_headers,
1245
+ security=self.sdk_configuration.security,
1246
+ allow_empty_value=None,
1247
+ allowed_fields=["client_id"],
1248
+ timeout_ms=timeout_ms,
1249
+ )
1250
+
1251
+ if retries == UNSET:
1252
+ if self.sdk_configuration.retry_config is not UNSET:
1253
+ retries = self.sdk_configuration.retry_config
1254
+ else:
1255
+ retries = utils.RetryConfig(
1256
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
1257
+ )
1258
+
1259
+ retry_config = None
1260
+ if isinstance(retries, utils.RetryConfig):
1261
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1262
+
1263
+ http_res = self.do_request(
1264
+ hook_ctx=HookContext(
1265
+ config=self.sdk_configuration,
1266
+ base_url=base_url or "",
1267
+ operation_id="getMergersAndAcquisitions",
1268
+ oauth2_scopes=["calendar:information"],
1269
+ security_source=self.sdk_configuration.security,
1270
+ tags=["Calendar"],
1271
+ extensions=None,
1272
+ ),
1273
+ request=req,
1274
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1275
+ retry_config=retry_config,
1276
+ )
1277
+
1278
+ def next_func() -> Optional[models.GetMergersAndAcquisitionsResponse]:
1279
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
1280
+ page = request.page if isinstance(request.page, int) else 1
1281
+ next_page = page + 1
1282
+
1283
+ if not http_res.text:
1284
+ return None
1285
+ results = JSONPath("$.mergersAcquisitions").parse(body)
1286
+ if len(results) == 0 or len(results[0]) == 0:
1287
+ return None
1288
+ limit_ = request.page_size if isinstance(request.page_size, int) else 0
1289
+ if len(results[0]) < limit_:
1290
+ return None
1291
+
1292
+ return self.get_mergers_and_acquisitions(
1293
+ date_from=date_from,
1294
+ date_to=date_to,
1295
+ tickers=tickers,
1296
+ page=next_page,
1297
+ page_size=page_size,
1298
+ retries=retries,
1299
+ server_url=server_url,
1300
+ timeout_ms=timeout_ms,
1301
+ http_headers=http_headers,
1302
+ )
1303
+
1304
+ response_data: Any = None
1305
+ if utils.match_response(http_res, "200", "application/json"):
1306
+ return models.GetMergersAndAcquisitionsResponse(
1307
+ mergers_and_acquisitions_response=unmarshal_json_response(
1308
+ Optional[models.MergersAndAcquisitionsResponse], http_res
1309
+ ),
1310
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1311
+ next=next_func,
1312
+ )
1313
+ if utils.match_response(http_res, "400", "application/json"):
1314
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1315
+ response_data.http_meta = models.HTTPMetadata(
1316
+ request=req, response=http_res
1317
+ )
1318
+ raise errors.BadRequest(response_data, http_res)
1319
+ if utils.match_response(http_res, "401", "application/json"):
1320
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1321
+ response_data.http_meta = models.HTTPMetadata(
1322
+ request=req, response=http_res
1323
+ )
1324
+ raise errors.Unauthorized(response_data, http_res)
1325
+ if utils.match_response(http_res, "403", "application/json"):
1326
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1327
+ response_data.http_meta = models.HTTPMetadata(
1328
+ request=req, response=http_res
1329
+ )
1330
+ raise errors.Forbidden(response_data, http_res)
1331
+ if utils.match_response(http_res, "404", "application/json"):
1332
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1333
+ response_data.http_meta = models.HTTPMetadata(
1334
+ request=req, response=http_res
1335
+ )
1336
+ raise errors.NotFound(response_data, http_res)
1337
+ if utils.match_response(http_res, "500", "application/json"):
1338
+ response_data = unmarshal_json_response(
1339
+ errors.InternalServerErrorUnion, http_res
1340
+ )
1341
+ response_data.http_meta = models.HTTPMetadata(
1342
+ request=req, response=http_res
1343
+ )
1344
+ raise errors.InternalServerError(response_data, http_res)
1345
+ if utils.match_response(http_res, "4XX", "*"):
1346
+ http_res_text = utils.stream_to_text(http_res)
1347
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1348
+ if utils.match_response(http_res, "5XX", "*"):
1349
+ http_res_text = utils.stream_to_text(http_res)
1350
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1351
+
1352
+ raise errors.APIError("Unexpected response received", http_res)
1353
+
1354
+ async def get_mergers_and_acquisitions_async(
1355
+ self,
1356
+ *,
1357
+ date_from: Optional[date] = None,
1358
+ date_to: Optional[date] = None,
1359
+ tickers: Optional[str] = None,
1360
+ page: Optional[int] = None,
1361
+ page_size: Optional[int] = None,
1362
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1363
+ server_url: Optional[str] = None,
1364
+ timeout_ms: Optional[int] = None,
1365
+ http_headers: Optional[Mapping[str, str]] = None,
1366
+ ) -> Optional[models.GetMergersAndAcquisitionsResponse]:
1367
+ r"""Get Mergers & Acquisitions
1368
+
1369
+ Retrieve M&A activity including announced deals, merger terms, acquisition prices, and transaction timelines.
1370
+
1371
+ If set, this operation will use `client_id` from the global security.
1372
+
1373
+ :param date_from: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
1374
+ :param date_to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
1375
+ :param tickers: Comma-separated ticker symbols, such as AAPL,MSFT. Use this to request or filter multiple companies in one call.
1376
+ :param page: Zero-based page offset. Enter 0 for the first page of results.
1377
+ :param page_size: Number of results per page. Use this to control pagination size in list views. (1-1000)
1378
+ :param retries: Override the default retry configuration for this method
1379
+ :param server_url: Override the default server URL for this method
1380
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1381
+ :param http_headers: Additional headers to set or replace on requests.
1382
+ """
1383
+ base_url = None
1384
+ url_variables = None
1385
+ if timeout_ms is None:
1386
+ timeout_ms = self.sdk_configuration.timeout_ms
1387
+
1388
+ if timeout_ms is None:
1389
+ timeout_ms = 30000
1390
+
1391
+ if server_url is not None:
1392
+ base_url = server_url
1393
+ else:
1394
+ base_url = self._get_url(base_url, url_variables)
1395
+
1396
+ request = models.GetMergersAndAcquisitionsRequest(
1397
+ date_from=date_from,
1398
+ date_to=date_to,
1399
+ tickers=tickers,
1400
+ page=page,
1401
+ page_size=page_size,
1402
+ )
1403
+
1404
+ req = self._build_request_async(
1405
+ method="GET",
1406
+ path="/v1/calendars/mergers-acquisitions",
1407
+ base_url=base_url,
1408
+ url_variables=url_variables,
1409
+ request=request,
1410
+ request_body_required=False,
1411
+ request_has_path_params=False,
1412
+ request_has_query_params=True,
1413
+ user_agent_header="user-agent",
1414
+ accept_header_value="application/json",
1415
+ http_headers=http_headers,
1416
+ security=self.sdk_configuration.security,
1417
+ allow_empty_value=None,
1418
+ allowed_fields=["client_id"],
1419
+ timeout_ms=timeout_ms,
1420
+ )
1421
+
1422
+ if retries == UNSET:
1423
+ if self.sdk_configuration.retry_config is not UNSET:
1424
+ retries = self.sdk_configuration.retry_config
1425
+ else:
1426
+ retries = utils.RetryConfig(
1427
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
1428
+ )
1429
+
1430
+ retry_config = None
1431
+ if isinstance(retries, utils.RetryConfig):
1432
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1433
+
1434
+ http_res = await self.do_request_async(
1435
+ hook_ctx=HookContext(
1436
+ config=self.sdk_configuration,
1437
+ base_url=base_url or "",
1438
+ operation_id="getMergersAndAcquisitions",
1439
+ oauth2_scopes=["calendar:information"],
1440
+ security_source=self.sdk_configuration.security,
1441
+ tags=["Calendar"],
1442
+ extensions=None,
1443
+ ),
1444
+ request=req,
1445
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1446
+ retry_config=retry_config,
1447
+ )
1448
+
1449
+ def next_func() -> Optional[models.GetMergersAndAcquisitionsResponse]:
1450
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
1451
+ page = request.page if isinstance(request.page, int) else 1
1452
+ next_page = page + 1
1453
+
1454
+ if not http_res.text:
1455
+ return None
1456
+ results = JSONPath("$.mergersAcquisitions").parse(body)
1457
+ if len(results) == 0 or len(results[0]) == 0:
1458
+ return None
1459
+ limit_ = request.page_size if isinstance(request.page_size, int) else 0
1460
+ if len(results[0]) < limit_:
1461
+ return None
1462
+
1463
+ return self.get_mergers_and_acquisitions(
1464
+ date_from=date_from,
1465
+ date_to=date_to,
1466
+ tickers=tickers,
1467
+ page=next_page,
1468
+ page_size=page_size,
1469
+ retries=retries,
1470
+ server_url=server_url,
1471
+ timeout_ms=timeout_ms,
1472
+ http_headers=http_headers,
1473
+ )
1474
+
1475
+ response_data: Any = None
1476
+ if utils.match_response(http_res, "200", "application/json"):
1477
+ return models.GetMergersAndAcquisitionsResponse(
1478
+ mergers_and_acquisitions_response=unmarshal_json_response(
1479
+ Optional[models.MergersAndAcquisitionsResponse], http_res
1480
+ ),
1481
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1482
+ next=next_func,
1483
+ )
1484
+ if utils.match_response(http_res, "400", "application/json"):
1485
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1486
+ response_data.http_meta = models.HTTPMetadata(
1487
+ request=req, response=http_res
1488
+ )
1489
+ raise errors.BadRequest(response_data, http_res)
1490
+ if utils.match_response(http_res, "401", "application/json"):
1491
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1492
+ response_data.http_meta = models.HTTPMetadata(
1493
+ request=req, response=http_res
1494
+ )
1495
+ raise errors.Unauthorized(response_data, http_res)
1496
+ if utils.match_response(http_res, "403", "application/json"):
1497
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1498
+ response_data.http_meta = models.HTTPMetadata(
1499
+ request=req, response=http_res
1500
+ )
1501
+ raise errors.Forbidden(response_data, http_res)
1502
+ if utils.match_response(http_res, "404", "application/json"):
1503
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1504
+ response_data.http_meta = models.HTTPMetadata(
1505
+ request=req, response=http_res
1506
+ )
1507
+ raise errors.NotFound(response_data, http_res)
1508
+ if utils.match_response(http_res, "500", "application/json"):
1509
+ response_data = unmarshal_json_response(
1510
+ errors.InternalServerErrorUnion, http_res
1511
+ )
1512
+ response_data.http_meta = models.HTTPMetadata(
1513
+ request=req, response=http_res
1514
+ )
1515
+ raise errors.InternalServerError(response_data, http_res)
1516
+ if utils.match_response(http_res, "4XX", "*"):
1517
+ http_res_text = await utils.stream_to_text_async(http_res)
1518
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1519
+ if utils.match_response(http_res, "5XX", "*"):
1520
+ http_res_text = await utils.stream_to_text_async(http_res)
1521
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1522
+
1523
+ raise errors.APIError("Unexpected response received", http_res)