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,1137 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 843e7690f3cc
3
+
4
+ from .basesdk import BaseSDK
5
+ from finance_dev import errors, models, utils
6
+ from finance_dev._hooks import HookContext
7
+ from finance_dev.types import OptionalNullable, UNSET
8
+ from finance_dev.utils.unmarshal_json_response import unmarshal_json_response
9
+ from typing import Any, Mapping, Optional
10
+
11
+
12
+ class TechnicalAnalysisSDK(BaseSDK):
13
+ def get_technical_indicator(
14
+ self,
15
+ *,
16
+ symbol: str,
17
+ resolution: models.GetTechnicalIndicatorResolution,
18
+ indicator: models.TechnicalIndicatorType,
19
+ from_: int,
20
+ to: int,
21
+ timeperiod: Optional[int] = None,
22
+ fast_period: Optional[int] = None,
23
+ slow_period: Optional[int] = None,
24
+ signal_period: Optional[int] = None,
25
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
26
+ server_url: Optional[str] = None,
27
+ timeout_ms: Optional[int] = None,
28
+ http_headers: Optional[Mapping[str, str]] = None,
29
+ ) -> models.GetTechnicalIndicatorResponse:
30
+ r"""Get Technical Indicator Data
31
+
32
+ Retrieve calculated technical indicator values including SMA, EMA, RSI, MACD, Bollinger Bands, and other charting indicators.
33
+
34
+ If `from` or `to` cannot be parsed as a signed 64-bit integer, returns 400 Bad Request with error code `INVALID_PARAMETER` and message `invalid from parameter` or `invalid to parameter`. Invalid indicator requests rejected by the data provider return 400 Bad Request with error code `BAD_REQUEST`; the message includes provider error details when suitable for public responses, otherwise `Invalid request parameters.`.
35
+
36
+ If set, this operation will use `client_id` from the global security.
37
+
38
+ :param symbol: Stock ticker to query. Send the plain uppercase symbol exactly as you'd type it on a brokerage screen, e.g. `AAPL`, `MSFT`, `TSLA`.
39
+ :param resolution: How long each bar covers. Supported values are minutes (`1`, `5`, `15`, `30`, `60`) or daily/weekly/monthly (`D`, `W`, `M`). Other values return 400 Bad Request with error code `VALIDATION_ERROR`.
40
+ :param indicator: Which technical indicator to compute. Common picks: `sma` (simple moving average), `ema` (exponential moving average), `rsi` (relative strength index), `macd` (moving-average convergence-divergence), `bbands` (Bollinger Bands). See `TechnicalIndicatorType` for the full list of supported slugs.
41
+ :param from_: Start timestamp (Unix seconds)
42
+ :param to: End timestamp (Unix seconds)
43
+ :param timeperiod: (Optional) Period for SMA/RSI/BBANDS
44
+ :param fast_period: MACD fast EMA length, in bars. The shorter of the two moving averages used to compute MACD. Standard value is 12. Only used when `indicator=macd`.
45
+ :param slow_period: MACD slow EMA length, in bars. The longer of the two moving averages used to compute MACD. Standard value is 26. Only used when `indicator=macd`.
46
+ :param signal_period: MACD signal EMA length, in bars. Used to smooth the MACD line into the signal line; crossovers between the two are the basic MACD trading cue. Standard value is 9. Only used when `indicator=macd`.
47
+ :param retries: Override the default retry configuration for this method
48
+ :param server_url: Override the default server URL for this method
49
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
50
+ :param http_headers: Additional headers to set or replace on requests.
51
+ """
52
+ base_url = None
53
+ url_variables = None
54
+ if timeout_ms is None:
55
+ timeout_ms = self.sdk_configuration.timeout_ms
56
+
57
+ if timeout_ms is None:
58
+ timeout_ms = 30000
59
+
60
+ if server_url is not None:
61
+ base_url = server_url
62
+ else:
63
+ base_url = self._get_url(base_url, url_variables)
64
+
65
+ request = models.GetTechnicalIndicatorRequest(
66
+ symbol=symbol,
67
+ resolution=resolution,
68
+ indicator=indicator,
69
+ from_=from_,
70
+ to=to,
71
+ timeperiod=timeperiod,
72
+ fast_period=fast_period,
73
+ slow_period=slow_period,
74
+ signal_period=signal_period,
75
+ )
76
+
77
+ req = self._build_request(
78
+ method="GET",
79
+ path="/v1/indicator",
80
+ base_url=base_url,
81
+ url_variables=url_variables,
82
+ request=request,
83
+ request_body_required=False,
84
+ request_has_path_params=False,
85
+ request_has_query_params=True,
86
+ user_agent_header="user-agent",
87
+ accept_header_value="application/json",
88
+ http_headers=http_headers,
89
+ security=self.sdk_configuration.security,
90
+ allow_empty_value=None,
91
+ allowed_fields=["client_id"],
92
+ timeout_ms=timeout_ms,
93
+ )
94
+
95
+ if retries == UNSET:
96
+ if self.sdk_configuration.retry_config is not UNSET:
97
+ retries = self.sdk_configuration.retry_config
98
+ else:
99
+ retries = utils.RetryConfig(
100
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
101
+ )
102
+
103
+ retry_config = None
104
+ if isinstance(retries, utils.RetryConfig):
105
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
106
+
107
+ http_res = self.do_request(
108
+ hook_ctx=HookContext(
109
+ config=self.sdk_configuration,
110
+ base_url=base_url or "",
111
+ operation_id="getTechnicalIndicator",
112
+ oauth2_scopes=["market:supplemental"],
113
+ security_source=self.sdk_configuration.security,
114
+ tags=["Technical Analysis"],
115
+ extensions=None,
116
+ ),
117
+ request=req,
118
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
119
+ retry_config=retry_config,
120
+ )
121
+
122
+ response_data: Any = None
123
+ if utils.match_response(http_res, "200", "application/json"):
124
+ return models.GetTechnicalIndicatorResponse(
125
+ technical_indicator_response=unmarshal_json_response(
126
+ Optional[models.TechnicalIndicatorResponse], http_res
127
+ ),
128
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
129
+ )
130
+ if utils.match_response(http_res, "400", "application/json"):
131
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
132
+ response_data.http_meta = models.HTTPMetadata(
133
+ request=req, response=http_res
134
+ )
135
+ raise errors.BadRequest(response_data, http_res)
136
+ if utils.match_response(http_res, "401", "application/json"):
137
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
138
+ response_data.http_meta = models.HTTPMetadata(
139
+ request=req, response=http_res
140
+ )
141
+ raise errors.Unauthorized(response_data, http_res)
142
+ if utils.match_response(http_res, "403", "application/json"):
143
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
144
+ response_data.http_meta = models.HTTPMetadata(
145
+ request=req, response=http_res
146
+ )
147
+ raise errors.Forbidden(response_data, http_res)
148
+ if utils.match_response(http_res, "404", "application/json"):
149
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
150
+ response_data.http_meta = models.HTTPMetadata(
151
+ request=req, response=http_res
152
+ )
153
+ raise errors.NotFound(response_data, http_res)
154
+ if utils.match_response(http_res, "500", "application/json"):
155
+ response_data = unmarshal_json_response(
156
+ errors.InternalServerErrorUnion, http_res
157
+ )
158
+ response_data.http_meta = models.HTTPMetadata(
159
+ request=req, response=http_res
160
+ )
161
+ raise errors.InternalServerError(response_data, http_res)
162
+ if utils.match_response(http_res, "4XX", "*"):
163
+ http_res_text = utils.stream_to_text(http_res)
164
+ raise errors.APIError("API error occurred", http_res, http_res_text)
165
+ if utils.match_response(http_res, "5XX", "*"):
166
+ http_res_text = utils.stream_to_text(http_res)
167
+ raise errors.APIError("API error occurred", http_res, http_res_text)
168
+
169
+ raise errors.APIError("Unexpected response received", http_res)
170
+
171
+ async def get_technical_indicator_async(
172
+ self,
173
+ *,
174
+ symbol: str,
175
+ resolution: models.GetTechnicalIndicatorResolution,
176
+ indicator: models.TechnicalIndicatorType,
177
+ from_: int,
178
+ to: int,
179
+ timeperiod: Optional[int] = None,
180
+ fast_period: Optional[int] = None,
181
+ slow_period: Optional[int] = None,
182
+ signal_period: Optional[int] = None,
183
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
184
+ server_url: Optional[str] = None,
185
+ timeout_ms: Optional[int] = None,
186
+ http_headers: Optional[Mapping[str, str]] = None,
187
+ ) -> models.GetTechnicalIndicatorResponse:
188
+ r"""Get Technical Indicator Data
189
+
190
+ Retrieve calculated technical indicator values including SMA, EMA, RSI, MACD, Bollinger Bands, and other charting indicators.
191
+
192
+ If `from` or `to` cannot be parsed as a signed 64-bit integer, returns 400 Bad Request with error code `INVALID_PARAMETER` and message `invalid from parameter` or `invalid to parameter`. Invalid indicator requests rejected by the data provider return 400 Bad Request with error code `BAD_REQUEST`; the message includes provider error details when suitable for public responses, otherwise `Invalid request parameters.`.
193
+
194
+ If set, this operation will use `client_id` from the global security.
195
+
196
+ :param symbol: Stock ticker to query. Send the plain uppercase symbol exactly as you'd type it on a brokerage screen, e.g. `AAPL`, `MSFT`, `TSLA`.
197
+ :param resolution: How long each bar covers. Supported values are minutes (`1`, `5`, `15`, `30`, `60`) or daily/weekly/monthly (`D`, `W`, `M`). Other values return 400 Bad Request with error code `VALIDATION_ERROR`.
198
+ :param indicator: Which technical indicator to compute. Common picks: `sma` (simple moving average), `ema` (exponential moving average), `rsi` (relative strength index), `macd` (moving-average convergence-divergence), `bbands` (Bollinger Bands). See `TechnicalIndicatorType` for the full list of supported slugs.
199
+ :param from_: Start timestamp (Unix seconds)
200
+ :param to: End timestamp (Unix seconds)
201
+ :param timeperiod: (Optional) Period for SMA/RSI/BBANDS
202
+ :param fast_period: MACD fast EMA length, in bars. The shorter of the two moving averages used to compute MACD. Standard value is 12. Only used when `indicator=macd`.
203
+ :param slow_period: MACD slow EMA length, in bars. The longer of the two moving averages used to compute MACD. Standard value is 26. Only used when `indicator=macd`.
204
+ :param signal_period: MACD signal EMA length, in bars. Used to smooth the MACD line into the signal line; crossovers between the two are the basic MACD trading cue. Standard value is 9. Only used when `indicator=macd`.
205
+ :param retries: Override the default retry configuration for this method
206
+ :param server_url: Override the default server URL for this method
207
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
208
+ :param http_headers: Additional headers to set or replace on requests.
209
+ """
210
+ base_url = None
211
+ url_variables = None
212
+ if timeout_ms is None:
213
+ timeout_ms = self.sdk_configuration.timeout_ms
214
+
215
+ if timeout_ms is None:
216
+ timeout_ms = 30000
217
+
218
+ if server_url is not None:
219
+ base_url = server_url
220
+ else:
221
+ base_url = self._get_url(base_url, url_variables)
222
+
223
+ request = models.GetTechnicalIndicatorRequest(
224
+ symbol=symbol,
225
+ resolution=resolution,
226
+ indicator=indicator,
227
+ from_=from_,
228
+ to=to,
229
+ timeperiod=timeperiod,
230
+ fast_period=fast_period,
231
+ slow_period=slow_period,
232
+ signal_period=signal_period,
233
+ )
234
+
235
+ req = self._build_request_async(
236
+ method="GET",
237
+ path="/v1/indicator",
238
+ base_url=base_url,
239
+ url_variables=url_variables,
240
+ request=request,
241
+ request_body_required=False,
242
+ request_has_path_params=False,
243
+ request_has_query_params=True,
244
+ user_agent_header="user-agent",
245
+ accept_header_value="application/json",
246
+ http_headers=http_headers,
247
+ security=self.sdk_configuration.security,
248
+ allow_empty_value=None,
249
+ allowed_fields=["client_id"],
250
+ timeout_ms=timeout_ms,
251
+ )
252
+
253
+ if retries == UNSET:
254
+ if self.sdk_configuration.retry_config is not UNSET:
255
+ retries = self.sdk_configuration.retry_config
256
+ else:
257
+ retries = utils.RetryConfig(
258
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
259
+ )
260
+
261
+ retry_config = None
262
+ if isinstance(retries, utils.RetryConfig):
263
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
264
+
265
+ http_res = await self.do_request_async(
266
+ hook_ctx=HookContext(
267
+ config=self.sdk_configuration,
268
+ base_url=base_url or "",
269
+ operation_id="getTechnicalIndicator",
270
+ oauth2_scopes=["market:supplemental"],
271
+ security_source=self.sdk_configuration.security,
272
+ tags=["Technical Analysis"],
273
+ extensions=None,
274
+ ),
275
+ request=req,
276
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
277
+ retry_config=retry_config,
278
+ )
279
+
280
+ response_data: Any = None
281
+ if utils.match_response(http_res, "200", "application/json"):
282
+ return models.GetTechnicalIndicatorResponse(
283
+ technical_indicator_response=unmarshal_json_response(
284
+ Optional[models.TechnicalIndicatorResponse], http_res
285
+ ),
286
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
287
+ )
288
+ if utils.match_response(http_res, "400", "application/json"):
289
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
290
+ response_data.http_meta = models.HTTPMetadata(
291
+ request=req, response=http_res
292
+ )
293
+ raise errors.BadRequest(response_data, http_res)
294
+ if utils.match_response(http_res, "401", "application/json"):
295
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
296
+ response_data.http_meta = models.HTTPMetadata(
297
+ request=req, response=http_res
298
+ )
299
+ raise errors.Unauthorized(response_data, http_res)
300
+ if utils.match_response(http_res, "403", "application/json"):
301
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
302
+ response_data.http_meta = models.HTTPMetadata(
303
+ request=req, response=http_res
304
+ )
305
+ raise errors.Forbidden(response_data, http_res)
306
+ if utils.match_response(http_res, "404", "application/json"):
307
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
308
+ response_data.http_meta = models.HTTPMetadata(
309
+ request=req, response=http_res
310
+ )
311
+ raise errors.NotFound(response_data, http_res)
312
+ if utils.match_response(http_res, "500", "application/json"):
313
+ response_data = unmarshal_json_response(
314
+ errors.InternalServerErrorUnion, http_res
315
+ )
316
+ response_data.http_meta = models.HTTPMetadata(
317
+ request=req, response=http_res
318
+ )
319
+ raise errors.InternalServerError(response_data, http_res)
320
+ if utils.match_response(http_res, "4XX", "*"):
321
+ http_res_text = await utils.stream_to_text_async(http_res)
322
+ raise errors.APIError("API error occurred", http_res, http_res_text)
323
+ if utils.match_response(http_res, "5XX", "*"):
324
+ http_res_text = await utils.stream_to_text_async(http_res)
325
+ raise errors.APIError("API error occurred", http_res, http_res_text)
326
+
327
+ raise errors.APIError("Unexpected response received", http_res)
328
+
329
+ def get_technical_patterns(
330
+ self,
331
+ *,
332
+ symbol: str,
333
+ resolution: models.GetTechnicalPatternsResolution,
334
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
335
+ server_url: Optional[str] = None,
336
+ timeout_ms: Optional[int] = None,
337
+ http_headers: Optional[Mapping[str, str]] = None,
338
+ ) -> models.GetTechnicalPatternsResponse:
339
+ r"""Get Technical Patterns
340
+
341
+ Retrieve identified technical chart patterns including head and shoulders, double tops/bottoms, triangles, and other price formation signals.
342
+
343
+ If set, this operation will use `client_id` from the global security.
344
+
345
+ :param symbol: Stock ticker to query. Send the plain uppercase symbol exactly as you'd type it on a brokerage screen, e.g. `AAPL`, `MSFT`, `TSLA`.
346
+ :param resolution: How long each bar covers. Supported values are minutes (`1`, `5`, `15`, `30`, `60`) or daily/weekly/monthly (`D`, `W`, `M`). Other values return 400 Bad Request with error code `VALIDATION_ERROR`.
347
+ :param retries: Override the default retry configuration for this method
348
+ :param server_url: Override the default server URL for this method
349
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
350
+ :param http_headers: Additional headers to set or replace on requests.
351
+ """
352
+ base_url = None
353
+ url_variables = None
354
+ if timeout_ms is None:
355
+ timeout_ms = self.sdk_configuration.timeout_ms
356
+
357
+ if timeout_ms is None:
358
+ timeout_ms = 30000
359
+
360
+ if server_url is not None:
361
+ base_url = server_url
362
+ else:
363
+ base_url = self._get_url(base_url, url_variables)
364
+
365
+ request = models.GetTechnicalPatternsRequest(
366
+ symbol=symbol,
367
+ resolution=resolution,
368
+ )
369
+
370
+ req = self._build_request(
371
+ method="GET",
372
+ path="/v1/scan/pattern",
373
+ base_url=base_url,
374
+ url_variables=url_variables,
375
+ request=request,
376
+ request_body_required=False,
377
+ request_has_path_params=False,
378
+ request_has_query_params=True,
379
+ user_agent_header="user-agent",
380
+ accept_header_value="application/json",
381
+ http_headers=http_headers,
382
+ security=self.sdk_configuration.security,
383
+ allow_empty_value=None,
384
+ allowed_fields=["client_id"],
385
+ timeout_ms=timeout_ms,
386
+ )
387
+
388
+ if retries == UNSET:
389
+ if self.sdk_configuration.retry_config is not UNSET:
390
+ retries = self.sdk_configuration.retry_config
391
+ else:
392
+ retries = utils.RetryConfig(
393
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
394
+ )
395
+
396
+ retry_config = None
397
+ if isinstance(retries, utils.RetryConfig):
398
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
399
+
400
+ http_res = self.do_request(
401
+ hook_ctx=HookContext(
402
+ config=self.sdk_configuration,
403
+ base_url=base_url or "",
404
+ operation_id="getTechnicalPatterns",
405
+ oauth2_scopes=["market:supplemental"],
406
+ security_source=self.sdk_configuration.security,
407
+ tags=["Technical Analysis"],
408
+ extensions=None,
409
+ ),
410
+ request=req,
411
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
412
+ retry_config=retry_config,
413
+ )
414
+
415
+ response_data: Any = None
416
+ if utils.match_response(http_res, "200", "application/json"):
417
+ return models.GetTechnicalPatternsResponse(
418
+ technical_patterns_response=unmarshal_json_response(
419
+ Optional[models.TechnicalPatternsResponse], http_res
420
+ ),
421
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
422
+ )
423
+ if utils.match_response(http_res, "400", "application/json"):
424
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
425
+ response_data.http_meta = models.HTTPMetadata(
426
+ request=req, response=http_res
427
+ )
428
+ raise errors.BadRequest(response_data, http_res)
429
+ if utils.match_response(http_res, "401", "application/json"):
430
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
431
+ response_data.http_meta = models.HTTPMetadata(
432
+ request=req, response=http_res
433
+ )
434
+ raise errors.Unauthorized(response_data, http_res)
435
+ if utils.match_response(http_res, "403", "application/json"):
436
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
437
+ response_data.http_meta = models.HTTPMetadata(
438
+ request=req, response=http_res
439
+ )
440
+ raise errors.Forbidden(response_data, http_res)
441
+ if utils.match_response(http_res, "404", "application/json"):
442
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
443
+ response_data.http_meta = models.HTTPMetadata(
444
+ request=req, response=http_res
445
+ )
446
+ raise errors.NotFound(response_data, http_res)
447
+ if utils.match_response(http_res, "500", "application/json"):
448
+ response_data = unmarshal_json_response(
449
+ errors.InternalServerErrorUnion, http_res
450
+ )
451
+ response_data.http_meta = models.HTTPMetadata(
452
+ request=req, response=http_res
453
+ )
454
+ raise errors.InternalServerError(response_data, http_res)
455
+ if utils.match_response(http_res, "4XX", "*"):
456
+ http_res_text = utils.stream_to_text(http_res)
457
+ raise errors.APIError("API error occurred", http_res, http_res_text)
458
+ if utils.match_response(http_res, "5XX", "*"):
459
+ http_res_text = utils.stream_to_text(http_res)
460
+ raise errors.APIError("API error occurred", http_res, http_res_text)
461
+
462
+ raise errors.APIError("Unexpected response received", http_res)
463
+
464
+ async def get_technical_patterns_async(
465
+ self,
466
+ *,
467
+ symbol: str,
468
+ resolution: models.GetTechnicalPatternsResolution,
469
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
470
+ server_url: Optional[str] = None,
471
+ timeout_ms: Optional[int] = None,
472
+ http_headers: Optional[Mapping[str, str]] = None,
473
+ ) -> models.GetTechnicalPatternsResponse:
474
+ r"""Get Technical Patterns
475
+
476
+ Retrieve identified technical chart patterns including head and shoulders, double tops/bottoms, triangles, and other price formation signals.
477
+
478
+ If set, this operation will use `client_id` from the global security.
479
+
480
+ :param symbol: Stock ticker to query. Send the plain uppercase symbol exactly as you'd type it on a brokerage screen, e.g. `AAPL`, `MSFT`, `TSLA`.
481
+ :param resolution: How long each bar covers. Supported values are minutes (`1`, `5`, `15`, `30`, `60`) or daily/weekly/monthly (`D`, `W`, `M`). Other values return 400 Bad Request with error code `VALIDATION_ERROR`.
482
+ :param retries: Override the default retry configuration for this method
483
+ :param server_url: Override the default server URL for this method
484
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
485
+ :param http_headers: Additional headers to set or replace on requests.
486
+ """
487
+ base_url = None
488
+ url_variables = None
489
+ if timeout_ms is None:
490
+ timeout_ms = self.sdk_configuration.timeout_ms
491
+
492
+ if timeout_ms is None:
493
+ timeout_ms = 30000
494
+
495
+ if server_url is not None:
496
+ base_url = server_url
497
+ else:
498
+ base_url = self._get_url(base_url, url_variables)
499
+
500
+ request = models.GetTechnicalPatternsRequest(
501
+ symbol=symbol,
502
+ resolution=resolution,
503
+ )
504
+
505
+ req = self._build_request_async(
506
+ method="GET",
507
+ path="/v1/scan/pattern",
508
+ base_url=base_url,
509
+ url_variables=url_variables,
510
+ request=request,
511
+ request_body_required=False,
512
+ request_has_path_params=False,
513
+ request_has_query_params=True,
514
+ user_agent_header="user-agent",
515
+ accept_header_value="application/json",
516
+ http_headers=http_headers,
517
+ security=self.sdk_configuration.security,
518
+ allow_empty_value=None,
519
+ allowed_fields=["client_id"],
520
+ timeout_ms=timeout_ms,
521
+ )
522
+
523
+ if retries == UNSET:
524
+ if self.sdk_configuration.retry_config is not UNSET:
525
+ retries = self.sdk_configuration.retry_config
526
+ else:
527
+ retries = utils.RetryConfig(
528
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
529
+ )
530
+
531
+ retry_config = None
532
+ if isinstance(retries, utils.RetryConfig):
533
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
534
+
535
+ http_res = await self.do_request_async(
536
+ hook_ctx=HookContext(
537
+ config=self.sdk_configuration,
538
+ base_url=base_url or "",
539
+ operation_id="getTechnicalPatterns",
540
+ oauth2_scopes=["market:supplemental"],
541
+ security_source=self.sdk_configuration.security,
542
+ tags=["Technical Analysis"],
543
+ extensions=None,
544
+ ),
545
+ request=req,
546
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
547
+ retry_config=retry_config,
548
+ )
549
+
550
+ response_data: Any = None
551
+ if utils.match_response(http_res, "200", "application/json"):
552
+ return models.GetTechnicalPatternsResponse(
553
+ technical_patterns_response=unmarshal_json_response(
554
+ Optional[models.TechnicalPatternsResponse], http_res
555
+ ),
556
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
557
+ )
558
+ if utils.match_response(http_res, "400", "application/json"):
559
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
560
+ response_data.http_meta = models.HTTPMetadata(
561
+ request=req, response=http_res
562
+ )
563
+ raise errors.BadRequest(response_data, http_res)
564
+ if utils.match_response(http_res, "401", "application/json"):
565
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
566
+ response_data.http_meta = models.HTTPMetadata(
567
+ request=req, response=http_res
568
+ )
569
+ raise errors.Unauthorized(response_data, http_res)
570
+ if utils.match_response(http_res, "403", "application/json"):
571
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
572
+ response_data.http_meta = models.HTTPMetadata(
573
+ request=req, response=http_res
574
+ )
575
+ raise errors.Forbidden(response_data, http_res)
576
+ if utils.match_response(http_res, "404", "application/json"):
577
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
578
+ response_data.http_meta = models.HTTPMetadata(
579
+ request=req, response=http_res
580
+ )
581
+ raise errors.NotFound(response_data, http_res)
582
+ if utils.match_response(http_res, "500", "application/json"):
583
+ response_data = unmarshal_json_response(
584
+ errors.InternalServerErrorUnion, http_res
585
+ )
586
+ response_data.http_meta = models.HTTPMetadata(
587
+ request=req, response=http_res
588
+ )
589
+ raise errors.InternalServerError(response_data, http_res)
590
+ if utils.match_response(http_res, "4XX", "*"):
591
+ http_res_text = await utils.stream_to_text_async(http_res)
592
+ raise errors.APIError("API error occurred", http_res, http_res_text)
593
+ if utils.match_response(http_res, "5XX", "*"):
594
+ http_res_text = await utils.stream_to_text_async(http_res)
595
+ raise errors.APIError("API error occurred", http_res, http_res_text)
596
+
597
+ raise errors.APIError("Unexpected response received", http_res)
598
+
599
+ def get_support_resistance_levels(
600
+ self,
601
+ *,
602
+ symbol: str,
603
+ resolution: models.GetSupportResistanceLevelsResolution,
604
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
605
+ server_url: Optional[str] = None,
606
+ timeout_ms: Optional[int] = None,
607
+ http_headers: Optional[Mapping[str, str]] = None,
608
+ ) -> models.GetSupportResistanceLevelsResponse:
609
+ r"""Get Support & Resistance Levels
610
+
611
+ Retrieve calculated support and resistance price levels based on historical price action for identifying key trading zones.
612
+
613
+ If set, this operation will use `client_id` from the global security.
614
+
615
+ :param symbol: Stock ticker to query. Send the plain uppercase symbol exactly as you'd type it on a brokerage screen, e.g. `AAPL`, `MSFT`, `TSLA`.
616
+ :param resolution: How long each bar covers. Supported values are minutes (`1`, `5`, `15`, `30`, `60`) or daily/weekly/monthly (`D`, `W`, `M`). Other values return 400 Bad Request with error code `VALIDATION_ERROR`.
617
+ :param retries: Override the default retry configuration for this method
618
+ :param server_url: Override the default server URL for this method
619
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
620
+ :param http_headers: Additional headers to set or replace on requests.
621
+ """
622
+ base_url = None
623
+ url_variables = None
624
+ if timeout_ms is None:
625
+ timeout_ms = self.sdk_configuration.timeout_ms
626
+
627
+ if timeout_ms is None:
628
+ timeout_ms = 30000
629
+
630
+ if server_url is not None:
631
+ base_url = server_url
632
+ else:
633
+ base_url = self._get_url(base_url, url_variables)
634
+
635
+ request = models.GetSupportResistanceLevelsRequest(
636
+ symbol=symbol,
637
+ resolution=resolution,
638
+ )
639
+
640
+ req = self._build_request(
641
+ method="GET",
642
+ path="/v1/scan/support-resistance",
643
+ base_url=base_url,
644
+ url_variables=url_variables,
645
+ request=request,
646
+ request_body_required=False,
647
+ request_has_path_params=False,
648
+ request_has_query_params=True,
649
+ user_agent_header="user-agent",
650
+ accept_header_value="application/json",
651
+ http_headers=http_headers,
652
+ security=self.sdk_configuration.security,
653
+ allow_empty_value=None,
654
+ allowed_fields=["client_id"],
655
+ timeout_ms=timeout_ms,
656
+ )
657
+
658
+ if retries == UNSET:
659
+ if self.sdk_configuration.retry_config is not UNSET:
660
+ retries = self.sdk_configuration.retry_config
661
+ else:
662
+ retries = utils.RetryConfig(
663
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
664
+ )
665
+
666
+ retry_config = None
667
+ if isinstance(retries, utils.RetryConfig):
668
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
669
+
670
+ http_res = self.do_request(
671
+ hook_ctx=HookContext(
672
+ config=self.sdk_configuration,
673
+ base_url=base_url or "",
674
+ operation_id="getSupportResistanceLevels",
675
+ oauth2_scopes=["market:supplemental"],
676
+ security_source=self.sdk_configuration.security,
677
+ tags=["Technical Analysis"],
678
+ extensions=None,
679
+ ),
680
+ request=req,
681
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
682
+ retry_config=retry_config,
683
+ )
684
+
685
+ response_data: Any = None
686
+ if utils.match_response(http_res, "200", "application/json"):
687
+ return models.GetSupportResistanceLevelsResponse(
688
+ support_resistance_levels_response=unmarshal_json_response(
689
+ Optional[models.SupportResistanceLevelsResponse], http_res
690
+ ),
691
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
692
+ )
693
+ if utils.match_response(http_res, "400", "application/json"):
694
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
695
+ response_data.http_meta = models.HTTPMetadata(
696
+ request=req, response=http_res
697
+ )
698
+ raise errors.BadRequest(response_data, http_res)
699
+ if utils.match_response(http_res, "401", "application/json"):
700
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
701
+ response_data.http_meta = models.HTTPMetadata(
702
+ request=req, response=http_res
703
+ )
704
+ raise errors.Unauthorized(response_data, http_res)
705
+ if utils.match_response(http_res, "403", "application/json"):
706
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
707
+ response_data.http_meta = models.HTTPMetadata(
708
+ request=req, response=http_res
709
+ )
710
+ raise errors.Forbidden(response_data, http_res)
711
+ if utils.match_response(http_res, "404", "application/json"):
712
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
713
+ response_data.http_meta = models.HTTPMetadata(
714
+ request=req, response=http_res
715
+ )
716
+ raise errors.NotFound(response_data, http_res)
717
+ if utils.match_response(http_res, "500", "application/json"):
718
+ response_data = unmarshal_json_response(
719
+ errors.InternalServerErrorUnion, http_res
720
+ )
721
+ response_data.http_meta = models.HTTPMetadata(
722
+ request=req, response=http_res
723
+ )
724
+ raise errors.InternalServerError(response_data, http_res)
725
+ if utils.match_response(http_res, "4XX", "*"):
726
+ http_res_text = utils.stream_to_text(http_res)
727
+ raise errors.APIError("API error occurred", http_res, http_res_text)
728
+ if utils.match_response(http_res, "5XX", "*"):
729
+ http_res_text = utils.stream_to_text(http_res)
730
+ raise errors.APIError("API error occurred", http_res, http_res_text)
731
+
732
+ raise errors.APIError("Unexpected response received", http_res)
733
+
734
+ async def get_support_resistance_levels_async(
735
+ self,
736
+ *,
737
+ symbol: str,
738
+ resolution: models.GetSupportResistanceLevelsResolution,
739
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
740
+ server_url: Optional[str] = None,
741
+ timeout_ms: Optional[int] = None,
742
+ http_headers: Optional[Mapping[str, str]] = None,
743
+ ) -> models.GetSupportResistanceLevelsResponse:
744
+ r"""Get Support & Resistance Levels
745
+
746
+ Retrieve calculated support and resistance price levels based on historical price action for identifying key trading zones.
747
+
748
+ If set, this operation will use `client_id` from the global security.
749
+
750
+ :param symbol: Stock ticker to query. Send the plain uppercase symbol exactly as you'd type it on a brokerage screen, e.g. `AAPL`, `MSFT`, `TSLA`.
751
+ :param resolution: How long each bar covers. Supported values are minutes (`1`, `5`, `15`, `30`, `60`) or daily/weekly/monthly (`D`, `W`, `M`). Other values return 400 Bad Request with error code `VALIDATION_ERROR`.
752
+ :param retries: Override the default retry configuration for this method
753
+ :param server_url: Override the default server URL for this method
754
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
755
+ :param http_headers: Additional headers to set or replace on requests.
756
+ """
757
+ base_url = None
758
+ url_variables = None
759
+ if timeout_ms is None:
760
+ timeout_ms = self.sdk_configuration.timeout_ms
761
+
762
+ if timeout_ms is None:
763
+ timeout_ms = 30000
764
+
765
+ if server_url is not None:
766
+ base_url = server_url
767
+ else:
768
+ base_url = self._get_url(base_url, url_variables)
769
+
770
+ request = models.GetSupportResistanceLevelsRequest(
771
+ symbol=symbol,
772
+ resolution=resolution,
773
+ )
774
+
775
+ req = self._build_request_async(
776
+ method="GET",
777
+ path="/v1/scan/support-resistance",
778
+ base_url=base_url,
779
+ url_variables=url_variables,
780
+ request=request,
781
+ request_body_required=False,
782
+ request_has_path_params=False,
783
+ request_has_query_params=True,
784
+ user_agent_header="user-agent",
785
+ accept_header_value="application/json",
786
+ http_headers=http_headers,
787
+ security=self.sdk_configuration.security,
788
+ allow_empty_value=None,
789
+ allowed_fields=["client_id"],
790
+ timeout_ms=timeout_ms,
791
+ )
792
+
793
+ if retries == UNSET:
794
+ if self.sdk_configuration.retry_config is not UNSET:
795
+ retries = self.sdk_configuration.retry_config
796
+ else:
797
+ retries = utils.RetryConfig(
798
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
799
+ )
800
+
801
+ retry_config = None
802
+ if isinstance(retries, utils.RetryConfig):
803
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
804
+
805
+ http_res = await self.do_request_async(
806
+ hook_ctx=HookContext(
807
+ config=self.sdk_configuration,
808
+ base_url=base_url or "",
809
+ operation_id="getSupportResistanceLevels",
810
+ oauth2_scopes=["market:supplemental"],
811
+ security_source=self.sdk_configuration.security,
812
+ tags=["Technical Analysis"],
813
+ extensions=None,
814
+ ),
815
+ request=req,
816
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
817
+ retry_config=retry_config,
818
+ )
819
+
820
+ response_data: Any = None
821
+ if utils.match_response(http_res, "200", "application/json"):
822
+ return models.GetSupportResistanceLevelsResponse(
823
+ support_resistance_levels_response=unmarshal_json_response(
824
+ Optional[models.SupportResistanceLevelsResponse], http_res
825
+ ),
826
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
827
+ )
828
+ if utils.match_response(http_res, "400", "application/json"):
829
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
830
+ response_data.http_meta = models.HTTPMetadata(
831
+ request=req, response=http_res
832
+ )
833
+ raise errors.BadRequest(response_data, http_res)
834
+ if utils.match_response(http_res, "401", "application/json"):
835
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
836
+ response_data.http_meta = models.HTTPMetadata(
837
+ request=req, response=http_res
838
+ )
839
+ raise errors.Unauthorized(response_data, http_res)
840
+ if utils.match_response(http_res, "403", "application/json"):
841
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
842
+ response_data.http_meta = models.HTTPMetadata(
843
+ request=req, response=http_res
844
+ )
845
+ raise errors.Forbidden(response_data, http_res)
846
+ if utils.match_response(http_res, "404", "application/json"):
847
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
848
+ response_data.http_meta = models.HTTPMetadata(
849
+ request=req, response=http_res
850
+ )
851
+ raise errors.NotFound(response_data, http_res)
852
+ if utils.match_response(http_res, "500", "application/json"):
853
+ response_data = unmarshal_json_response(
854
+ errors.InternalServerErrorUnion, http_res
855
+ )
856
+ response_data.http_meta = models.HTTPMetadata(
857
+ request=req, response=http_res
858
+ )
859
+ raise errors.InternalServerError(response_data, http_res)
860
+ if utils.match_response(http_res, "4XX", "*"):
861
+ http_res_text = await utils.stream_to_text_async(http_res)
862
+ raise errors.APIError("API error occurred", http_res, http_res_text)
863
+ if utils.match_response(http_res, "5XX", "*"):
864
+ http_res_text = await utils.stream_to_text_async(http_res)
865
+ raise errors.APIError("API error occurred", http_res, http_res_text)
866
+
867
+ raise errors.APIError("Unexpected response received", http_res)
868
+
869
+ def get_aggregate_technical_indicators(
870
+ self,
871
+ *,
872
+ symbol: str,
873
+ resolution: models.GetAggregateTechnicalIndicatorsResolution,
874
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
875
+ server_url: Optional[str] = None,
876
+ timeout_ms: Optional[int] = None,
877
+ http_headers: Optional[Mapping[str, str]] = None,
878
+ ) -> models.GetAggregateTechnicalIndicatorsResponse:
879
+ r"""Get Aggregate Technical Indicators
880
+
881
+ Retrieve aggregate technical indicator signals combining moving averages, oscillators, and momentum indicators for overall buy/sell recommendations.
882
+
883
+ If set, this operation will use `client_id` from the global security.
884
+
885
+ :param symbol: Stock ticker to query. Send the plain uppercase symbol exactly as you'd type it on a brokerage screen, e.g. `AAPL`, `MSFT`, `TSLA`.
886
+ :param resolution: How long each bar covers. Supported values are minutes (`1`, `5`, `15`, `30`, `60`) or daily/weekly/monthly (`D`, `W`, `M`). Other values return 400 Bad Request with error code `VALIDATION_ERROR`.
887
+ :param retries: Override the default retry configuration for this method
888
+ :param server_url: Override the default server URL for this method
889
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
890
+ :param http_headers: Additional headers to set or replace on requests.
891
+ """
892
+ base_url = None
893
+ url_variables = None
894
+ if timeout_ms is None:
895
+ timeout_ms = self.sdk_configuration.timeout_ms
896
+
897
+ if timeout_ms is None:
898
+ timeout_ms = 30000
899
+
900
+ if server_url is not None:
901
+ base_url = server_url
902
+ else:
903
+ base_url = self._get_url(base_url, url_variables)
904
+
905
+ request = models.GetAggregateTechnicalIndicatorsRequest(
906
+ symbol=symbol,
907
+ resolution=resolution,
908
+ )
909
+
910
+ req = self._build_request(
911
+ method="GET",
912
+ path="/v1/scan/technical-indicator",
913
+ base_url=base_url,
914
+ url_variables=url_variables,
915
+ request=request,
916
+ request_body_required=False,
917
+ request_has_path_params=False,
918
+ request_has_query_params=True,
919
+ user_agent_header="user-agent",
920
+ accept_header_value="application/json",
921
+ http_headers=http_headers,
922
+ security=self.sdk_configuration.security,
923
+ allow_empty_value=None,
924
+ allowed_fields=["client_id"],
925
+ timeout_ms=timeout_ms,
926
+ )
927
+
928
+ if retries == UNSET:
929
+ if self.sdk_configuration.retry_config is not UNSET:
930
+ retries = self.sdk_configuration.retry_config
931
+ else:
932
+ retries = utils.RetryConfig(
933
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
934
+ )
935
+
936
+ retry_config = None
937
+ if isinstance(retries, utils.RetryConfig):
938
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
939
+
940
+ http_res = self.do_request(
941
+ hook_ctx=HookContext(
942
+ config=self.sdk_configuration,
943
+ base_url=base_url or "",
944
+ operation_id="getAggregateTechnicalIndicators",
945
+ oauth2_scopes=["market:supplemental"],
946
+ security_source=self.sdk_configuration.security,
947
+ tags=["Technical Analysis"],
948
+ extensions=None,
949
+ ),
950
+ request=req,
951
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
952
+ retry_config=retry_config,
953
+ )
954
+
955
+ response_data: Any = None
956
+ if utils.match_response(http_res, "200", "application/json"):
957
+ return models.GetAggregateTechnicalIndicatorsResponse(
958
+ aggregate_technical_indicators_response=unmarshal_json_response(
959
+ Optional[models.AggregateTechnicalIndicatorsResponse], http_res
960
+ ),
961
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
962
+ )
963
+ if utils.match_response(http_res, "400", "application/json"):
964
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
965
+ response_data.http_meta = models.HTTPMetadata(
966
+ request=req, response=http_res
967
+ )
968
+ raise errors.BadRequest(response_data, http_res)
969
+ if utils.match_response(http_res, "401", "application/json"):
970
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
971
+ response_data.http_meta = models.HTTPMetadata(
972
+ request=req, response=http_res
973
+ )
974
+ raise errors.Unauthorized(response_data, http_res)
975
+ if utils.match_response(http_res, "403", "application/json"):
976
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
977
+ response_data.http_meta = models.HTTPMetadata(
978
+ request=req, response=http_res
979
+ )
980
+ raise errors.Forbidden(response_data, http_res)
981
+ if utils.match_response(http_res, "404", "application/json"):
982
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
983
+ response_data.http_meta = models.HTTPMetadata(
984
+ request=req, response=http_res
985
+ )
986
+ raise errors.NotFound(response_data, http_res)
987
+ if utils.match_response(http_res, "500", "application/json"):
988
+ response_data = unmarshal_json_response(
989
+ errors.InternalServerErrorUnion, http_res
990
+ )
991
+ response_data.http_meta = models.HTTPMetadata(
992
+ request=req, response=http_res
993
+ )
994
+ raise errors.InternalServerError(response_data, http_res)
995
+ if utils.match_response(http_res, "4XX", "*"):
996
+ http_res_text = utils.stream_to_text(http_res)
997
+ raise errors.APIError("API error occurred", http_res, http_res_text)
998
+ if utils.match_response(http_res, "5XX", "*"):
999
+ http_res_text = utils.stream_to_text(http_res)
1000
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1001
+
1002
+ raise errors.APIError("Unexpected response received", http_res)
1003
+
1004
+ async def get_aggregate_technical_indicators_async(
1005
+ self,
1006
+ *,
1007
+ symbol: str,
1008
+ resolution: models.GetAggregateTechnicalIndicatorsResolution,
1009
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1010
+ server_url: Optional[str] = None,
1011
+ timeout_ms: Optional[int] = None,
1012
+ http_headers: Optional[Mapping[str, str]] = None,
1013
+ ) -> models.GetAggregateTechnicalIndicatorsResponse:
1014
+ r"""Get Aggregate Technical Indicators
1015
+
1016
+ Retrieve aggregate technical indicator signals combining moving averages, oscillators, and momentum indicators for overall buy/sell recommendations.
1017
+
1018
+ If set, this operation will use `client_id` from the global security.
1019
+
1020
+ :param symbol: Stock ticker to query. Send the plain uppercase symbol exactly as you'd type it on a brokerage screen, e.g. `AAPL`, `MSFT`, `TSLA`.
1021
+ :param resolution: How long each bar covers. Supported values are minutes (`1`, `5`, `15`, `30`, `60`) or daily/weekly/monthly (`D`, `W`, `M`). Other values return 400 Bad Request with error code `VALIDATION_ERROR`.
1022
+ :param retries: Override the default retry configuration for this method
1023
+ :param server_url: Override the default server URL for this method
1024
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1025
+ :param http_headers: Additional headers to set or replace on requests.
1026
+ """
1027
+ base_url = None
1028
+ url_variables = None
1029
+ if timeout_ms is None:
1030
+ timeout_ms = self.sdk_configuration.timeout_ms
1031
+
1032
+ if timeout_ms is None:
1033
+ timeout_ms = 30000
1034
+
1035
+ if server_url is not None:
1036
+ base_url = server_url
1037
+ else:
1038
+ base_url = self._get_url(base_url, url_variables)
1039
+
1040
+ request = models.GetAggregateTechnicalIndicatorsRequest(
1041
+ symbol=symbol,
1042
+ resolution=resolution,
1043
+ )
1044
+
1045
+ req = self._build_request_async(
1046
+ method="GET",
1047
+ path="/v1/scan/technical-indicator",
1048
+ base_url=base_url,
1049
+ url_variables=url_variables,
1050
+ request=request,
1051
+ request_body_required=False,
1052
+ request_has_path_params=False,
1053
+ request_has_query_params=True,
1054
+ user_agent_header="user-agent",
1055
+ accept_header_value="application/json",
1056
+ http_headers=http_headers,
1057
+ security=self.sdk_configuration.security,
1058
+ allow_empty_value=None,
1059
+ allowed_fields=["client_id"],
1060
+ timeout_ms=timeout_ms,
1061
+ )
1062
+
1063
+ if retries == UNSET:
1064
+ if self.sdk_configuration.retry_config is not UNSET:
1065
+ retries = self.sdk_configuration.retry_config
1066
+ else:
1067
+ retries = utils.RetryConfig(
1068
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
1069
+ )
1070
+
1071
+ retry_config = None
1072
+ if isinstance(retries, utils.RetryConfig):
1073
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1074
+
1075
+ http_res = await self.do_request_async(
1076
+ hook_ctx=HookContext(
1077
+ config=self.sdk_configuration,
1078
+ base_url=base_url or "",
1079
+ operation_id="getAggregateTechnicalIndicators",
1080
+ oauth2_scopes=["market:supplemental"],
1081
+ security_source=self.sdk_configuration.security,
1082
+ tags=["Technical Analysis"],
1083
+ extensions=None,
1084
+ ),
1085
+ request=req,
1086
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1087
+ retry_config=retry_config,
1088
+ )
1089
+
1090
+ response_data: Any = None
1091
+ if utils.match_response(http_res, "200", "application/json"):
1092
+ return models.GetAggregateTechnicalIndicatorsResponse(
1093
+ aggregate_technical_indicators_response=unmarshal_json_response(
1094
+ Optional[models.AggregateTechnicalIndicatorsResponse], http_res
1095
+ ),
1096
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1097
+ )
1098
+ if utils.match_response(http_res, "400", "application/json"):
1099
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1100
+ response_data.http_meta = models.HTTPMetadata(
1101
+ request=req, response=http_res
1102
+ )
1103
+ raise errors.BadRequest(response_data, http_res)
1104
+ if utils.match_response(http_res, "401", "application/json"):
1105
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1106
+ response_data.http_meta = models.HTTPMetadata(
1107
+ request=req, response=http_res
1108
+ )
1109
+ raise errors.Unauthorized(response_data, http_res)
1110
+ if utils.match_response(http_res, "403", "application/json"):
1111
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1112
+ response_data.http_meta = models.HTTPMetadata(
1113
+ request=req, response=http_res
1114
+ )
1115
+ raise errors.Forbidden(response_data, http_res)
1116
+ if utils.match_response(http_res, "404", "application/json"):
1117
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1118
+ response_data.http_meta = models.HTTPMetadata(
1119
+ request=req, response=http_res
1120
+ )
1121
+ raise errors.NotFound(response_data, http_res)
1122
+ if utils.match_response(http_res, "500", "application/json"):
1123
+ response_data = unmarshal_json_response(
1124
+ errors.InternalServerErrorUnion, http_res
1125
+ )
1126
+ response_data.http_meta = models.HTTPMetadata(
1127
+ request=req, response=http_res
1128
+ )
1129
+ raise errors.InternalServerError(response_data, http_res)
1130
+ if utils.match_response(http_res, "4XX", "*"):
1131
+ http_res_text = await utils.stream_to_text_async(http_res)
1132
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1133
+ if utils.match_response(http_res, "5XX", "*"):
1134
+ http_res_text = await utils.stream_to_text_async(http_res)
1135
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1136
+
1137
+ raise errors.APIError("Unexpected response received", http_res)