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,829 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 3bdc307f8821
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 NewsSDK(BaseSDK):
13
+ def get_news(
14
+ self,
15
+ *,
16
+ symbols: Optional[str] = "SPY",
17
+ topics: Optional[str] = None,
18
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
19
+ server_url: Optional[str] = None,
20
+ timeout_ms: Optional[int] = None,
21
+ http_headers: Optional[Mapping[str, str]] = None,
22
+ ) -> models.GetNewsResponse:
23
+ r"""Get Market News
24
+
25
+ Retrieve real-time market news articles and press releases. Returns combined results from both news and press releases, sorted by timestamp (newest first). Default returns news for SPY if no symbols are specified.
26
+
27
+ If set, this operation will use `client_id` from the global security.
28
+
29
+ :param symbols: Comma-separated list of stock symbols to filter news by. Default is `SPY` when omitted. Maximum 10 symbols per request. Each symbol must be a plain uppercase ticker (e.g. `AAPL,TSLA,NVDA`).
30
+ :param topics: Comma-separated list of topics to filter news. Maximum 10 topics per request. Common topics:
31
+ - `earnings` — earnings releases and reports.
32
+ - `guidance` — forward guidance updates.
33
+ - `mergers_acquisitions` — M&A activity.
34
+ - `dividends` — dividend announcements.
35
+ - `analyst_ratings` — analyst upgrades and downgrades.
36
+ - `ipo` — initial public offerings.
37
+ - `regulatory` — SEC filings, lawsuits, regulatory actions.
38
+
39
+ Topic names depend on the upstream news catalog and may evolve over time.
40
+ :param retries: Override the default retry configuration for this method
41
+ :param server_url: Override the default server URL for this method
42
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
43
+ :param http_headers: Additional headers to set or replace on requests.
44
+ """
45
+ base_url = None
46
+ url_variables = None
47
+ if timeout_ms is None:
48
+ timeout_ms = self.sdk_configuration.timeout_ms
49
+
50
+ if timeout_ms is None:
51
+ timeout_ms = 30000
52
+
53
+ if server_url is not None:
54
+ base_url = server_url
55
+ else:
56
+ base_url = self._get_url(base_url, url_variables)
57
+
58
+ request = models.GetNewsRequest(
59
+ symbols=symbols,
60
+ topics=topics,
61
+ )
62
+
63
+ req = self._build_request(
64
+ method="GET",
65
+ path="/v1/news",
66
+ base_url=base_url,
67
+ url_variables=url_variables,
68
+ request=request,
69
+ request_body_required=False,
70
+ request_has_path_params=False,
71
+ request_has_query_params=True,
72
+ user_agent_header="user-agent",
73
+ accept_header_value="application/json",
74
+ http_headers=http_headers,
75
+ security=self.sdk_configuration.security,
76
+ allow_empty_value=None,
77
+ allowed_fields=["client_id"],
78
+ timeout_ms=timeout_ms,
79
+ )
80
+
81
+ if retries == UNSET:
82
+ if self.sdk_configuration.retry_config is not UNSET:
83
+ retries = self.sdk_configuration.retry_config
84
+ else:
85
+ retries = utils.RetryConfig(
86
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
87
+ )
88
+
89
+ retry_config = None
90
+ if isinstance(retries, utils.RetryConfig):
91
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
92
+
93
+ http_res = self.do_request(
94
+ hook_ctx=HookContext(
95
+ config=self.sdk_configuration,
96
+ base_url=base_url or "",
97
+ operation_id="getNews",
98
+ oauth2_scopes=["market:supplemental"],
99
+ security_source=self.sdk_configuration.security,
100
+ tags=["News"],
101
+ extensions=None,
102
+ ),
103
+ request=req,
104
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
105
+ retry_config=retry_config,
106
+ )
107
+
108
+ response_data: Any = None
109
+ if utils.match_response(http_res, "200", "application/json"):
110
+ return models.GetNewsResponse(
111
+ news_list_response=unmarshal_json_response(
112
+ Optional[models.NewsListResponse], http_res
113
+ ),
114
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
115
+ )
116
+ if utils.match_response(http_res, "400", "application/json"):
117
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
118
+ response_data.http_meta = models.HTTPMetadata(
119
+ request=req, response=http_res
120
+ )
121
+ raise errors.BadRequest(response_data, http_res)
122
+ if utils.match_response(http_res, "401", "application/json"):
123
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
124
+ response_data.http_meta = models.HTTPMetadata(
125
+ request=req, response=http_res
126
+ )
127
+ raise errors.Unauthorized(response_data, http_res)
128
+ if utils.match_response(http_res, "403", "application/json"):
129
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
130
+ response_data.http_meta = models.HTTPMetadata(
131
+ request=req, response=http_res
132
+ )
133
+ raise errors.Forbidden(response_data, http_res)
134
+ if utils.match_response(http_res, "404", "application/json"):
135
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
136
+ response_data.http_meta = models.HTTPMetadata(
137
+ request=req, response=http_res
138
+ )
139
+ raise errors.NotFound(response_data, http_res)
140
+ if utils.match_response(http_res, "500", "application/json"):
141
+ response_data = unmarshal_json_response(
142
+ errors.InternalServerErrorUnion, http_res
143
+ )
144
+ response_data.http_meta = models.HTTPMetadata(
145
+ request=req, response=http_res
146
+ )
147
+ raise errors.InternalServerError(response_data, http_res)
148
+ if utils.match_response(http_res, "4XX", "*"):
149
+ http_res_text = utils.stream_to_text(http_res)
150
+ raise errors.APIError("API error occurred", http_res, http_res_text)
151
+ if utils.match_response(http_res, "5XX", "*"):
152
+ http_res_text = utils.stream_to_text(http_res)
153
+ raise errors.APIError("API error occurred", http_res, http_res_text)
154
+
155
+ raise errors.APIError("Unexpected response received", http_res)
156
+
157
+ async def get_news_async(
158
+ self,
159
+ *,
160
+ symbols: Optional[str] = "SPY",
161
+ topics: Optional[str] = None,
162
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
163
+ server_url: Optional[str] = None,
164
+ timeout_ms: Optional[int] = None,
165
+ http_headers: Optional[Mapping[str, str]] = None,
166
+ ) -> models.GetNewsResponse:
167
+ r"""Get Market News
168
+
169
+ Retrieve real-time market news articles and press releases. Returns combined results from both news and press releases, sorted by timestamp (newest first). Default returns news for SPY if no symbols are specified.
170
+
171
+ If set, this operation will use `client_id` from the global security.
172
+
173
+ :param symbols: Comma-separated list of stock symbols to filter news by. Default is `SPY` when omitted. Maximum 10 symbols per request. Each symbol must be a plain uppercase ticker (e.g. `AAPL,TSLA,NVDA`).
174
+ :param topics: Comma-separated list of topics to filter news. Maximum 10 topics per request. Common topics:
175
+ - `earnings` — earnings releases and reports.
176
+ - `guidance` — forward guidance updates.
177
+ - `mergers_acquisitions` — M&A activity.
178
+ - `dividends` — dividend announcements.
179
+ - `analyst_ratings` — analyst upgrades and downgrades.
180
+ - `ipo` — initial public offerings.
181
+ - `regulatory` — SEC filings, lawsuits, regulatory actions.
182
+
183
+ Topic names depend on the upstream news catalog and may evolve over time.
184
+ :param retries: Override the default retry configuration for this method
185
+ :param server_url: Override the default server URL for this method
186
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
187
+ :param http_headers: Additional headers to set or replace on requests.
188
+ """
189
+ base_url = None
190
+ url_variables = None
191
+ if timeout_ms is None:
192
+ timeout_ms = self.sdk_configuration.timeout_ms
193
+
194
+ if timeout_ms is None:
195
+ timeout_ms = 30000
196
+
197
+ if server_url is not None:
198
+ base_url = server_url
199
+ else:
200
+ base_url = self._get_url(base_url, url_variables)
201
+
202
+ request = models.GetNewsRequest(
203
+ symbols=symbols,
204
+ topics=topics,
205
+ )
206
+
207
+ req = self._build_request_async(
208
+ method="GET",
209
+ path="/v1/news",
210
+ base_url=base_url,
211
+ url_variables=url_variables,
212
+ request=request,
213
+ request_body_required=False,
214
+ request_has_path_params=False,
215
+ request_has_query_params=True,
216
+ user_agent_header="user-agent",
217
+ accept_header_value="application/json",
218
+ http_headers=http_headers,
219
+ security=self.sdk_configuration.security,
220
+ allow_empty_value=None,
221
+ allowed_fields=["client_id"],
222
+ timeout_ms=timeout_ms,
223
+ )
224
+
225
+ if retries == UNSET:
226
+ if self.sdk_configuration.retry_config is not UNSET:
227
+ retries = self.sdk_configuration.retry_config
228
+ else:
229
+ retries = utils.RetryConfig(
230
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
231
+ )
232
+
233
+ retry_config = None
234
+ if isinstance(retries, utils.RetryConfig):
235
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
236
+
237
+ http_res = await self.do_request_async(
238
+ hook_ctx=HookContext(
239
+ config=self.sdk_configuration,
240
+ base_url=base_url or "",
241
+ operation_id="getNews",
242
+ oauth2_scopes=["market:supplemental"],
243
+ security_source=self.sdk_configuration.security,
244
+ tags=["News"],
245
+ extensions=None,
246
+ ),
247
+ request=req,
248
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
249
+ retry_config=retry_config,
250
+ )
251
+
252
+ response_data: Any = None
253
+ if utils.match_response(http_res, "200", "application/json"):
254
+ return models.GetNewsResponse(
255
+ news_list_response=unmarshal_json_response(
256
+ Optional[models.NewsListResponse], http_res
257
+ ),
258
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
259
+ )
260
+ if utils.match_response(http_res, "400", "application/json"):
261
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
262
+ response_data.http_meta = models.HTTPMetadata(
263
+ request=req, response=http_res
264
+ )
265
+ raise errors.BadRequest(response_data, http_res)
266
+ if utils.match_response(http_res, "401", "application/json"):
267
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
268
+ response_data.http_meta = models.HTTPMetadata(
269
+ request=req, response=http_res
270
+ )
271
+ raise errors.Unauthorized(response_data, http_res)
272
+ if utils.match_response(http_res, "403", "application/json"):
273
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
274
+ response_data.http_meta = models.HTTPMetadata(
275
+ request=req, response=http_res
276
+ )
277
+ raise errors.Forbidden(response_data, http_res)
278
+ if utils.match_response(http_res, "404", "application/json"):
279
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
280
+ response_data.http_meta = models.HTTPMetadata(
281
+ request=req, response=http_res
282
+ )
283
+ raise errors.NotFound(response_data, http_res)
284
+ if utils.match_response(http_res, "500", "application/json"):
285
+ response_data = unmarshal_json_response(
286
+ errors.InternalServerErrorUnion, http_res
287
+ )
288
+ response_data.http_meta = models.HTTPMetadata(
289
+ request=req, response=http_res
290
+ )
291
+ raise errors.InternalServerError(response_data, http_res)
292
+ if utils.match_response(http_res, "4XX", "*"):
293
+ http_res_text = await utils.stream_to_text_async(http_res)
294
+ raise errors.APIError("API error occurred", http_res, http_res_text)
295
+ if utils.match_response(http_res, "5XX", "*"):
296
+ http_res_text = await utils.stream_to_text_async(http_res)
297
+ raise errors.APIError("API error occurred", http_res, http_res_text)
298
+
299
+ raise errors.APIError("Unexpected response received", http_res)
300
+
301
+ def get_news_sentiment(
302
+ self,
303
+ *,
304
+ symbol: str,
305
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
306
+ server_url: Optional[str] = None,
307
+ timeout_ms: Optional[int] = None,
308
+ http_headers: Optional[Mapping[str, str]] = None,
309
+ ) -> models.GetNewsSentimentResponse:
310
+ r"""Get News Sentiment
311
+
312
+ Retrieve news sentiment analysis including bullish/bearish indicators, sentiment scores, and media buzz metrics for assessing market mood.
313
+
314
+ If set, this operation will use `client_id` from the global security.
315
+
316
+ :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`.
317
+ :param retries: Override the default retry configuration for this method
318
+ :param server_url: Override the default server URL for this method
319
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
320
+ :param http_headers: Additional headers to set or replace on requests.
321
+ """
322
+ base_url = None
323
+ url_variables = None
324
+ if timeout_ms is None:
325
+ timeout_ms = self.sdk_configuration.timeout_ms
326
+
327
+ if timeout_ms is None:
328
+ timeout_ms = 30000
329
+
330
+ if server_url is not None:
331
+ base_url = server_url
332
+ else:
333
+ base_url = self._get_url(base_url, url_variables)
334
+
335
+ request = models.GetNewsSentimentRequest(
336
+ symbol=symbol,
337
+ )
338
+
339
+ req = self._build_request(
340
+ method="GET",
341
+ path="/v1/news-sentiment",
342
+ base_url=base_url,
343
+ url_variables=url_variables,
344
+ request=request,
345
+ request_body_required=False,
346
+ request_has_path_params=False,
347
+ request_has_query_params=True,
348
+ user_agent_header="user-agent",
349
+ accept_header_value="application/json",
350
+ http_headers=http_headers,
351
+ security=self.sdk_configuration.security,
352
+ allow_empty_value=None,
353
+ allowed_fields=["client_id"],
354
+ timeout_ms=timeout_ms,
355
+ )
356
+
357
+ if retries == UNSET:
358
+ if self.sdk_configuration.retry_config is not UNSET:
359
+ retries = self.sdk_configuration.retry_config
360
+ else:
361
+ retries = utils.RetryConfig(
362
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
363
+ )
364
+
365
+ retry_config = None
366
+ if isinstance(retries, utils.RetryConfig):
367
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
368
+
369
+ http_res = self.do_request(
370
+ hook_ctx=HookContext(
371
+ config=self.sdk_configuration,
372
+ base_url=base_url or "",
373
+ operation_id="getNewsSentiment",
374
+ oauth2_scopes=["market:supplemental"],
375
+ security_source=self.sdk_configuration.security,
376
+ tags=["News"],
377
+ extensions=None,
378
+ ),
379
+ request=req,
380
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
381
+ retry_config=retry_config,
382
+ )
383
+
384
+ response_data: Any = None
385
+ if utils.match_response(http_res, "200", "application/json"):
386
+ return models.GetNewsSentimentResponse(
387
+ news_sentiment_response=unmarshal_json_response(
388
+ Optional[models.NewsSentimentResponse], http_res
389
+ ),
390
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
391
+ )
392
+ if utils.match_response(http_res, "400", "application/json"):
393
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
394
+ response_data.http_meta = models.HTTPMetadata(
395
+ request=req, response=http_res
396
+ )
397
+ raise errors.BadRequest(response_data, http_res)
398
+ if utils.match_response(http_res, "401", "application/json"):
399
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
400
+ response_data.http_meta = models.HTTPMetadata(
401
+ request=req, response=http_res
402
+ )
403
+ raise errors.Unauthorized(response_data, http_res)
404
+ if utils.match_response(http_res, "403", "application/json"):
405
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
406
+ response_data.http_meta = models.HTTPMetadata(
407
+ request=req, response=http_res
408
+ )
409
+ raise errors.Forbidden(response_data, http_res)
410
+ if utils.match_response(http_res, "404", "application/json"):
411
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
412
+ response_data.http_meta = models.HTTPMetadata(
413
+ request=req, response=http_res
414
+ )
415
+ raise errors.NotFound(response_data, http_res)
416
+ if utils.match_response(http_res, "500", "application/json"):
417
+ response_data = unmarshal_json_response(
418
+ errors.InternalServerErrorUnion, http_res
419
+ )
420
+ response_data.http_meta = models.HTTPMetadata(
421
+ request=req, response=http_res
422
+ )
423
+ raise errors.InternalServerError(response_data, http_res)
424
+ if utils.match_response(http_res, "4XX", "*"):
425
+ http_res_text = utils.stream_to_text(http_res)
426
+ raise errors.APIError("API error occurred", http_res, http_res_text)
427
+ if utils.match_response(http_res, "5XX", "*"):
428
+ http_res_text = utils.stream_to_text(http_res)
429
+ raise errors.APIError("API error occurred", http_res, http_res_text)
430
+
431
+ raise errors.APIError("Unexpected response received", http_res)
432
+
433
+ async def get_news_sentiment_async(
434
+ self,
435
+ *,
436
+ symbol: str,
437
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
438
+ server_url: Optional[str] = None,
439
+ timeout_ms: Optional[int] = None,
440
+ http_headers: Optional[Mapping[str, str]] = None,
441
+ ) -> models.GetNewsSentimentResponse:
442
+ r"""Get News Sentiment
443
+
444
+ Retrieve news sentiment analysis including bullish/bearish indicators, sentiment scores, and media buzz metrics for assessing market mood.
445
+
446
+ If set, this operation will use `client_id` from the global security.
447
+
448
+ :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`.
449
+ :param retries: Override the default retry configuration for this method
450
+ :param server_url: Override the default server URL for this method
451
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
452
+ :param http_headers: Additional headers to set or replace on requests.
453
+ """
454
+ base_url = None
455
+ url_variables = None
456
+ if timeout_ms is None:
457
+ timeout_ms = self.sdk_configuration.timeout_ms
458
+
459
+ if timeout_ms is None:
460
+ timeout_ms = 30000
461
+
462
+ if server_url is not None:
463
+ base_url = server_url
464
+ else:
465
+ base_url = self._get_url(base_url, url_variables)
466
+
467
+ request = models.GetNewsSentimentRequest(
468
+ symbol=symbol,
469
+ )
470
+
471
+ req = self._build_request_async(
472
+ method="GET",
473
+ path="/v1/news-sentiment",
474
+ base_url=base_url,
475
+ url_variables=url_variables,
476
+ request=request,
477
+ request_body_required=False,
478
+ request_has_path_params=False,
479
+ request_has_query_params=True,
480
+ user_agent_header="user-agent",
481
+ accept_header_value="application/json",
482
+ http_headers=http_headers,
483
+ security=self.sdk_configuration.security,
484
+ allow_empty_value=None,
485
+ allowed_fields=["client_id"],
486
+ timeout_ms=timeout_ms,
487
+ )
488
+
489
+ if retries == UNSET:
490
+ if self.sdk_configuration.retry_config is not UNSET:
491
+ retries = self.sdk_configuration.retry_config
492
+ else:
493
+ retries = utils.RetryConfig(
494
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
495
+ )
496
+
497
+ retry_config = None
498
+ if isinstance(retries, utils.RetryConfig):
499
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
500
+
501
+ http_res = await self.do_request_async(
502
+ hook_ctx=HookContext(
503
+ config=self.sdk_configuration,
504
+ base_url=base_url or "",
505
+ operation_id="getNewsSentiment",
506
+ oauth2_scopes=["market:supplemental"],
507
+ security_source=self.sdk_configuration.security,
508
+ tags=["News"],
509
+ extensions=None,
510
+ ),
511
+ request=req,
512
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
513
+ retry_config=retry_config,
514
+ )
515
+
516
+ response_data: Any = None
517
+ if utils.match_response(http_res, "200", "application/json"):
518
+ return models.GetNewsSentimentResponse(
519
+ news_sentiment_response=unmarshal_json_response(
520
+ Optional[models.NewsSentimentResponse], http_res
521
+ ),
522
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
523
+ )
524
+ if utils.match_response(http_res, "400", "application/json"):
525
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
526
+ response_data.http_meta = models.HTTPMetadata(
527
+ request=req, response=http_res
528
+ )
529
+ raise errors.BadRequest(response_data, http_res)
530
+ if utils.match_response(http_res, "401", "application/json"):
531
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
532
+ response_data.http_meta = models.HTTPMetadata(
533
+ request=req, response=http_res
534
+ )
535
+ raise errors.Unauthorized(response_data, http_res)
536
+ if utils.match_response(http_res, "403", "application/json"):
537
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
538
+ response_data.http_meta = models.HTTPMetadata(
539
+ request=req, response=http_res
540
+ )
541
+ raise errors.Forbidden(response_data, http_res)
542
+ if utils.match_response(http_res, "404", "application/json"):
543
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
544
+ response_data.http_meta = models.HTTPMetadata(
545
+ request=req, response=http_res
546
+ )
547
+ raise errors.NotFound(response_data, http_res)
548
+ if utils.match_response(http_res, "500", "application/json"):
549
+ response_data = unmarshal_json_response(
550
+ errors.InternalServerErrorUnion, http_res
551
+ )
552
+ response_data.http_meta = models.HTTPMetadata(
553
+ request=req, response=http_res
554
+ )
555
+ raise errors.InternalServerError(response_data, http_res)
556
+ if utils.match_response(http_res, "4XX", "*"):
557
+ http_res_text = await utils.stream_to_text_async(http_res)
558
+ raise errors.APIError("API error occurred", http_res, http_res_text)
559
+ if utils.match_response(http_res, "5XX", "*"):
560
+ http_res_text = await utils.stream_to_text_async(http_res)
561
+ raise errors.APIError("API error occurred", http_res, http_res_text)
562
+
563
+ raise errors.APIError("Unexpected response received", http_res)
564
+
565
+ def get_news_by_id(
566
+ self,
567
+ *,
568
+ id: str,
569
+ news_type: models.NewsTypeEnum,
570
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
571
+ server_url: Optional[str] = None,
572
+ timeout_ms: Optional[int] = None,
573
+ http_headers: Optional[Mapping[str, str]] = None,
574
+ ) -> models.GetNewsByIDResponse:
575
+ r"""Get News by ID
576
+
577
+ Retrieve a specific news article or press release by its unique ID. Returns detailed information about a single news item. The ID must be numeric and newsType must be either 'news' or 'press_release'.
578
+
579
+ If set, this operation will use `client_id` from the global security.
580
+
581
+ :param id: Unique news item ID (must be numeric)
582
+ :param news_type: Type of news item to retrieve. Must be either 'news' or 'press_release'.
583
+ :param retries: Override the default retry configuration for this method
584
+ :param server_url: Override the default server URL for this method
585
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
586
+ :param http_headers: Additional headers to set or replace on requests.
587
+ """
588
+ base_url = None
589
+ url_variables = None
590
+ if timeout_ms is None:
591
+ timeout_ms = self.sdk_configuration.timeout_ms
592
+
593
+ if timeout_ms is None:
594
+ timeout_ms = 30000
595
+
596
+ if server_url is not None:
597
+ base_url = server_url
598
+ else:
599
+ base_url = self._get_url(base_url, url_variables)
600
+
601
+ request = models.GetNewsByIDRequest(
602
+ id=id,
603
+ news_type=news_type,
604
+ )
605
+
606
+ req = self._build_request(
607
+ method="GET",
608
+ path="/v1/news/{id}",
609
+ base_url=base_url,
610
+ url_variables=url_variables,
611
+ request=request,
612
+ request_body_required=False,
613
+ request_has_path_params=True,
614
+ request_has_query_params=True,
615
+ user_agent_header="user-agent",
616
+ accept_header_value="application/json",
617
+ http_headers=http_headers,
618
+ security=self.sdk_configuration.security,
619
+ allow_empty_value=None,
620
+ allowed_fields=["client_id"],
621
+ timeout_ms=timeout_ms,
622
+ )
623
+
624
+ if retries == UNSET:
625
+ if self.sdk_configuration.retry_config is not UNSET:
626
+ retries = self.sdk_configuration.retry_config
627
+ else:
628
+ retries = utils.RetryConfig(
629
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
630
+ )
631
+
632
+ retry_config = None
633
+ if isinstance(retries, utils.RetryConfig):
634
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
635
+
636
+ http_res = self.do_request(
637
+ hook_ctx=HookContext(
638
+ config=self.sdk_configuration,
639
+ base_url=base_url or "",
640
+ operation_id="getNewsById",
641
+ oauth2_scopes=["market:supplemental"],
642
+ security_source=self.sdk_configuration.security,
643
+ tags=["News"],
644
+ extensions=None,
645
+ ),
646
+ request=req,
647
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
648
+ retry_config=retry_config,
649
+ )
650
+
651
+ response_data: Any = None
652
+ if utils.match_response(http_res, "200", "application/json"):
653
+ return models.GetNewsByIDResponse(
654
+ news_item=unmarshal_json_response(Optional[models.NewsItem], http_res),
655
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
656
+ )
657
+ if utils.match_response(http_res, "400", "application/json"):
658
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
659
+ response_data.http_meta = models.HTTPMetadata(
660
+ request=req, response=http_res
661
+ )
662
+ raise errors.BadRequest(response_data, http_res)
663
+ if utils.match_response(http_res, "401", "application/json"):
664
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
665
+ response_data.http_meta = models.HTTPMetadata(
666
+ request=req, response=http_res
667
+ )
668
+ raise errors.Unauthorized(response_data, http_res)
669
+ if utils.match_response(http_res, "403", "application/json"):
670
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
671
+ response_data.http_meta = models.HTTPMetadata(
672
+ request=req, response=http_res
673
+ )
674
+ raise errors.Forbidden(response_data, http_res)
675
+ if utils.match_response(http_res, "404", "application/json"):
676
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
677
+ response_data.http_meta = models.HTTPMetadata(
678
+ request=req, response=http_res
679
+ )
680
+ raise errors.NotFound(response_data, http_res)
681
+ if utils.match_response(http_res, "500", "application/json"):
682
+ response_data = unmarshal_json_response(
683
+ errors.InternalServerErrorUnion, http_res
684
+ )
685
+ response_data.http_meta = models.HTTPMetadata(
686
+ request=req, response=http_res
687
+ )
688
+ raise errors.InternalServerError(response_data, http_res)
689
+ if utils.match_response(http_res, "4XX", "*"):
690
+ http_res_text = utils.stream_to_text(http_res)
691
+ raise errors.APIError("API error occurred", http_res, http_res_text)
692
+ if utils.match_response(http_res, "5XX", "*"):
693
+ http_res_text = utils.stream_to_text(http_res)
694
+ raise errors.APIError("API error occurred", http_res, http_res_text)
695
+
696
+ raise errors.APIError("Unexpected response received", http_res)
697
+
698
+ async def get_news_by_id_async(
699
+ self,
700
+ *,
701
+ id: str,
702
+ news_type: models.NewsTypeEnum,
703
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
704
+ server_url: Optional[str] = None,
705
+ timeout_ms: Optional[int] = None,
706
+ http_headers: Optional[Mapping[str, str]] = None,
707
+ ) -> models.GetNewsByIDResponse:
708
+ r"""Get News by ID
709
+
710
+ Retrieve a specific news article or press release by its unique ID. Returns detailed information about a single news item. The ID must be numeric and newsType must be either 'news' or 'press_release'.
711
+
712
+ If set, this operation will use `client_id` from the global security.
713
+
714
+ :param id: Unique news item ID (must be numeric)
715
+ :param news_type: Type of news item to retrieve. Must be either 'news' or 'press_release'.
716
+ :param retries: Override the default retry configuration for this method
717
+ :param server_url: Override the default server URL for this method
718
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
719
+ :param http_headers: Additional headers to set or replace on requests.
720
+ """
721
+ base_url = None
722
+ url_variables = None
723
+ if timeout_ms is None:
724
+ timeout_ms = self.sdk_configuration.timeout_ms
725
+
726
+ if timeout_ms is None:
727
+ timeout_ms = 30000
728
+
729
+ if server_url is not None:
730
+ base_url = server_url
731
+ else:
732
+ base_url = self._get_url(base_url, url_variables)
733
+
734
+ request = models.GetNewsByIDRequest(
735
+ id=id,
736
+ news_type=news_type,
737
+ )
738
+
739
+ req = self._build_request_async(
740
+ method="GET",
741
+ path="/v1/news/{id}",
742
+ base_url=base_url,
743
+ url_variables=url_variables,
744
+ request=request,
745
+ request_body_required=False,
746
+ request_has_path_params=True,
747
+ request_has_query_params=True,
748
+ user_agent_header="user-agent",
749
+ accept_header_value="application/json",
750
+ http_headers=http_headers,
751
+ security=self.sdk_configuration.security,
752
+ allow_empty_value=None,
753
+ allowed_fields=["client_id"],
754
+ timeout_ms=timeout_ms,
755
+ )
756
+
757
+ if retries == UNSET:
758
+ if self.sdk_configuration.retry_config is not UNSET:
759
+ retries = self.sdk_configuration.retry_config
760
+ else:
761
+ retries = utils.RetryConfig(
762
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
763
+ )
764
+
765
+ retry_config = None
766
+ if isinstance(retries, utils.RetryConfig):
767
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
768
+
769
+ http_res = await self.do_request_async(
770
+ hook_ctx=HookContext(
771
+ config=self.sdk_configuration,
772
+ base_url=base_url or "",
773
+ operation_id="getNewsById",
774
+ oauth2_scopes=["market:supplemental"],
775
+ security_source=self.sdk_configuration.security,
776
+ tags=["News"],
777
+ extensions=None,
778
+ ),
779
+ request=req,
780
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
781
+ retry_config=retry_config,
782
+ )
783
+
784
+ response_data: Any = None
785
+ if utils.match_response(http_res, "200", "application/json"):
786
+ return models.GetNewsByIDResponse(
787
+ news_item=unmarshal_json_response(Optional[models.NewsItem], http_res),
788
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
789
+ )
790
+ if utils.match_response(http_res, "400", "application/json"):
791
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
792
+ response_data.http_meta = models.HTTPMetadata(
793
+ request=req, response=http_res
794
+ )
795
+ raise errors.BadRequest(response_data, http_res)
796
+ if utils.match_response(http_res, "401", "application/json"):
797
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
798
+ response_data.http_meta = models.HTTPMetadata(
799
+ request=req, response=http_res
800
+ )
801
+ raise errors.Unauthorized(response_data, http_res)
802
+ if utils.match_response(http_res, "403", "application/json"):
803
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
804
+ response_data.http_meta = models.HTTPMetadata(
805
+ request=req, response=http_res
806
+ )
807
+ raise errors.Forbidden(response_data, http_res)
808
+ if utils.match_response(http_res, "404", "application/json"):
809
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
810
+ response_data.http_meta = models.HTTPMetadata(
811
+ request=req, response=http_res
812
+ )
813
+ raise errors.NotFound(response_data, http_res)
814
+ if utils.match_response(http_res, "500", "application/json"):
815
+ response_data = unmarshal_json_response(
816
+ errors.InternalServerErrorUnion, http_res
817
+ )
818
+ response_data.http_meta = models.HTTPMetadata(
819
+ request=req, response=http_res
820
+ )
821
+ raise errors.InternalServerError(response_data, http_res)
822
+ if utils.match_response(http_res, "4XX", "*"):
823
+ http_res_text = await utils.stream_to_text_async(http_res)
824
+ raise errors.APIError("API error occurred", http_res, http_res_text)
825
+ if utils.match_response(http_res, "5XX", "*"):
826
+ http_res_text = await utils.stream_to_text_async(http_res)
827
+ raise errors.APIError("API error occurred", http_res, http_res_text)
828
+
829
+ raise errors.APIError("Unexpected response received", http_res)