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,110 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: d249172a8488
3
+
4
+ from __future__ import annotations
5
+ from .reportedreport import ReportedReport, ReportedReportTypedDict
6
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
7
+ import pydantic
8
+ from pydantic import model_serializer
9
+ from typing import Optional
10
+ from typing_extensions import Annotated, NotRequired, TypedDict
11
+
12
+
13
+ class ReportedFilingTypedDict(TypedDict):
14
+ r"""SEC filing with its reporting period and reported financial data."""
15
+
16
+ accepted_date: NotRequired[str]
17
+ r"""Date and time when the SEC accepted the filing"""
18
+ access_number: NotRequired[str]
19
+ r"""SEC accession number uniquely identifying the filing"""
20
+ cik: NotRequired[str]
21
+ r"""Central Index Key assigned by the SEC to the company"""
22
+ end_date: NotRequired[str]
23
+ r"""End date of the reporting period in YYYY-MM-DD format"""
24
+ filed_date: NotRequired[str]
25
+ r"""Date when the filing was submitted to the SEC"""
26
+ form: NotRequired[str]
27
+ r"""Type of SEC form (e.g., 10-K, 10-Q, 8-K)"""
28
+ quarter: NotRequired[int]
29
+ r"""Fiscal quarter number (1-4)"""
30
+ report: NotRequired[ReportedReportTypedDict]
31
+ r"""Financial statements reported within a filing."""
32
+ start_date: NotRequired[str]
33
+ r"""Start date of the reporting period in YYYY-MM-DD format"""
34
+ symbol: NotRequired[str]
35
+ r"""Stock ticker symbol"""
36
+ year: NotRequired[int]
37
+ r"""Fiscal year of the report"""
38
+
39
+
40
+ class ReportedFiling(BaseModel):
41
+ r"""SEC filing with its reporting period and reported financial data."""
42
+
43
+ accepted_date: Annotated[Optional[str], pydantic.Field(alias="acceptedDate")] = None
44
+ r"""Date and time when the SEC accepted the filing"""
45
+
46
+ access_number: Annotated[Optional[str], pydantic.Field(alias="accessNumber")] = None
47
+ r"""SEC accession number uniquely identifying the filing"""
48
+
49
+ cik: Optional[str] = None
50
+ r"""Central Index Key assigned by the SEC to the company"""
51
+
52
+ end_date: Annotated[Optional[str], pydantic.Field(alias="endDate")] = None
53
+ r"""End date of the reporting period in YYYY-MM-DD format"""
54
+
55
+ filed_date: Annotated[Optional[str], pydantic.Field(alias="filedDate")] = None
56
+ r"""Date when the filing was submitted to the SEC"""
57
+
58
+ form: Optional[str] = None
59
+ r"""Type of SEC form (e.g., 10-K, 10-Q, 8-K)"""
60
+
61
+ quarter: Optional[int] = None
62
+ r"""Fiscal quarter number (1-4)"""
63
+
64
+ report: Optional[ReportedReport] = None
65
+ r"""Financial statements reported within a filing."""
66
+
67
+ start_date: Annotated[Optional[str], pydantic.Field(alias="startDate")] = None
68
+ r"""Start date of the reporting period in YYYY-MM-DD format"""
69
+
70
+ symbol: Optional[str] = None
71
+ r"""Stock ticker symbol"""
72
+
73
+ year: Optional[int] = None
74
+ r"""Fiscal year of the report"""
75
+
76
+ @model_serializer(mode="wrap")
77
+ def serialize_model(self, handler):
78
+ optional_fields = set(
79
+ [
80
+ "acceptedDate",
81
+ "accessNumber",
82
+ "cik",
83
+ "endDate",
84
+ "filedDate",
85
+ "form",
86
+ "quarter",
87
+ "report",
88
+ "startDate",
89
+ "symbol",
90
+ "year",
91
+ ]
92
+ )
93
+ serialized = handler(self)
94
+ m = {}
95
+
96
+ for n, f in type(self).model_fields.items():
97
+ k = f.alias or n
98
+ val = serialized.get(k, serialized.get(n))
99
+
100
+ if val != UNSET_SENTINEL:
101
+ if val is not None or k not in optional_fields:
102
+ m[k] = val
103
+
104
+ return m
105
+
106
+
107
+ try:
108
+ ReportedFiling.model_rebuild()
109
+ except NameError:
110
+ pass
@@ -0,0 +1,39 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: ba11fb9e361e
3
+
4
+ from __future__ import annotations
5
+ from .reportedbsitem import ReportedBSItem, ReportedBSItemTypedDict
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 ReportedReportTypedDict(TypedDict):
13
+ r"""Financial statements reported within a filing."""
14
+
15
+ bs: NotRequired[List[ReportedBSItemTypedDict]]
16
+ r"""Balance sheet line items from the reported financial statements"""
17
+
18
+
19
+ class ReportedReport(BaseModel):
20
+ r"""Financial statements reported within a filing."""
21
+
22
+ bs: Optional[List[ReportedBSItem]] = None
23
+ r"""Balance sheet line items from the reported financial statements"""
24
+
25
+ @model_serializer(mode="wrap")
26
+ def serialize_model(self, handler):
27
+ optional_fields = set(["bs"])
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,16 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 1b7e145c88bb
3
+
4
+ from __future__ import annotations
5
+ from enum import Enum
6
+ from finance_dev import utils
7
+
8
+
9
+ class ReportingFrequency(str, Enum, metaclass=utils.OpenEnumMeta):
10
+ r"""How often the underlying data is reported:
11
+ - `annual` — once per fiscal year (10-K, full-year statements).
12
+ - `quarterly` — once per fiscal quarter (10-Q, quarterly statements).
13
+ """
14
+
15
+ ANNUAL = "annual"
16
+ QUARTERLY = "quarterly"
@@ -0,0 +1,52 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 9d558be82e79
3
+
4
+ from __future__ import annotations
5
+ from .revenuebreakdowndatapoint import (
6
+ RevenueBreakdownDataPoint,
7
+ RevenueBreakdownDataPointTypedDict,
8
+ )
9
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
10
+ from pydantic import model_serializer
11
+ from typing import List, Optional
12
+ from typing_extensions import NotRequired, TypedDict
13
+
14
+
15
+ class RevenueBreakdownAxisTypedDict(TypedDict):
16
+ r"""Revenue breakdown along a single dimension such as product or geography."""
17
+
18
+ axis: NotRequired[str]
19
+ r"""XBRL axis identifier (e.g., product line, geography)"""
20
+ data: NotRequired[List[RevenueBreakdownDataPointTypedDict]]
21
+ r"""Array of revenue data points for this axis"""
22
+ label: NotRequired[str]
23
+ r"""Human-readable label for the axis"""
24
+
25
+
26
+ class RevenueBreakdownAxis(BaseModel):
27
+ r"""Revenue breakdown along a single dimension such as product or geography."""
28
+
29
+ axis: Optional[str] = None
30
+ r"""XBRL axis identifier (e.g., product line, geography)"""
31
+
32
+ data: Optional[List[RevenueBreakdownDataPoint]] = None
33
+ r"""Array of revenue data points for this axis"""
34
+
35
+ label: Optional[str] = None
36
+ r"""Human-readable label for the axis"""
37
+
38
+ @model_serializer(mode="wrap")
39
+ def serialize_model(self, handler):
40
+ optional_fields = set(["axis", "data", "label"])
41
+ serialized = handler(self)
42
+ m = {}
43
+
44
+ for n, f in type(self).model_fields.items():
45
+ k = f.alias or n
46
+ val = serialized.get(k, serialized.get(n))
47
+
48
+ if val != UNSET_SENTINEL:
49
+ if val is not None or k not in optional_fields:
50
+ m[k] = val
51
+
52
+ return m
@@ -0,0 +1,58 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 3f95ebfff4ce
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 Optional
8
+ from typing_extensions import NotRequired, TypedDict
9
+
10
+
11
+ class RevenueBreakdownDataPointTypedDict(TypedDict):
12
+ r"""Revenue for a single segment along a breakdown axis."""
13
+
14
+ label: NotRequired[str]
15
+ r"""Label for the revenue segment"""
16
+ member: NotRequired[str]
17
+ r"""XBRL member identifier for the segment"""
18
+ percentage: NotRequired[float]
19
+ r"""Percentage of total revenue from this segment"""
20
+ unit: NotRequired[str]
21
+ r"""Unit of measurement (e.g., USD)"""
22
+ value: NotRequired[float]
23
+ r"""Revenue value for this segment"""
24
+
25
+
26
+ class RevenueBreakdownDataPoint(BaseModel):
27
+ r"""Revenue for a single segment along a breakdown axis."""
28
+
29
+ label: Optional[str] = None
30
+ r"""Label for the revenue segment"""
31
+
32
+ member: Optional[str] = None
33
+ r"""XBRL member identifier for the segment"""
34
+
35
+ percentage: Optional[float] = None
36
+ r"""Percentage of total revenue from this segment"""
37
+
38
+ unit: Optional[str] = None
39
+ r"""Unit of measurement (e.g., USD)"""
40
+
41
+ value: Optional[float] = None
42
+ r"""Revenue value for this segment"""
43
+
44
+ @model_serializer(mode="wrap")
45
+ def serialize_model(self, handler):
46
+ optional_fields = set(["label", "member", "percentage", "unit", "value"])
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,51 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 402e9e7f78a7
3
+
4
+ from __future__ import annotations
5
+ from .revenuebreakdowninner import RevenueBreakdownInner, RevenueBreakdownInnerTypedDict
6
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
7
+ import pydantic
8
+ from pydantic import model_serializer
9
+ from typing import Optional
10
+ from typing_extensions import Annotated, NotRequired, TypedDict
11
+
12
+
13
+ class RevenueBreakdownEntryTypedDict(TypedDict):
14
+ r"""Revenue breakdown for a single SEC filing."""
15
+
16
+ access_number: NotRequired[str]
17
+ r"""SEC accession number for the filing"""
18
+ breakdown: NotRequired[RevenueBreakdownInnerTypedDict]
19
+ r"""Total revenue for a reporting period with its breakdown by axis."""
20
+
21
+
22
+ class RevenueBreakdownEntry(BaseModel):
23
+ r"""Revenue breakdown for a single SEC filing."""
24
+
25
+ access_number: Annotated[Optional[str], pydantic.Field(alias="accessNumber")] = None
26
+ r"""SEC accession number for the filing"""
27
+
28
+ breakdown: Optional[RevenueBreakdownInner] = None
29
+ r"""Total revenue for a reporting period with its breakdown by axis."""
30
+
31
+ @model_serializer(mode="wrap")
32
+ def serialize_model(self, handler):
33
+ optional_fields = set(["accessNumber", "breakdown"])
34
+ serialized = handler(self)
35
+ m = {}
36
+
37
+ for n, f in type(self).model_fields.items():
38
+ k = f.alias or n
39
+ val = serialized.get(k, serialized.get(n))
40
+
41
+ if val != UNSET_SENTINEL:
42
+ if val is not None or k not in optional_fields:
43
+ m[k] = val
44
+
45
+ return m
46
+
47
+
48
+ try:
49
+ RevenueBreakdownEntry.model_rebuild()
50
+ except NameError:
51
+ pass
@@ -0,0 +1,75 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 70924930526b
3
+
4
+ from __future__ import annotations
5
+ from .revenuebreakdownaxis import RevenueBreakdownAxis, RevenueBreakdownAxisTypedDict
6
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
7
+ import pydantic
8
+ from pydantic import model_serializer
9
+ from typing import List, Optional
10
+ from typing_extensions import Annotated, NotRequired, TypedDict
11
+
12
+
13
+ class RevenueBreakdownInnerTypedDict(TypedDict):
14
+ r"""Total revenue for a reporting period with its breakdown by axis."""
15
+
16
+ concept: NotRequired[str]
17
+ r"""XBRL concept tag for revenue"""
18
+ end_date: NotRequired[str]
19
+ r"""End date of the reporting period in YYYY-MM-DD format"""
20
+ revenue_breakdown: NotRequired[List[RevenueBreakdownAxisTypedDict]]
21
+ r"""Array of revenue breakdown axes (by product, geography, etc.)"""
22
+ start_date: NotRequired[str]
23
+ r"""Start date of the reporting period in YYYY-MM-DD format"""
24
+ unit: NotRequired[str]
25
+ r"""Unit of measurement (e.g., USD)"""
26
+ value: NotRequired[float]
27
+ r"""Total revenue value"""
28
+
29
+
30
+ class RevenueBreakdownInner(BaseModel):
31
+ r"""Total revenue for a reporting period with its breakdown by axis."""
32
+
33
+ concept: Optional[str] = None
34
+ r"""XBRL concept tag for revenue"""
35
+
36
+ end_date: Annotated[Optional[str], pydantic.Field(alias="endDate")] = None
37
+ r"""End date of the reporting period in YYYY-MM-DD format"""
38
+
39
+ revenue_breakdown: Annotated[
40
+ Optional[List[RevenueBreakdownAxis]], pydantic.Field(alias="revenueBreakdown")
41
+ ] = None
42
+ r"""Array of revenue breakdown axes (by product, geography, etc.)"""
43
+
44
+ start_date: Annotated[Optional[str], pydantic.Field(alias="startDate")] = None
45
+ r"""Start date of the reporting period in YYYY-MM-DD format"""
46
+
47
+ unit: Optional[str] = None
48
+ r"""Unit of measurement (e.g., USD)"""
49
+
50
+ value: Optional[float] = None
51
+ r"""Total revenue value"""
52
+
53
+ @model_serializer(mode="wrap")
54
+ def serialize_model(self, handler):
55
+ optional_fields = set(
56
+ ["concept", "endDate", "revenueBreakdown", "startDate", "unit", "value"]
57
+ )
58
+ serialized = handler(self)
59
+ m = {}
60
+
61
+ for n, f in type(self).model_fields.items():
62
+ k = f.alias or n
63
+ val = serialized.get(k, serialized.get(n))
64
+
65
+ if val != UNSET_SENTINEL:
66
+ if val is not None or k not in optional_fields:
67
+ m[k] = val
68
+
69
+ return m
70
+
71
+
72
+ try:
73
+ RevenueBreakdownInner.model_rebuild()
74
+ except NameError:
75
+ pass
@@ -0,0 +1,176 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: b2bb53e9cf51
3
+
4
+ from __future__ import annotations
5
+ from .reportingfrequency import ReportingFrequency
6
+ from finance_dev import models
7
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
8
+ import pydantic
9
+ from pydantic import field_serializer, model_serializer
10
+ from typing import List, Optional
11
+ from typing_extensions import Annotated, NotRequired, TypedDict
12
+
13
+
14
+ class RevenueEstimatesResponseDataTypedDict(TypedDict):
15
+ number_analysts: NotRequired[int]
16
+ r"""Number of analysts contributing to the estimate"""
17
+ period: NotRequired[str]
18
+ r"""End date of the reporting period the estimate applies to"""
19
+ quarter: NotRequired[int]
20
+ r"""Fiscal quarter of the period; 0 for annual estimates"""
21
+ revenue_avg: NotRequired[int]
22
+ r"""Average analyst revenue estimate for the period"""
23
+ revenue_high: NotRequired[int]
24
+ r"""Highest analyst revenue estimate for the period"""
25
+ revenue_low: NotRequired[int]
26
+ r"""Lowest analyst revenue estimate for the period"""
27
+ year: NotRequired[int]
28
+ r"""Fiscal year of the period"""
29
+
30
+
31
+ class RevenueEstimatesResponseData(BaseModel):
32
+ number_analysts: Annotated[
33
+ Optional[int], pydantic.Field(alias="numberAnalysts")
34
+ ] = None
35
+ r"""Number of analysts contributing to the estimate"""
36
+
37
+ period: Optional[str] = None
38
+ r"""End date of the reporting period the estimate applies to"""
39
+
40
+ quarter: Optional[int] = None
41
+ r"""Fiscal quarter of the period; 0 for annual estimates"""
42
+
43
+ revenue_avg: Annotated[Optional[int], pydantic.Field(alias="revenueAvg")] = None
44
+ r"""Average analyst revenue estimate for the period"""
45
+
46
+ revenue_high: Annotated[Optional[int], pydantic.Field(alias="revenueHigh")] = None
47
+ r"""Highest analyst revenue estimate for the period"""
48
+
49
+ revenue_low: Annotated[Optional[int], pydantic.Field(alias="revenueLow")] = None
50
+ r"""Lowest analyst revenue estimate for the period"""
51
+
52
+ year: Optional[int] = None
53
+ r"""Fiscal year of the period"""
54
+
55
+ @model_serializer(mode="wrap")
56
+ def serialize_model(self, handler):
57
+ optional_fields = set(
58
+ [
59
+ "numberAnalysts",
60
+ "period",
61
+ "quarter",
62
+ "revenueAvg",
63
+ "revenueHigh",
64
+ "revenueLow",
65
+ "year",
66
+ ]
67
+ )
68
+ serialized = handler(self)
69
+ m = {}
70
+
71
+ for n, f in type(self).model_fields.items():
72
+ k = f.alias or n
73
+ val = serialized.get(k, serialized.get(n))
74
+
75
+ if val != UNSET_SENTINEL:
76
+ if val is not None or k not in optional_fields:
77
+ m[k] = val
78
+
79
+ return m
80
+
81
+
82
+ class RevenueEstimatesTypedDict(TypedDict):
83
+ r"""revenue estimates container for the symbol"""
84
+
85
+ data: NotRequired[List[RevenueEstimatesResponseDataTypedDict]]
86
+ r"""List of revenue estimates, one per reporting period"""
87
+ freq: NotRequired[ReportingFrequency]
88
+ r"""How often the underlying data is reported:
89
+ - `annual` — once per fiscal year (10-K, full-year statements).
90
+ - `quarterly` — once per fiscal quarter (10-Q, quarterly statements).
91
+ """
92
+ symbol: NotRequired[str]
93
+ r"""Stock ticker symbol"""
94
+
95
+
96
+ class RevenueEstimates(BaseModel):
97
+ r"""revenue estimates container for the symbol"""
98
+
99
+ data: Optional[List[RevenueEstimatesResponseData]] = None
100
+ r"""List of revenue estimates, one per reporting period"""
101
+
102
+ freq: Optional[ReportingFrequency] = None
103
+ r"""How often the underlying data is reported:
104
+ - `annual` — once per fiscal year (10-K, full-year statements).
105
+ - `quarterly` — once per fiscal quarter (10-Q, quarterly statements).
106
+ """
107
+
108
+ symbol: Optional[str] = None
109
+ r"""Stock ticker symbol"""
110
+
111
+ @field_serializer("freq")
112
+ def serialize_freq(self, value):
113
+ if isinstance(value, str):
114
+ try:
115
+ return models.ReportingFrequency(value)
116
+ except ValueError:
117
+ return value
118
+ return value
119
+
120
+ @model_serializer(mode="wrap")
121
+ def serialize_model(self, handler):
122
+ optional_fields = set(["data", "freq", "symbol"])
123
+ serialized = handler(self)
124
+ m = {}
125
+
126
+ for n, f in type(self).model_fields.items():
127
+ k = f.alias or n
128
+ val = serialized.get(k, serialized.get(n))
129
+
130
+ if val != UNSET_SENTINEL:
131
+ if val is not None or k not in optional_fields:
132
+ m[k] = val
133
+
134
+ return m
135
+
136
+
137
+ class RevenueEstimatesResponseTypedDict(TypedDict):
138
+ r"""Analyst consensus revenue estimates for a stock by reporting period, sourced from Finnhub."""
139
+
140
+ revenue_estimates: NotRequired[RevenueEstimatesTypedDict]
141
+ r"""revenue estimates container for the symbol"""
142
+
143
+
144
+ class RevenueEstimatesResponse(BaseModel):
145
+ r"""Analyst consensus revenue estimates for a stock by reporting period, sourced from Finnhub."""
146
+
147
+ revenue_estimates: Annotated[
148
+ Optional[RevenueEstimates], pydantic.Field(alias="revenueEstimates")
149
+ ] = None
150
+ r"""revenue estimates container for the symbol"""
151
+
152
+ @model_serializer(mode="wrap")
153
+ def serialize_model(self, handler):
154
+ optional_fields = set(["revenueEstimates"])
155
+ serialized = handler(self)
156
+ m = {}
157
+
158
+ for n, f in type(self).model_fields.items():
159
+ k = f.alias or n
160
+ val = serialized.get(k, serialized.get(n))
161
+
162
+ if val != UNSET_SENTINEL:
163
+ if val is not None or k not in optional_fields:
164
+ m[k] = val
165
+
166
+ return m
167
+
168
+
169
+ try:
170
+ RevenueEstimatesResponseData.model_rebuild()
171
+ except NameError:
172
+ pass
173
+ try:
174
+ RevenueEstimatesResponse.model_rebuild()
175
+ except NameError:
176
+ pass
@@ -0,0 +1,70 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 900ed6dcc198
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 Optional
10
+ from typing_extensions import NotRequired, TypedDict
11
+
12
+
13
+ class ScreenClauseOperator(str, Enum, metaclass=utils.OpenEnumMeta):
14
+ r"""Comparison: eq, gt, gte, lt, lte, contains"""
15
+
16
+ EQ = "eq"
17
+ GT = "gt"
18
+ GTE = "gte"
19
+ LT = "lt"
20
+ LTE = "lte"
21
+ CONTAINS = "contains"
22
+
23
+
24
+ class ScreenClauseTypedDict(TypedDict):
25
+ r"""One filter condition: field name, comparison operator, and value (string)."""
26
+
27
+ field: NotRequired[str]
28
+ r"""Screener field name (e.g. marketcap, pricetoearnings, roe, volume, open_price, dilutedeps, cashandequivalents)"""
29
+ operator: NotRequired[ScreenClauseOperator]
30
+ r"""Comparison: eq, gt, gte, lt, lte, contains"""
31
+ value: NotRequired[str]
32
+ r"""Value to compare against (e.g. 1000000000, 0.15)"""
33
+
34
+
35
+ class ScreenClause(BaseModel):
36
+ r"""One filter condition: field name, comparison operator, and value (string)."""
37
+
38
+ field: Optional[str] = None
39
+ r"""Screener field name (e.g. marketcap, pricetoearnings, roe, volume, open_price, dilutedeps, cashandequivalents)"""
40
+
41
+ operator: Optional[ScreenClauseOperator] = None
42
+ r"""Comparison: eq, gt, gte, lt, lte, contains"""
43
+
44
+ value: Optional[str] = None
45
+ r"""Value to compare against (e.g. 1000000000, 0.15)"""
46
+
47
+ @field_serializer("operator")
48
+ def serialize_operator(self, value):
49
+ if isinstance(value, str):
50
+ try:
51
+ return models.ScreenClauseOperator(value)
52
+ except ValueError:
53
+ return value
54
+ return value
55
+
56
+ @model_serializer(mode="wrap")
57
+ def serialize_model(self, handler):
58
+ optional_fields = set(["field", "operator", "value"])
59
+ serialized = handler(self)
60
+ m = {}
61
+
62
+ for n, f in type(self).model_fields.items():
63
+ k = f.alias or n
64
+ val = serialized.get(k, serialized.get(n))
65
+
66
+ if val != UNSET_SENTINEL:
67
+ if val is not None or k not in optional_fields:
68
+ m[k] = val
69
+
70
+ return m