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,43 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 69fc27baa900
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 List, Optional
8
+ from typing_extensions import NotRequired, TypedDict
9
+
10
+
11
+ class CreateWatchlistRequestTypedDict(TypedDict):
12
+ r"""Request body for creating a new watchlist."""
13
+
14
+ name: str
15
+ r"""User-facing name for the new watchlist, such as Tech Stocks or Dividend Ideas. Must not match the name of another watchlist the user already has (case-sensitive)."""
16
+ symbols: NotRequired[List[str]]
17
+ r"""Symbols to save in the new watchlist. Use exact uppercase ticker symbols; symbols that can't be resolved are dropped from the saved list and returned in the response's `invalid_symbols` field."""
18
+
19
+
20
+ class CreateWatchlistRequest(BaseModel):
21
+ r"""Request body for creating a new watchlist."""
22
+
23
+ name: str
24
+ r"""User-facing name for the new watchlist, such as Tech Stocks or Dividend Ideas. Must not match the name of another watchlist the user already has (case-sensitive)."""
25
+
26
+ symbols: Optional[List[str]] = None
27
+ r"""Symbols to save in the new watchlist. Use exact uppercase ticker symbols; symbols that can't be resolved are dropped from the saved list and returned in the response's `invalid_symbols` field."""
28
+
29
+ @model_serializer(mode="wrap")
30
+ def serialize_model(self, handler):
31
+ optional_fields = set(["symbols"])
32
+ serialized = handler(self)
33
+ m = {}
34
+
35
+ for n, f in type(self).model_fields.items():
36
+ k = f.alias or n
37
+ val = serialized.get(k, serialized.get(n))
38
+
39
+ if val != UNSET_SENTINEL:
40
+ if val is not None or k not in optional_fields:
41
+ m[k] = val
42
+
43
+ return m
@@ -0,0 +1,73 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 915df4ff8b4f
3
+
4
+ from __future__ import annotations
5
+ from .stockohlcbar import StockOhlcBar, StockOhlcBarTypedDict
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 DailyMarketSummaryResponseTypedDict(TypedDict):
14
+ r"""Daily OHLC bars for all stocks on a given trading date, as returned by the upstream data provider."""
15
+
16
+ adjusted: NotRequired[bool]
17
+ r"""Whether or not the results are adjusted for splits"""
18
+ query_count: NotRequired[int]
19
+ r"""Number of results returned"""
20
+ request_id: NotRequired[str]
21
+ r"""Unique request ID"""
22
+ results: NotRequired[List[StockOhlcBarTypedDict]]
23
+ r"""Array of grouped daily bars"""
24
+ results_count: NotRequired[int]
25
+ r"""Total number of results"""
26
+ status: NotRequired[str]
27
+ r"""Status string from the upstream data provider — typically `OK` for a successful response. Treat any other value as an error indicator alongside the HTTP status code."""
28
+
29
+
30
+ class DailyMarketSummaryResponse(BaseModel):
31
+ r"""Daily OHLC bars for all stocks on a given trading date, as returned by the upstream data provider."""
32
+
33
+ adjusted: Optional[bool] = None
34
+ r"""Whether or not the results are adjusted for splits"""
35
+
36
+ query_count: Annotated[Optional[int], pydantic.Field(alias="queryCount")] = None
37
+ r"""Number of results returned"""
38
+
39
+ request_id: Annotated[Optional[str], pydantic.Field(alias="requestId")] = None
40
+ r"""Unique request ID"""
41
+
42
+ results: Optional[List[StockOhlcBar]] = None
43
+ r"""Array of grouped daily bars"""
44
+
45
+ results_count: Annotated[Optional[int], pydantic.Field(alias="resultsCount")] = None
46
+ r"""Total number of results"""
47
+
48
+ status: Optional[str] = None
49
+ r"""Status string from the upstream data provider — typically `OK` for a successful response. Treat any other value as an error indicator alongside the HTTP status code."""
50
+
51
+ @model_serializer(mode="wrap")
52
+ def serialize_model(self, handler):
53
+ optional_fields = set(
54
+ ["adjusted", "queryCount", "requestId", "results", "resultsCount", "status"]
55
+ )
56
+ serialized = handler(self)
57
+ m = {}
58
+
59
+ for n, f in type(self).model_fields.items():
60
+ k = f.alias or n
61
+ val = serialized.get(k, serialized.get(n))
62
+
63
+ if val != UNSET_SENTINEL:
64
+ if val is not None or k not in optional_fields:
65
+ m[k] = val
66
+
67
+ return m
68
+
69
+
70
+ try:
71
+ DailyMarketSummaryResponse.model_rebuild()
72
+ except NameError:
73
+ pass
@@ -0,0 +1,53 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 5a30a5f5c252
3
+
4
+ from __future__ import annotations
5
+ from .httpmetadata import HTTPMetadata, HTTPMetadataTypedDict
6
+ from .watchlist import Watchlist, WatchlistTypedDict
7
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
8
+ from finance_dev.utils import FieldMetadata, PathParamMetadata
9
+ import pydantic
10
+ from pydantic import model_serializer
11
+ from typing import Optional
12
+ from typing_extensions import Annotated, NotRequired, TypedDict
13
+
14
+
15
+ class DeleteConfigWatchlistByIDRequestTypedDict(TypedDict):
16
+ watchlist_id: int
17
+ r"""The numeric ID of the watchlist to delete. You can get this from a previous list/create/update response (the `id` field in the returned watchlist)."""
18
+
19
+
20
+ class DeleteConfigWatchlistByIDRequest(BaseModel):
21
+ watchlist_id: Annotated[
22
+ int, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
23
+ ]
24
+ r"""The numeric ID of the watchlist to delete. You can get this from a previous list/create/update response (the `id` field in the returned watchlist)."""
25
+
26
+
27
+ class DeleteConfigWatchlistByIDResponseTypedDict(TypedDict):
28
+ http_meta: HTTPMetadataTypedDict
29
+ watchlist: NotRequired[WatchlistTypedDict]
30
+ r"""Watchlist deleted, or reset to default when it was the user's only remaining watchlist. The response body contains the affected watchlist."""
31
+
32
+
33
+ class DeleteConfigWatchlistByIDResponse(BaseModel):
34
+ http_meta: Annotated[Optional[HTTPMetadata], pydantic.Field(exclude=True)] = None
35
+
36
+ watchlist: Optional[Watchlist] = None
37
+ r"""Watchlist deleted, or reset to default when it was the user's only remaining watchlist. The response body contains the affected watchlist."""
38
+
39
+ @model_serializer(mode="wrap")
40
+ def serialize_model(self, handler):
41
+ optional_fields = set(["Watchlist"])
42
+ serialized = handler(self)
43
+ m = {}
44
+
45
+ for n, f in type(self).model_fields.items():
46
+ k = f.alias or n
47
+ val = serialized.get(k, serialized.get(n))
48
+
49
+ if val != UNSET_SENTINEL:
50
+ if val is not None or k not in optional_fields:
51
+ m[k] = val
52
+
53
+ return m
@@ -0,0 +1,125 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 311c61390943
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 DividendItemTypedDict(TypedDict):
13
+ r"""A single dividend event for a ticker."""
14
+
15
+ cash_amount: NotRequired[float]
16
+ r"""Original cash dividend amount per share."""
17
+ currency: NotRequired[str]
18
+ r"""Currency code for the cash amount, such as USD."""
19
+ declaration_date: NotRequired[str]
20
+ r"""Date when the dividend was announced."""
21
+ distribution_type: NotRequired[str]
22
+ r"""Distribution classification such as recurring, special, supplemental, irregular, or unknown."""
23
+ ex_dividend_date: NotRequired[str]
24
+ r"""Date when the stock begins trading without the dividend."""
25
+ frequency: NotRequired[int]
26
+ r"""Times per year the dividend is paid, such as 0, 1, 4, or 12."""
27
+ historical_adjustment_factor: NotRequired[float]
28
+ r"""Adjustment factor used for historical-price normalization."""
29
+ id: NotRequired[str]
30
+ r"""Unique identifier for the dividend event."""
31
+ pay_date: NotRequired[str]
32
+ r"""Date when the dividend payment is distributed."""
33
+ record_date: NotRequired[str]
34
+ r"""Record date used to determine shareholder eligibility."""
35
+ split_adjusted_cash_amount: NotRequired[float]
36
+ r"""Dividend cash amount adjusted for stock splits."""
37
+ ticker: NotRequired[str]
38
+ r"""Stock ticker symbol"""
39
+
40
+
41
+ class DividendItem(BaseModel):
42
+ r"""A single dividend event for a ticker."""
43
+
44
+ cash_amount: Annotated[Optional[float], pydantic.Field(alias="cashAmount")] = None
45
+ r"""Original cash dividend amount per share."""
46
+
47
+ currency: Optional[str] = None
48
+ r"""Currency code for the cash amount, such as USD."""
49
+
50
+ declaration_date: Annotated[
51
+ Optional[str], pydantic.Field(alias="declarationDate")
52
+ ] = None
53
+ r"""Date when the dividend was announced."""
54
+
55
+ distribution_type: Annotated[
56
+ Optional[str], pydantic.Field(alias="distributionType")
57
+ ] = None
58
+ r"""Distribution classification such as recurring, special, supplemental, irregular, or unknown."""
59
+
60
+ ex_dividend_date: Annotated[
61
+ Optional[str], pydantic.Field(alias="exDividendDate")
62
+ ] = None
63
+ r"""Date when the stock begins trading without the dividend."""
64
+
65
+ frequency: Optional[int] = None
66
+ r"""Times per year the dividend is paid, such as 0, 1, 4, or 12."""
67
+
68
+ historical_adjustment_factor: Annotated[
69
+ Optional[float], pydantic.Field(alias="historicalAdjustmentFactor")
70
+ ] = None
71
+ r"""Adjustment factor used for historical-price normalization."""
72
+
73
+ id: Optional[str] = None
74
+ r"""Unique identifier for the dividend event."""
75
+
76
+ pay_date: Annotated[Optional[str], pydantic.Field(alias="payDate")] = None
77
+ r"""Date when the dividend payment is distributed."""
78
+
79
+ record_date: Annotated[Optional[str], pydantic.Field(alias="recordDate")] = None
80
+ r"""Record date used to determine shareholder eligibility."""
81
+
82
+ split_adjusted_cash_amount: Annotated[
83
+ Optional[float], pydantic.Field(alias="splitAdjustedCashAmount")
84
+ ] = None
85
+ r"""Dividend cash amount adjusted for stock splits."""
86
+
87
+ ticker: Optional[str] = None
88
+ r"""Stock ticker symbol"""
89
+
90
+ @model_serializer(mode="wrap")
91
+ def serialize_model(self, handler):
92
+ optional_fields = set(
93
+ [
94
+ "cashAmount",
95
+ "currency",
96
+ "declarationDate",
97
+ "distributionType",
98
+ "exDividendDate",
99
+ "frequency",
100
+ "historicalAdjustmentFactor",
101
+ "id",
102
+ "payDate",
103
+ "recordDate",
104
+ "splitAdjustedCashAmount",
105
+ "ticker",
106
+ ]
107
+ )
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
+ try:
123
+ DividendItem.model_rebuild()
124
+ except NameError:
125
+ pass
@@ -0,0 +1,61 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 61bbd2d2cfe5
3
+
4
+ from __future__ import annotations
5
+ from .dividenditem import DividendItem, DividendItemTypedDict
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 DividendsResponseTypedDict(TypedDict):
14
+ r"""Paginated response containing dividend events."""
15
+
16
+ next_url: NotRequired[str]
17
+ r"""Opaque pagination URL for the next page of results when more data is available."""
18
+ request_id: NotRequired[str]
19
+ r"""Provider request identifier for tracing and support."""
20
+ results: NotRequired[List[DividendItemTypedDict]]
21
+ r"""Array of dividend payment events."""
22
+ status: NotRequired[str]
23
+ r"""Provider response status."""
24
+
25
+
26
+ class DividendsResponse(BaseModel):
27
+ r"""Paginated response containing dividend events."""
28
+
29
+ next_url: Annotated[Optional[str], pydantic.Field(alias="nextUrl")] = None
30
+ r"""Opaque pagination URL for the next page of results when more data is available."""
31
+
32
+ request_id: Annotated[Optional[str], pydantic.Field(alias="requestId")] = None
33
+ r"""Provider request identifier for tracing and support."""
34
+
35
+ results: Optional[List[DividendItem]] = None
36
+ r"""Array of dividend payment events."""
37
+
38
+ status: Optional[str] = None
39
+ r"""Provider response status."""
40
+
41
+ @model_serializer(mode="wrap")
42
+ def serialize_model(self, handler):
43
+ optional_fields = set(["nextUrl", "requestId", "results", "status"])
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
+ try:
59
+ DividendsResponse.model_rebuild()
60
+ except NameError:
61
+ pass
@@ -0,0 +1,291 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 1d7af08fb01d
3
+
4
+ from __future__ import annotations
5
+ from finance_dev.types import (
6
+ BaseModel,
7
+ Nullable,
8
+ OptionalNullable,
9
+ UNSET,
10
+ UNSET_SENTINEL,
11
+ )
12
+ import pydantic
13
+ from pydantic import model_serializer
14
+ from typing import Optional
15
+ from typing_extensions import Annotated, NotRequired, TypedDict
16
+
17
+
18
+ class AnalystRatingTypedDict(TypedDict):
19
+ r"""Analyst ratings summary"""
20
+
21
+ average_return: NotRequired[str]
22
+ r"""Average return based on analyst recommendations"""
23
+ current_rating: NotRequired[str]
24
+ r"""Current analyst rating (e.g., Buy, Sell, Hold)"""
25
+ price_target: NotRequired[float]
26
+ r"""Average price target"""
27
+ success_rate: NotRequired[str]
28
+ r"""Historical success rate of analysts"""
29
+ total_ratings: NotRequired[int]
30
+ r"""Total number of analyst ratings"""
31
+
32
+
33
+ class AnalystRating(BaseModel):
34
+ r"""Analyst ratings summary"""
35
+
36
+ average_return: Annotated[Optional[str], pydantic.Field(alias="averageReturn")] = (
37
+ None
38
+ )
39
+ r"""Average return based on analyst recommendations"""
40
+
41
+ current_rating: Annotated[Optional[str], pydantic.Field(alias="currentRating")] = (
42
+ None
43
+ )
44
+ r"""Current analyst rating (e.g., Buy, Sell, Hold)"""
45
+
46
+ price_target: Annotated[Optional[float], pydantic.Field(alias="priceTarget")] = None
47
+ r"""Average price target"""
48
+
49
+ success_rate: Annotated[Optional[str], pydantic.Field(alias="successRate")] = None
50
+ r"""Historical success rate of analysts"""
51
+
52
+ total_ratings: Annotated[Optional[int], pydantic.Field(alias="totalRatings")] = None
53
+ r"""Total number of analyst ratings"""
54
+
55
+ @model_serializer(mode="wrap")
56
+ def serialize_model(self, handler):
57
+ optional_fields = set(
58
+ [
59
+ "averageReturn",
60
+ "currentRating",
61
+ "priceTarget",
62
+ "successRate",
63
+ "totalRatings",
64
+ ]
65
+ )
66
+ serialized = handler(self)
67
+ m = {}
68
+
69
+ for n, f in type(self).model_fields.items():
70
+ k = f.alias or n
71
+ val = serialized.get(k, serialized.get(n))
72
+
73
+ if val != UNSET_SENTINEL:
74
+ if val is not None or k not in optional_fields:
75
+ m[k] = val
76
+
77
+ return m
78
+
79
+
80
+ class LogoTypedDict(TypedDict):
81
+ r"""Company logos for UI display"""
82
+
83
+ logo_dark: NotRequired[str]
84
+ r"""Logo URL for dark theme"""
85
+ logo_light: NotRequired[str]
86
+ r"""Logo URL for light theme"""
87
+
88
+
89
+ class Logo(BaseModel):
90
+ r"""Company logos for UI display"""
91
+
92
+ logo_dark: Annotated[Optional[str], pydantic.Field(alias="logoDark")] = None
93
+ r"""Logo URL for dark theme"""
94
+
95
+ logo_light: Annotated[Optional[str], pydantic.Field(alias="logoLight")] = None
96
+ r"""Logo URL for light theme"""
97
+
98
+ @model_serializer(mode="wrap")
99
+ def serialize_model(self, handler):
100
+ optional_fields = set(["logoDark", "logoLight"])
101
+ serialized = handler(self)
102
+ m = {}
103
+
104
+ for n, f in type(self).model_fields.items():
105
+ k = f.alias or n
106
+ val = serialized.get(k, serialized.get(n))
107
+
108
+ if val != UNSET_SENTINEL:
109
+ if val is not None or k not in optional_fields:
110
+ m[k] = val
111
+
112
+ return m
113
+
114
+
115
+ class EarningReleaseTypedDict(TypedDict):
116
+ r"""Earnings calendar entry for a company's earnings release, with actual and estimated figures."""
117
+
118
+ analyst_rating: NotRequired[AnalystRatingTypedDict]
119
+ r"""Analyst ratings summary"""
120
+ date_: NotRequired[str]
121
+ r"""Earnings release date"""
122
+ eps_actual: NotRequired[Nullable[float]]
123
+ r"""Actual earnings per share"""
124
+ eps_estimate: NotRequired[Nullable[float]]
125
+ r"""Estimated earnings per share"""
126
+ eps_surprise: NotRequired[Nullable[float]]
127
+ r"""Difference between actual and estimated EPS"""
128
+ hour: NotRequired[str]
129
+ r"""Time of day for earnings release: 'bmo' (before market open), 'amc' (after market close), 'dmh' (during market hours)"""
130
+ importance: NotRequired[int]
131
+ r"""Earnings event importance level (1-3, where 3 is most important). Use this to filter and prioritize high-impact earnings releases."""
132
+ logo: NotRequired[LogoTypedDict]
133
+ r"""Company logos for UI display"""
134
+ market_cap: NotRequired[Nullable[float]]
135
+ r"""Market capitalization in millions. Calculated as: (1) cached value if available and > 0, or (2) lastPrice × sharesOutstanding. Only present if both inputs are available."""
136
+ name: NotRequired[str]
137
+ r"""Company name"""
138
+ quarter: NotRequired[int]
139
+ r"""Quarter number (1-4)"""
140
+ revenue_actual: NotRequired[Nullable[float]]
141
+ r"""Actual revenue"""
142
+ revenue_estimate: NotRequired[Nullable[float]]
143
+ r"""Estimated revenue"""
144
+ revenue_surprise: NotRequired[Nullable[float]]
145
+ r"""Difference between actual and estimated revenue"""
146
+ symbol: NotRequired[str]
147
+ r"""Stock ticker symbol, such as AAPL. Use the exact ticker for the company you want to research."""
148
+ time: NotRequired[str]
149
+ r"""Time of day for earnings release: '16:39:00' 24 hours format"""
150
+ year: NotRequired[int]
151
+ r"""Year of the earnings"""
152
+
153
+
154
+ class EarningRelease(BaseModel):
155
+ r"""Earnings calendar entry for a company's earnings release, with actual and estimated figures."""
156
+
157
+ analyst_rating: Annotated[
158
+ Optional[AnalystRating], pydantic.Field(alias="analystRating")
159
+ ] = None
160
+ r"""Analyst ratings summary"""
161
+
162
+ date_: Annotated[Optional[str], pydantic.Field(alias="date")] = None
163
+ r"""Earnings release date"""
164
+
165
+ eps_actual: Annotated[
166
+ OptionalNullable[float], pydantic.Field(alias="epsActual")
167
+ ] = UNSET
168
+ r"""Actual earnings per share"""
169
+
170
+ eps_estimate: Annotated[
171
+ OptionalNullable[float], pydantic.Field(alias="epsEstimate")
172
+ ] = UNSET
173
+ r"""Estimated earnings per share"""
174
+
175
+ eps_surprise: Annotated[
176
+ OptionalNullable[float], pydantic.Field(alias="epsSurprise")
177
+ ] = UNSET
178
+ r"""Difference between actual and estimated EPS"""
179
+
180
+ hour: Optional[str] = None
181
+ r"""Time of day for earnings release: 'bmo' (before market open), 'amc' (after market close), 'dmh' (during market hours)"""
182
+
183
+ importance: Optional[int] = None
184
+ r"""Earnings event importance level (1-3, where 3 is most important). Use this to filter and prioritize high-impact earnings releases."""
185
+
186
+ logo: Optional[Logo] = None
187
+ r"""Company logos for UI display"""
188
+
189
+ market_cap: Annotated[
190
+ OptionalNullable[float], pydantic.Field(alias="marketCap")
191
+ ] = UNSET
192
+ r"""Market capitalization in millions. Calculated as: (1) cached value if available and > 0, or (2) lastPrice × sharesOutstanding. Only present if both inputs are available."""
193
+
194
+ name: Optional[str] = None
195
+ r"""Company name"""
196
+
197
+ quarter: Optional[int] = None
198
+ r"""Quarter number (1-4)"""
199
+
200
+ revenue_actual: Annotated[
201
+ OptionalNullable[float], pydantic.Field(alias="revenueActual")
202
+ ] = UNSET
203
+ r"""Actual revenue"""
204
+
205
+ revenue_estimate: Annotated[
206
+ OptionalNullable[float], pydantic.Field(alias="revenueEstimate")
207
+ ] = UNSET
208
+ r"""Estimated revenue"""
209
+
210
+ revenue_surprise: Annotated[
211
+ OptionalNullable[float], pydantic.Field(alias="revenueSurprise")
212
+ ] = UNSET
213
+ r"""Difference between actual and estimated revenue"""
214
+
215
+ symbol: Optional[str] = None
216
+ r"""Stock ticker symbol, such as AAPL. Use the exact ticker for the company you want to research."""
217
+
218
+ time: Optional[str] = None
219
+ r"""Time of day for earnings release: '16:39:00' 24 hours format"""
220
+
221
+ year: Optional[int] = None
222
+ r"""Year of the earnings"""
223
+
224
+ @model_serializer(mode="wrap")
225
+ def serialize_model(self, handler):
226
+ optional_fields = set(
227
+ [
228
+ "analystRating",
229
+ "date",
230
+ "epsActual",
231
+ "epsEstimate",
232
+ "epsSurprise",
233
+ "hour",
234
+ "importance",
235
+ "logo",
236
+ "marketCap",
237
+ "name",
238
+ "quarter",
239
+ "revenueActual",
240
+ "revenueEstimate",
241
+ "revenueSurprise",
242
+ "symbol",
243
+ "time",
244
+ "year",
245
+ ]
246
+ )
247
+ nullable_fields = set(
248
+ [
249
+ "epsActual",
250
+ "epsEstimate",
251
+ "epsSurprise",
252
+ "marketCap",
253
+ "revenueActual",
254
+ "revenueEstimate",
255
+ "revenueSurprise",
256
+ ]
257
+ )
258
+ serialized = handler(self)
259
+ m = {}
260
+
261
+ for n, f in type(self).model_fields.items():
262
+ k = f.alias or n
263
+ val = serialized.get(k, serialized.get(n))
264
+ is_nullable_and_explicitly_set = (
265
+ k in nullable_fields
266
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
267
+ )
268
+
269
+ if val != UNSET_SENTINEL:
270
+ if (
271
+ val is not None
272
+ or k not in optional_fields
273
+ or is_nullable_and_explicitly_set
274
+ ):
275
+ m[k] = val
276
+
277
+ return m
278
+
279
+
280
+ try:
281
+ AnalystRating.model_rebuild()
282
+ except NameError:
283
+ pass
284
+ try:
285
+ Logo.model_rebuild()
286
+ except NameError:
287
+ pass
288
+ try:
289
+ EarningRelease.model_rebuild()
290
+ except NameError:
291
+ pass