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,192 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 7d00058f41aa
3
+
4
+ from __future__ import annotations
5
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
6
+ import pydantic
7
+ from pydantic import model_serializer
8
+ from typing import Optional
9
+ from typing_extensions import Annotated, NotRequired, TypedDict
10
+
11
+
12
+ class CountTypedDict(TypedDict):
13
+ r"""Number of indicators giving each signal."""
14
+
15
+ buy: NotRequired[int]
16
+ r"""Number of indicators giving a buy signal."""
17
+ neutral: NotRequired[int]
18
+ r"""Number of indicators giving a neutral signal."""
19
+ sell: NotRequired[int]
20
+ r"""Number of indicators giving a sell signal."""
21
+
22
+
23
+ class Count(BaseModel):
24
+ r"""Number of indicators giving each signal."""
25
+
26
+ buy: Optional[int] = None
27
+ r"""Number of indicators giving a buy signal."""
28
+
29
+ neutral: Optional[int] = None
30
+ r"""Number of indicators giving a neutral signal."""
31
+
32
+ sell: Optional[int] = None
33
+ r"""Number of indicators giving a sell signal."""
34
+
35
+ @model_serializer(mode="wrap")
36
+ def serialize_model(self, handler):
37
+ optional_fields = set(["buy", "neutral", "sell"])
38
+ serialized = handler(self)
39
+ m = {}
40
+
41
+ for n, f in type(self).model_fields.items():
42
+ k = f.alias or n
43
+ val = serialized.get(k, serialized.get(n))
44
+
45
+ if val != UNSET_SENTINEL:
46
+ if val is not None or k not in optional_fields:
47
+ m[k] = val
48
+
49
+ return m
50
+
51
+
52
+ class TechnicalAnalysisTypedDict(TypedDict):
53
+ r"""Aggregate technical analysis summary."""
54
+
55
+ count: NotRequired[CountTypedDict]
56
+ r"""Number of indicators giving each signal."""
57
+ signal: NotRequired[str]
58
+ r"""Overall aggregate signal."""
59
+
60
+
61
+ class TechnicalAnalysis(BaseModel):
62
+ r"""Aggregate technical analysis summary."""
63
+
64
+ count: Optional[Count] = None
65
+ r"""Number of indicators giving each signal."""
66
+
67
+ signal: Optional[str] = None
68
+ r"""Overall aggregate signal."""
69
+
70
+ @model_serializer(mode="wrap")
71
+ def serialize_model(self, handler):
72
+ optional_fields = set(["count", "signal"])
73
+ serialized = handler(self)
74
+ m = {}
75
+
76
+ for n, f in type(self).model_fields.items():
77
+ k = f.alias or n
78
+ val = serialized.get(k, serialized.get(n))
79
+
80
+ if val != UNSET_SENTINEL:
81
+ if val is not None or k not in optional_fields:
82
+ m[k] = val
83
+
84
+ return m
85
+
86
+
87
+ class TrendTypedDict(TypedDict):
88
+ r"""Trend strength information."""
89
+
90
+ adx: NotRequired[float]
91
+ r"""Average Directional Index (ADX) value."""
92
+ trending: NotRequired[bool]
93
+ r"""Whether the symbol is trending."""
94
+
95
+
96
+ class Trend(BaseModel):
97
+ r"""Trend strength information."""
98
+
99
+ adx: Optional[float] = None
100
+ r"""Average Directional Index (ADX) value."""
101
+
102
+ trending: Optional[bool] = None
103
+ r"""Whether the symbol is trending."""
104
+
105
+ @model_serializer(mode="wrap")
106
+ def serialize_model(self, handler):
107
+ optional_fields = set(["adx", "trending"])
108
+ serialized = handler(self)
109
+ m = {}
110
+
111
+ for n, f in type(self).model_fields.items():
112
+ k = f.alias or n
113
+ val = serialized.get(k, serialized.get(n))
114
+
115
+ if val != UNSET_SENTINEL:
116
+ if val is not None or k not in optional_fields:
117
+ m[k] = val
118
+
119
+ return m
120
+
121
+
122
+ class AggregateTechnicalIndicatorsResponseDataTypedDict(TypedDict):
123
+ r"""Aggregate indicators payload."""
124
+
125
+ technical_analysis: NotRequired[TechnicalAnalysisTypedDict]
126
+ r"""Aggregate technical analysis summary."""
127
+ trend: NotRequired[TrendTypedDict]
128
+ r"""Trend strength information."""
129
+
130
+
131
+ class AggregateTechnicalIndicatorsResponseData(BaseModel):
132
+ r"""Aggregate indicators payload."""
133
+
134
+ technical_analysis: Annotated[
135
+ Optional[TechnicalAnalysis], pydantic.Field(alias="technicalAnalysis")
136
+ ] = None
137
+ r"""Aggregate technical analysis summary."""
138
+
139
+ trend: Optional[Trend] = None
140
+ r"""Trend strength information."""
141
+
142
+ @model_serializer(mode="wrap")
143
+ def serialize_model(self, handler):
144
+ optional_fields = set(["technicalAnalysis", "trend"])
145
+ serialized = handler(self)
146
+ m = {}
147
+
148
+ for n, f in type(self).model_fields.items():
149
+ k = f.alias or n
150
+ val = serialized.get(k, serialized.get(n))
151
+
152
+ if val != UNSET_SENTINEL:
153
+ if val is not None or k not in optional_fields:
154
+ m[k] = val
155
+
156
+ return m
157
+
158
+
159
+ class AggregateTechnicalIndicatorsResponseTypedDict(TypedDict):
160
+ r"""Aggregate technical indicator signal and trend strength for a symbol and resolution from Finnhub."""
161
+
162
+ data: NotRequired[AggregateTechnicalIndicatorsResponseDataTypedDict]
163
+ r"""Aggregate indicators payload."""
164
+
165
+
166
+ class AggregateTechnicalIndicatorsResponse(BaseModel):
167
+ r"""Aggregate technical indicator signal and trend strength for a symbol and resolution from Finnhub."""
168
+
169
+ data: Optional[AggregateTechnicalIndicatorsResponseData] = None
170
+ r"""Aggregate indicators payload."""
171
+
172
+ @model_serializer(mode="wrap")
173
+ def serialize_model(self, handler):
174
+ optional_fields = set(["data"])
175
+ serialized = handler(self)
176
+ m = {}
177
+
178
+ for n, f in type(self).model_fields.items():
179
+ k = f.alias or n
180
+ val = serialized.get(k, serialized.get(n))
181
+
182
+ if val != UNSET_SENTINEL:
183
+ if val is not None or k not in optional_fields:
184
+ m[k] = val
185
+
186
+ return m
187
+
188
+
189
+ try:
190
+ AggregateTechnicalIndicatorsResponseData.model_rebuild()
191
+ except NameError:
192
+ pass
@@ -0,0 +1,161 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: f69109ec7db3
3
+
4
+ from __future__ import annotations
5
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
6
+ import pydantic
7
+ from pydantic import model_serializer
8
+ from typing import Optional
9
+ from typing_extensions import Annotated, NotRequired, TypedDict
10
+
11
+
12
+ class AnalystInsightItemSecurityTypedDict(TypedDict):
13
+ r"""Security metadata for the company or instrument this analyst insight covers."""
14
+
15
+ cik: NotRequired[str]
16
+ r"""SEC Central Index Key of the covered company."""
17
+ exchange: NotRequired[str]
18
+ r"""Exchange code where the data originates. Format depends on the upstream data source and may use MIC, ISO 10383, or a vendor-specific code."""
19
+ isin: NotRequired[str]
20
+ r"""ISIN of the covered security."""
21
+ name: NotRequired[str]
22
+ r"""Name of the covered company or instrument."""
23
+ symbol: NotRequired[str]
24
+ r"""Ticker symbol of the covered security."""
25
+
26
+
27
+ class AnalystInsightItemSecurity(BaseModel):
28
+ r"""Security metadata for the company or instrument this analyst insight covers."""
29
+
30
+ cik: Optional[str] = None
31
+ r"""SEC Central Index Key of the covered company."""
32
+
33
+ exchange: Optional[str] = None
34
+ r"""Exchange code where the data originates. Format depends on the upstream data source and may use MIC, ISO 10383, or a vendor-specific code."""
35
+
36
+ isin: Optional[str] = None
37
+ r"""ISIN of the covered security."""
38
+
39
+ name: Optional[str] = None
40
+ r"""Name of the covered company or instrument."""
41
+
42
+ symbol: Optional[str] = None
43
+ r"""Ticker symbol of the covered security."""
44
+
45
+ @model_serializer(mode="wrap")
46
+ def serialize_model(self, handler):
47
+ optional_fields = set(["cik", "exchange", "isin", "name", "symbol"])
48
+ serialized = handler(self)
49
+ m = {}
50
+
51
+ for n, f in type(self).model_fields.items():
52
+ k = f.alias or n
53
+ val = serialized.get(k, serialized.get(n))
54
+
55
+ if val != UNSET_SENTINEL:
56
+ if val is not None or k not in optional_fields:
57
+ m[k] = val
58
+
59
+ return m
60
+
61
+
62
+ class AnalystInsightItemTypedDict(TypedDict):
63
+ r"""Single analyst insight (GET /v1/analytics/insights)."""
64
+
65
+ action: NotRequired[str]
66
+ r"""Analyst action such as upgrade, downgrade, initiation, or reiteration. Use it to explain what changed."""
67
+ analyst_insights: NotRequired[str]
68
+ r"""Plain-English analyst note or summary. Show this as the explanation behind the rating action."""
69
+ date_: NotRequired[str]
70
+ r"""Date the analyst insight was published. Use it to sort or filter recent analyst changes."""
71
+ firm: NotRequired[str]
72
+ r"""Research firm that published the insight. Show this so users know the source."""
73
+ firm_id: NotRequired[str]
74
+ r"""Provider identifier for the research firm. Use it for filtering or grouping by firm."""
75
+ id: NotRequired[str]
76
+ r"""Unique insight identifier. Use it for linking, deduping, or storing this analyst insight."""
77
+ pt: NotRequired[str]
78
+ r"""Analyst price target as a decimal string. Use it to show expected upside or downside versus the current price."""
79
+ rating: NotRequired[str]
80
+ r"""Analyst rating label such as Buy, Hold, or Sell. Use it as the business recommendation text."""
81
+ rating_id: NotRequired[str]
82
+ r"""Provider identifier for the rating record. Use it for deduping or linking insight data to rating data."""
83
+ security: NotRequired[AnalystInsightItemSecurityTypedDict]
84
+ r"""Security metadata for the company or instrument this analyst insight covers."""
85
+ updated: NotRequired[int]
86
+ r"""Last updated timestamp from the data provider. Use it to know whether a stored insight has changed."""
87
+
88
+
89
+ class AnalystInsightItem(BaseModel):
90
+ r"""Single analyst insight (GET /v1/analytics/insights)."""
91
+
92
+ action: Optional[str] = None
93
+ r"""Analyst action such as upgrade, downgrade, initiation, or reiteration. Use it to explain what changed."""
94
+
95
+ analyst_insights: Annotated[
96
+ Optional[str], pydantic.Field(alias="analystInsights")
97
+ ] = None
98
+ r"""Plain-English analyst note or summary. Show this as the explanation behind the rating action."""
99
+
100
+ date_: Annotated[Optional[str], pydantic.Field(alias="date")] = None
101
+ r"""Date the analyst insight was published. Use it to sort or filter recent analyst changes."""
102
+
103
+ firm: Optional[str] = None
104
+ r"""Research firm that published the insight. Show this so users know the source."""
105
+
106
+ firm_id: Annotated[Optional[str], pydantic.Field(alias="firmId")] = None
107
+ r"""Provider identifier for the research firm. Use it for filtering or grouping by firm."""
108
+
109
+ id: Optional[str] = None
110
+ r"""Unique insight identifier. Use it for linking, deduping, or storing this analyst insight."""
111
+
112
+ pt: Optional[str] = None
113
+ r"""Analyst price target as a decimal string. Use it to show expected upside or downside versus the current price."""
114
+
115
+ rating: Optional[str] = None
116
+ r"""Analyst rating label such as Buy, Hold, or Sell. Use it as the business recommendation text."""
117
+
118
+ rating_id: Annotated[Optional[str], pydantic.Field(alias="ratingId")] = None
119
+ r"""Provider identifier for the rating record. Use it for deduping or linking insight data to rating data."""
120
+
121
+ security: Optional[AnalystInsightItemSecurity] = None
122
+ r"""Security metadata for the company or instrument this analyst insight covers."""
123
+
124
+ updated: Optional[int] = None
125
+ r"""Last updated timestamp from the data provider. Use it to know whether a stored insight has changed."""
126
+
127
+ @model_serializer(mode="wrap")
128
+ def serialize_model(self, handler):
129
+ optional_fields = set(
130
+ [
131
+ "action",
132
+ "analystInsights",
133
+ "date",
134
+ "firm",
135
+ "firmId",
136
+ "id",
137
+ "pt",
138
+ "rating",
139
+ "ratingId",
140
+ "security",
141
+ "updated",
142
+ ]
143
+ )
144
+ serialized = handler(self)
145
+ m = {}
146
+
147
+ for n, f in type(self).model_fields.items():
148
+ k = f.alias or n
149
+ val = serialized.get(k, serialized.get(n))
150
+
151
+ if val != UNSET_SENTINEL:
152
+ if val is not None or k not in optional_fields:
153
+ m[k] = val
154
+
155
+ return m
156
+
157
+
158
+ try:
159
+ AnalystInsightItem.model_rebuild()
160
+ except NameError:
161
+ pass
@@ -0,0 +1,39 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: b808c7ded529
3
+
4
+ from __future__ import annotations
5
+ from .analystinsightitem import AnalystInsightItem, AnalystInsightItemTypedDict
6
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
7
+ from pydantic import model_serializer
8
+ from typing import List, Optional
9
+ from typing_extensions import NotRequired, TypedDict
10
+
11
+
12
+ class AnalystInsightsResponseTypedDict(TypedDict):
13
+ r"""Response containing analyst insights."""
14
+
15
+ insights: NotRequired[List[AnalystInsightItemTypedDict]]
16
+ r"""Array of analyst insights"""
17
+
18
+
19
+ class AnalystInsightsResponse(BaseModel):
20
+ r"""Response containing analyst insights."""
21
+
22
+ insights: Optional[List[AnalystInsightItem]] = None
23
+ r"""Array of analyst insights"""
24
+
25
+ @model_serializer(mode="wrap")
26
+ def serialize_model(self, handler):
27
+ optional_fields = set(["insights"])
28
+ serialized = handler(self)
29
+ m = {}
30
+
31
+ for n, f in type(self).model_fields.items():
32
+ k = f.alias or n
33
+ val = serialized.get(k, serialized.get(n))
34
+
35
+ if val != UNSET_SENTINEL:
36
+ if val is not None or k not in optional_fields:
37
+ m[k] = val
38
+
39
+ return m
@@ -0,0 +1,123 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 714f616ab5cf
3
+
4
+ from __future__ import annotations
5
+ from enum import Enum
6
+ from finance_dev import models, utils
7
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
8
+ from pydantic import field_serializer, model_serializer
9
+ from typing import Any, Dict, Optional
10
+ from typing_extensions import NotRequired, TypedDict
11
+
12
+
13
+ class AppErrorType(str, Enum, metaclass=utils.OpenEnumMeta):
14
+ r"""Categorical error type. Use this for branching error-handling logic; the values are stable across endpoints:
15
+ - `VALIDATION` — request body or query parameters failed validation.
16
+ - `AUTHENTICATION` — missing, invalid, or expired token.
17
+ - `AUTHORIZATION` — token is valid but lacks the required scope/permission.
18
+ - `NOT_FOUND` — the requested resource does not exist.
19
+ - `CONFLICT` — request conflicts with current state (e.g. duplicate).
20
+ - `INTERNAL` — server-side error; retry or contact support.
21
+ - `TIMEOUT` — operation took too long.
22
+ - `UNKNOWN` — uncategorized error; check `message`.
23
+ (Additional categorical values may appear in service-specific responses.)
24
+ """
25
+
26
+ UNKNOWN = "UNKNOWN"
27
+ VALIDATION = "VALIDATION"
28
+ AUTHENTICATION = "AUTHENTICATION"
29
+ AUTHORIZATION = "AUTHORIZATION"
30
+ NOT_FOUND = "NOT_FOUND"
31
+ CONFLICT = "CONFLICT"
32
+ INTERNAL = "INTERNAL"
33
+ TIMEOUT = "TIMEOUT"
34
+ RATE_LIMIT = "RATE_LIMIT"
35
+ BAD_REQUEST = "BAD_REQUEST"
36
+ DATABASE = "DATABASE"
37
+ EXTERNAL_SERVICE = "EXTERNAL_SERVICE"
38
+ PRECONDITION_FAILED = "PRECONDITION_FAILED"
39
+ SERVICE_UNAVAILABLE = "SERVICE_UNAVAILABLE"
40
+ GRPC = "GRPC"
41
+ QUEUE = "QUEUE"
42
+ JSON_PARSING = "JSON_PARSING"
43
+
44
+
45
+ class AppErrorTypedDict(TypedDict):
46
+ r"""Structured application error returned inside an `ErrorEnvelope`."""
47
+
48
+ code: str
49
+ r"""Machine-readable code, e.g. `SYMBOL_REQUIRED`, `EVENT_NOT_FOUND`."""
50
+ message: str
51
+ r"""Error detail as a string. Exact message content is not fixed and should not be hard-coded."""
52
+ type: AppErrorType
53
+ r"""Categorical error type. Use this for branching error-handling logic; the values are stable across endpoints:
54
+ - `VALIDATION` — request body or query parameters failed validation.
55
+ - `AUTHENTICATION` — missing, invalid, or expired token.
56
+ - `AUTHORIZATION` — token is valid but lacks the required scope/permission.
57
+ - `NOT_FOUND` — the requested resource does not exist.
58
+ - `CONFLICT` — request conflicts with current state (e.g. duplicate).
59
+ - `INTERNAL` — server-side error; retry or contact support.
60
+ - `TIMEOUT` — operation took too long.
61
+ - `UNKNOWN` — uncategorized error; check `message`.
62
+ (Additional categorical values may appear in service-specific responses.)
63
+ """
64
+ details: NotRequired[Dict[str, Any]]
65
+ operation: NotRequired[str]
66
+ request_id: NotRequired[str]
67
+ service: NotRequired[str]
68
+
69
+
70
+ class AppError(BaseModel):
71
+ r"""Structured application error returned inside an `ErrorEnvelope`."""
72
+
73
+ code: str
74
+ r"""Machine-readable code, e.g. `SYMBOL_REQUIRED`, `EVENT_NOT_FOUND`."""
75
+
76
+ message: str
77
+ r"""Error detail as a string. Exact message content is not fixed and should not be hard-coded."""
78
+
79
+ type: AppErrorType
80
+ r"""Categorical error type. Use this for branching error-handling logic; the values are stable across endpoints:
81
+ - `VALIDATION` — request body or query parameters failed validation.
82
+ - `AUTHENTICATION` — missing, invalid, or expired token.
83
+ - `AUTHORIZATION` — token is valid but lacks the required scope/permission.
84
+ - `NOT_FOUND` — the requested resource does not exist.
85
+ - `CONFLICT` — request conflicts with current state (e.g. duplicate).
86
+ - `INTERNAL` — server-side error; retry or contact support.
87
+ - `TIMEOUT` — operation took too long.
88
+ - `UNKNOWN` — uncategorized error; check `message`.
89
+ (Additional categorical values may appear in service-specific responses.)
90
+ """
91
+
92
+ details: Optional[Dict[str, Any]] = None
93
+
94
+ operation: Optional[str] = None
95
+
96
+ request_id: Optional[str] = None
97
+
98
+ service: Optional[str] = None
99
+
100
+ @field_serializer("type")
101
+ def serialize_type(self, value):
102
+ if isinstance(value, str):
103
+ try:
104
+ return models.AppErrorType(value)
105
+ except ValueError:
106
+ return value
107
+ return value
108
+
109
+ @model_serializer(mode="wrap")
110
+ def serialize_model(self, handler):
111
+ optional_fields = set(["details", "operation", "request_id", "service"])
112
+ serialized = handler(self)
113
+ m = {}
114
+
115
+ for n, f in type(self).model_fields.items():
116
+ k = f.alias or n
117
+ val = serialized.get(k, serialized.get(n))
118
+
119
+ if val != UNSET_SENTINEL:
120
+ if val is not None or k not in optional_fields:
121
+ m[k] = val
122
+
123
+ return m
@@ -0,0 +1,58 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 5969d9208386
3
+
4
+ from __future__ import annotations
5
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
6
+ from pydantic import model_serializer
7
+ from typing import Any, Dict, Optional
8
+ from typing_extensions import NotRequired, TypedDict
9
+
10
+
11
+ class AuthenticationErrorDetailTypedDict(TypedDict):
12
+ r"""Structured payload for the nested `error` object. Services using the shared Go error writer emit uppercase `type` values aligned with error categories (for example `VALIDATION`, `BAD_REQUEST`, `AUTHENTICATION`, `AUTHORIZATION`, `NOT_FOUND`, `RATE_LIMIT`, `INTERNAL`)."""
13
+
14
+ code: NotRequired[str]
15
+ r"""Machine-readable code"""
16
+ details: NotRequired[Dict[str, Any]]
17
+ r"""Optional extra context"""
18
+ message: NotRequired[str]
19
+ r"""Error detail as a string. Exact message content is not fixed and should not be hard-coded."""
20
+ request_id: NotRequired[str]
21
+ r"""Request correlation id when provided"""
22
+ type: NotRequired[str]
23
+ r"""Error category emitted by the shared error writer, such as VALIDATION, BAD_REQUEST, AUTHENTICATION, AUTHORIZATION, NOT_FOUND, RATE_LIMIT, or INTERNAL."""
24
+
25
+
26
+ class AuthenticationErrorDetail(BaseModel):
27
+ r"""Structured payload for the nested `error` object. Services using the shared Go error writer emit uppercase `type` values aligned with error categories (for example `VALIDATION`, `BAD_REQUEST`, `AUTHENTICATION`, `AUTHORIZATION`, `NOT_FOUND`, `RATE_LIMIT`, `INTERNAL`)."""
28
+
29
+ code: Optional[str] = None
30
+ r"""Machine-readable code"""
31
+
32
+ details: Optional[Dict[str, Any]] = None
33
+ r"""Optional extra context"""
34
+
35
+ message: Optional[str] = None
36
+ r"""Error detail as a string. Exact message content is not fixed and should not be hard-coded."""
37
+
38
+ request_id: Optional[str] = None
39
+ r"""Request correlation id when provided"""
40
+
41
+ type: Optional[str] = None
42
+ r"""Error category emitted by the shared error writer, such as VALIDATION, BAD_REQUEST, AUTHENTICATION, AUTHORIZATION, NOT_FOUND, RATE_LIMIT, or INTERNAL."""
43
+
44
+ @model_serializer(mode="wrap")
45
+ def serialize_model(self, handler):
46
+ optional_fields = set(["code", "details", "message", "request_id", "type"])
47
+ serialized = handler(self)
48
+ m = {}
49
+
50
+ for n, f in type(self).model_fields.items():
51
+ k = f.alias or n
52
+ val = serialized.get(k, serialized.get(n))
53
+
54
+ if val != UNSET_SENTINEL:
55
+ if val is not None or k not in optional_fields:
56
+ m[k] = val
57
+
58
+ return m
@@ -0,0 +1,96 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: d06e04024df2
3
+
4
+ from __future__ import annotations
5
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
6
+ import pydantic
7
+ from pydantic import model_serializer
8
+ from typing import List, Optional
9
+ from typing_extensions import Annotated, NotRequired, TypedDict
10
+
11
+
12
+ class BankBranchesResponseDataTypedDict(TypedDict):
13
+ address: NotRequired[str]
14
+ r"""Branch address."""
15
+ branch_id: NotRequired[str]
16
+ r"""Branch identifier."""
17
+ date_: NotRequired[str]
18
+ r"""Date the branch was opened, as returned by the provider."""
19
+ state: NotRequired[str]
20
+ r"""Branch state."""
21
+ zip_code: NotRequired[str]
22
+ r"""Branch zip code."""
23
+
24
+
25
+ class BankBranchesResponseData(BaseModel):
26
+ address: Optional[str] = None
27
+ r"""Branch address."""
28
+
29
+ branch_id: Annotated[Optional[str], pydantic.Field(alias="branchId")] = None
30
+ r"""Branch identifier."""
31
+
32
+ date_: Annotated[Optional[str], pydantic.Field(alias="date")] = None
33
+ r"""Date the branch was opened, as returned by the provider."""
34
+
35
+ state: Optional[str] = None
36
+ r"""Branch state."""
37
+
38
+ zip_code: Annotated[Optional[str], pydantic.Field(alias="zipCode")] = None
39
+ r"""Branch zip code."""
40
+
41
+ @model_serializer(mode="wrap")
42
+ def serialize_model(self, handler):
43
+ optional_fields = set(["address", "branchId", "date", "state", "zipCode"])
44
+ serialized = handler(self)
45
+ m = {}
46
+
47
+ for n, f in type(self).model_fields.items():
48
+ k = f.alias or n
49
+ val = serialized.get(k, serialized.get(n))
50
+
51
+ if val != UNSET_SENTINEL:
52
+ if val is not None or k not in optional_fields:
53
+ m[k] = val
54
+
55
+ return m
56
+
57
+
58
+ class BankBranchesResponseTypedDict(TypedDict):
59
+ r"""List of US bank branches for a company, as provided by Finnhub."""
60
+
61
+ data: NotRequired[List[BankBranchesResponseDataTypedDict]]
62
+ r"""Bank branches for the symbol."""
63
+ symbol: NotRequired[str]
64
+ r"""Company ticker symbol."""
65
+
66
+
67
+ class BankBranchesResponse(BaseModel):
68
+ r"""List of US bank branches for a company, as provided by Finnhub."""
69
+
70
+ data: Optional[List[BankBranchesResponseData]] = None
71
+ r"""Bank branches for the symbol."""
72
+
73
+ symbol: Optional[str] = None
74
+ r"""Company ticker symbol."""
75
+
76
+ @model_serializer(mode="wrap")
77
+ def serialize_model(self, handler):
78
+ optional_fields = set(["data", "symbol"])
79
+ serialized = handler(self)
80
+ m = {}
81
+
82
+ for n, f in type(self).model_fields.items():
83
+ k = f.alias or n
84
+ val = serialized.get(k, serialized.get(n))
85
+
86
+ if val != UNSET_SENTINEL:
87
+ if val is not None or k not in optional_fields:
88
+ m[k] = val
89
+
90
+ return m
91
+
92
+
93
+ try:
94
+ BankBranchesResponseData.model_rebuild()
95
+ except NameError:
96
+ pass