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,21 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: cbcc589f5d9c
3
+
4
+ from __future__ import annotations
5
+ from finance_dev.types import BaseModel
6
+ from typing import List
7
+ from typing_extensions import TypedDict
8
+
9
+
10
+ class EtbSearchRequestTypedDict(TypedDict):
11
+ r"""Batch borrowability query. Symbols are uppercased and trimmed before the lookup, and duplicates that normalize to the same symbol collapse into a single entry in the response."""
12
+
13
+ symbols: List[str]
14
+ r"""Symbols to check. Case-insensitive and whitespace-trimmed, so `aapl`, ` AAPL `, and `AAPL` are the same symbol and return one entry. A request of only blank strings is rejected with 400 MISSING_SYMBOLS rather than answered with an empty result."""
15
+
16
+
17
+ class EtbSearchRequest(BaseModel):
18
+ r"""Batch borrowability query. Symbols are uppercased and trimmed before the lookup, and duplicates that normalize to the same symbol collapse into a single entry in the response."""
19
+
20
+ symbols: List[str]
21
+ r"""Symbols to check. Case-insensitive and whitespace-trimmed, so `aapl`, ` AAPL `, and `AAPL` are the same symbol and return one entry. A request of only blank strings is rejected with 400 MISSING_SYMBOLS rather than answered with an empty result."""
@@ -0,0 +1,43 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 4b8179ed10d8
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 Dict, Optional
8
+ from typing_extensions import NotRequired, TypedDict
9
+
10
+
11
+ class EtbSearchResponseTypedDict(TypedDict):
12
+ r"""Borrowability answers keyed by normalized (uppercase) symbol."""
13
+
14
+ count: NotRequired[int]
15
+ r"""Number of entries in `results`. This can be lower than the number of symbols you sent, because duplicates collapse after normalization."""
16
+ results: NotRequired[Dict[str, bool]]
17
+ r"""One entry per distinct normalized symbol. `true` means easy to borrow (a short sale needs no extra step); `false` means hard to borrow (the symbol is not on today's list and needs a locate first). Read answers out of this object by uppercase key — do not match them against your request array by index, because normalization collapses duplicates."""
18
+
19
+
20
+ class EtbSearchResponse(BaseModel):
21
+ r"""Borrowability answers keyed by normalized (uppercase) symbol."""
22
+
23
+ count: Optional[int] = None
24
+ r"""Number of entries in `results`. This can be lower than the number of symbols you sent, because duplicates collapse after normalization."""
25
+
26
+ results: Optional[Dict[str, bool]] = None
27
+ r"""One entry per distinct normalized symbol. `true` means easy to borrow (a short sale needs no extra step); `false` means hard to borrow (the symbol is not on today's list and needs a locate first). Read answers out of this object by uppercase key — do not match them against your request array by index, because normalization collapses duplicates."""
28
+
29
+ @model_serializer(mode="wrap")
30
+ def serialize_model(self, handler):
31
+ optional_fields = set(["count", "results"])
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,113 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 48fcc91d65ef
3
+
4
+ from __future__ import annotations
5
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
6
+ import pydantic
7
+ from pydantic import model_serializer
8
+ from typing import List, Optional
9
+ from typing_extensions import Annotated, NotRequired, TypedDict
10
+
11
+
12
+ class CountryExposureTypedDict(TypedDict):
13
+ country: NotRequired[str]
14
+ r"""Name of the country."""
15
+ exposure: NotRequired[float]
16
+ r"""Exposure of the ETF to this country as reported by the provider."""
17
+
18
+
19
+ class CountryExposure(BaseModel):
20
+ country: Optional[str] = None
21
+ r"""Name of the country."""
22
+
23
+ exposure: Optional[float] = None
24
+ r"""Exposure of the ETF to this country as reported by the provider."""
25
+
26
+ @model_serializer(mode="wrap")
27
+ def serialize_model(self, handler):
28
+ optional_fields = set(["country", "exposure"])
29
+ serialized = handler(self)
30
+ m = {}
31
+
32
+ for n, f in type(self).model_fields.items():
33
+ k = f.alias or n
34
+ val = serialized.get(k, serialized.get(n))
35
+
36
+ if val != UNSET_SENTINEL:
37
+ if val is not None or k not in optional_fields:
38
+ m[k] = val
39
+
40
+ return m
41
+
42
+
43
+ class EtfCountryAllocationResponseDataTypedDict(TypedDict):
44
+ r"""ETF country exposure payload."""
45
+
46
+ country_exposure: NotRequired[List[CountryExposureTypedDict]]
47
+ r"""List of country exposures for the ETF."""
48
+ symbol: NotRequired[str]
49
+ r"""ETF ticker symbol."""
50
+
51
+
52
+ class EtfCountryAllocationResponseData(BaseModel):
53
+ r"""ETF country exposure payload."""
54
+
55
+ country_exposure: Annotated[
56
+ Optional[List[CountryExposure]], pydantic.Field(alias="countryExposure")
57
+ ] = None
58
+ r"""List of country exposures for the ETF."""
59
+
60
+ symbol: Optional[str] = None
61
+ r"""ETF ticker symbol."""
62
+
63
+ @model_serializer(mode="wrap")
64
+ def serialize_model(self, handler):
65
+ optional_fields = set(["countryExposure", "symbol"])
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 EtfCountryAllocationResponseTypedDict(TypedDict):
81
+ r"""Country exposure breakdown of an ETF from Finnhub."""
82
+
83
+ data: NotRequired[EtfCountryAllocationResponseDataTypedDict]
84
+ r"""ETF country exposure payload."""
85
+
86
+
87
+ class EtfCountryAllocationResponse(BaseModel):
88
+ r"""Country exposure breakdown of an ETF from Finnhub."""
89
+
90
+ data: Optional[EtfCountryAllocationResponseData] = None
91
+ r"""ETF country exposure payload."""
92
+
93
+ @model_serializer(mode="wrap")
94
+ def serialize_model(self, handler):
95
+ optional_fields = set(["data"])
96
+ serialized = handler(self)
97
+ m = {}
98
+
99
+ for n, f in type(self).model_fields.items():
100
+ k = f.alias or n
101
+ val = serialized.get(k, serialized.get(n))
102
+
103
+ if val != UNSET_SENTINEL:
104
+ if val is not None or k not in optional_fields:
105
+ m[k] = val
106
+
107
+ return m
108
+
109
+
110
+ try:
111
+ EtfCountryAllocationResponseData.model_rebuild()
112
+ except NameError:
113
+ pass
@@ -0,0 +1,163 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: e31fc139fbc5
3
+
4
+ from __future__ import annotations
5
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
6
+ import pydantic
7
+ from pydantic import model_serializer
8
+ from typing import List, Optional
9
+ from typing_extensions import Annotated, NotRequired, TypedDict
10
+
11
+
12
+ class HoldingTypedDict(TypedDict):
13
+ asset_type: NotRequired[str]
14
+ r"""Asset type of the holding."""
15
+ cusip: NotRequired[str]
16
+ r"""CUSIP identifier of the holding."""
17
+ isin: NotRequired[str]
18
+ r"""ISIN identifier of the holding."""
19
+ name: NotRequired[str]
20
+ r"""Name of the holding."""
21
+ percent: NotRequired[float]
22
+ r"""Portfolio weight of the holding as reported by the provider."""
23
+ share: NotRequired[int]
24
+ r"""Number of shares held."""
25
+ symbol: NotRequired[str]
26
+ r"""Ticker symbol of the holding."""
27
+ value: NotRequired[int]
28
+ r"""Market value of the holding as reported by the provider."""
29
+
30
+
31
+ class Holding(BaseModel):
32
+ asset_type: Annotated[Optional[str], pydantic.Field(alias="assetType")] = None
33
+ r"""Asset type of the holding."""
34
+
35
+ cusip: Optional[str] = None
36
+ r"""CUSIP identifier of the holding."""
37
+
38
+ isin: Optional[str] = None
39
+ r"""ISIN identifier of the holding."""
40
+
41
+ name: Optional[str] = None
42
+ r"""Name of the holding."""
43
+
44
+ percent: Optional[float] = None
45
+ r"""Portfolio weight of the holding as reported by the provider."""
46
+
47
+ share: Optional[int] = None
48
+ r"""Number of shares held."""
49
+
50
+ symbol: Optional[str] = None
51
+ r"""Ticker symbol of the holding."""
52
+
53
+ value: Optional[int] = None
54
+ r"""Market value of the holding as reported by the provider."""
55
+
56
+ @model_serializer(mode="wrap")
57
+ def serialize_model(self, handler):
58
+ optional_fields = set(
59
+ [
60
+ "assetType",
61
+ "cusip",
62
+ "isin",
63
+ "name",
64
+ "percent",
65
+ "share",
66
+ "symbol",
67
+ "value",
68
+ ]
69
+ )
70
+ serialized = handler(self)
71
+ m = {}
72
+
73
+ for n, f in type(self).model_fields.items():
74
+ k = f.alias or n
75
+ val = serialized.get(k, serialized.get(n))
76
+
77
+ if val != UNSET_SENTINEL:
78
+ if val is not None or k not in optional_fields:
79
+ m[k] = val
80
+
81
+ return m
82
+
83
+
84
+ class EtfHoldingsResponseDataTypedDict(TypedDict):
85
+ r"""ETF holdings payload."""
86
+
87
+ holdings: NotRequired[List[HoldingTypedDict]]
88
+ r"""List of holdings in the ETF."""
89
+ number_of_holdings: NotRequired[int]
90
+ r"""Total number of holdings in the ETF."""
91
+ symbol: NotRequired[str]
92
+ r"""ETF ticker symbol."""
93
+
94
+
95
+ class EtfHoldingsResponseData(BaseModel):
96
+ r"""ETF holdings payload."""
97
+
98
+ holdings: Optional[List[Holding]] = None
99
+ r"""List of holdings in the ETF."""
100
+
101
+ number_of_holdings: Annotated[
102
+ Optional[int], pydantic.Field(alias="numberOfHoldings")
103
+ ] = None
104
+ r"""Total number of holdings in the ETF."""
105
+
106
+ symbol: Optional[str] = None
107
+ r"""ETF ticker symbol."""
108
+
109
+ @model_serializer(mode="wrap")
110
+ def serialize_model(self, handler):
111
+ optional_fields = set(["holdings", "numberOfHoldings", "symbol"])
112
+ serialized = handler(self)
113
+ m = {}
114
+
115
+ for n, f in type(self).model_fields.items():
116
+ k = f.alias or n
117
+ val = serialized.get(k, serialized.get(n))
118
+
119
+ if val != UNSET_SENTINEL:
120
+ if val is not None or k not in optional_fields:
121
+ m[k] = val
122
+
123
+ return m
124
+
125
+
126
+ class EtfHoldingsResponseTypedDict(TypedDict):
127
+ r"""Constituent holdings of an ETF from Finnhub."""
128
+
129
+ data: NotRequired[EtfHoldingsResponseDataTypedDict]
130
+ r"""ETF holdings payload."""
131
+
132
+
133
+ class EtfHoldingsResponse(BaseModel):
134
+ r"""Constituent holdings of an ETF from Finnhub."""
135
+
136
+ data: Optional[EtfHoldingsResponseData] = None
137
+ r"""ETF holdings payload."""
138
+
139
+ @model_serializer(mode="wrap")
140
+ def serialize_model(self, handler):
141
+ optional_fields = set(["data"])
142
+ serialized = handler(self)
143
+ m = {}
144
+
145
+ for n, f in type(self).model_fields.items():
146
+ k = f.alias or n
147
+ val = serialized.get(k, serialized.get(n))
148
+
149
+ if val != UNSET_SENTINEL:
150
+ if val is not None or k not in optional_fields:
151
+ m[k] = val
152
+
153
+ return m
154
+
155
+
156
+ try:
157
+ Holding.model_rebuild()
158
+ except NameError:
159
+ pass
160
+ try:
161
+ EtfHoldingsResponseData.model_rebuild()
162
+ except NameError:
163
+ pass
@@ -0,0 +1,234 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: c0ee516eec91
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 ProfileTypedDict(TypedDict):
13
+ r"""Descriptive and fundamental attributes of the ETF."""
14
+
15
+ asset_class: NotRequired[str]
16
+ r"""Asset class of the ETF."""
17
+ aum: NotRequired[int]
18
+ r"""Assets under management of the ETF."""
19
+ avg_volume: NotRequired[int]
20
+ r"""Average trading volume of the ETF."""
21
+ cusip: NotRequired[str]
22
+ r"""CUSIP identifier of the ETF."""
23
+ description: NotRequired[str]
24
+ r"""Text description of the ETF."""
25
+ domicile: NotRequired[str]
26
+ r"""Domicile of the ETF."""
27
+ etf_company: NotRequired[str]
28
+ r"""Company that manages or issues the ETF."""
29
+ expense_ratio: NotRequired[float]
30
+ r"""Expense ratio of the ETF."""
31
+ inception_date: NotRequired[str]
32
+ r"""Inception date of the ETF as a string from the provider."""
33
+ investment_segment: NotRequired[str]
34
+ r"""Investment segment of the ETF."""
35
+ isin: NotRequired[str]
36
+ r"""ISIN identifier of the ETF."""
37
+ logo: NotRequired[str]
38
+ r"""URL of the ETF logo image."""
39
+ name: NotRequired[str]
40
+ r"""Name of the ETF."""
41
+ nav: NotRequired[float]
42
+ r"""Net asset value of the ETF."""
43
+ nav_currency: NotRequired[str]
44
+ r"""Currency in which the net asset value is quoted."""
45
+ price_to_book: NotRequired[float]
46
+ r"""Price-to-book ratio of the ETF."""
47
+ price_to_earnings: NotRequired[float]
48
+ r"""Price-to-earnings ratio of the ETF."""
49
+ tracking_index: NotRequired[str]
50
+ r"""Index tracked by the ETF."""
51
+ website: NotRequired[str]
52
+ r"""URL of the ETF website."""
53
+
54
+
55
+ class Profile(BaseModel):
56
+ r"""Descriptive and fundamental attributes of the ETF."""
57
+
58
+ asset_class: Annotated[Optional[str], pydantic.Field(alias="assetClass")] = None
59
+ r"""Asset class of the ETF."""
60
+
61
+ aum: Optional[int] = None
62
+ r"""Assets under management of the ETF."""
63
+
64
+ avg_volume: Annotated[Optional[int], pydantic.Field(alias="avgVolume")] = None
65
+ r"""Average trading volume of the ETF."""
66
+
67
+ cusip: Optional[str] = None
68
+ r"""CUSIP identifier of the ETF."""
69
+
70
+ description: Optional[str] = None
71
+ r"""Text description of the ETF."""
72
+
73
+ domicile: Optional[str] = None
74
+ r"""Domicile of the ETF."""
75
+
76
+ etf_company: Annotated[Optional[str], pydantic.Field(alias="etfCompany")] = None
77
+ r"""Company that manages or issues the ETF."""
78
+
79
+ expense_ratio: Annotated[Optional[float], pydantic.Field(alias="expenseRatio")] = (
80
+ None
81
+ )
82
+ r"""Expense ratio of the ETF."""
83
+
84
+ inception_date: Annotated[Optional[str], pydantic.Field(alias="inceptionDate")] = (
85
+ None
86
+ )
87
+ r"""Inception date of the ETF as a string from the provider."""
88
+
89
+ investment_segment: Annotated[
90
+ Optional[str], pydantic.Field(alias="investmentSegment")
91
+ ] = None
92
+ r"""Investment segment of the ETF."""
93
+
94
+ isin: Optional[str] = None
95
+ r"""ISIN identifier of the ETF."""
96
+
97
+ logo: Optional[str] = None
98
+ r"""URL of the ETF logo image."""
99
+
100
+ name: Optional[str] = None
101
+ r"""Name of the ETF."""
102
+
103
+ nav: Optional[float] = None
104
+ r"""Net asset value of the ETF."""
105
+
106
+ nav_currency: Annotated[Optional[str], pydantic.Field(alias="navCurrency")] = None
107
+ r"""Currency in which the net asset value is quoted."""
108
+
109
+ price_to_book: Annotated[Optional[float], pydantic.Field(alias="priceToBook")] = (
110
+ None
111
+ )
112
+ r"""Price-to-book ratio of the ETF."""
113
+
114
+ price_to_earnings: Annotated[
115
+ Optional[float], pydantic.Field(alias="priceToEarnings")
116
+ ] = None
117
+ r"""Price-to-earnings ratio of the ETF."""
118
+
119
+ tracking_index: Annotated[Optional[str], pydantic.Field(alias="trackingIndex")] = (
120
+ None
121
+ )
122
+ r"""Index tracked by the ETF."""
123
+
124
+ website: Optional[str] = None
125
+ r"""URL of the ETF website."""
126
+
127
+ @model_serializer(mode="wrap")
128
+ def serialize_model(self, handler):
129
+ optional_fields = set(
130
+ [
131
+ "assetClass",
132
+ "aum",
133
+ "avgVolume",
134
+ "cusip",
135
+ "description",
136
+ "domicile",
137
+ "etfCompany",
138
+ "expenseRatio",
139
+ "inceptionDate",
140
+ "investmentSegment",
141
+ "isin",
142
+ "logo",
143
+ "name",
144
+ "nav",
145
+ "navCurrency",
146
+ "priceToBook",
147
+ "priceToEarnings",
148
+ "trackingIndex",
149
+ "website",
150
+ ]
151
+ )
152
+ serialized = handler(self)
153
+ m = {}
154
+
155
+ for n, f in type(self).model_fields.items():
156
+ k = f.alias or n
157
+ val = serialized.get(k, serialized.get(n))
158
+
159
+ if val != UNSET_SENTINEL:
160
+ if val is not None or k not in optional_fields:
161
+ m[k] = val
162
+
163
+ return m
164
+
165
+
166
+ class EtfProfileResponseDataTypedDict(TypedDict):
167
+ r"""ETF profile payload."""
168
+
169
+ profile: NotRequired[ProfileTypedDict]
170
+ r"""Descriptive and fundamental attributes of the ETF."""
171
+ symbol: NotRequired[str]
172
+ r"""ETF ticker symbol."""
173
+
174
+
175
+ class EtfProfileResponseData(BaseModel):
176
+ r"""ETF profile payload."""
177
+
178
+ profile: Optional[Profile] = None
179
+ r"""Descriptive and fundamental attributes of the ETF."""
180
+
181
+ symbol: Optional[str] = None
182
+ r"""ETF ticker symbol."""
183
+
184
+ @model_serializer(mode="wrap")
185
+ def serialize_model(self, handler):
186
+ optional_fields = set(["profile", "symbol"])
187
+ serialized = handler(self)
188
+ m = {}
189
+
190
+ for n, f in type(self).model_fields.items():
191
+ k = f.alias or n
192
+ val = serialized.get(k, serialized.get(n))
193
+
194
+ if val != UNSET_SENTINEL:
195
+ if val is not None or k not in optional_fields:
196
+ m[k] = val
197
+
198
+ return m
199
+
200
+
201
+ class EtfProfileResponseTypedDict(TypedDict):
202
+ r"""Profile information for an ETF from Finnhub."""
203
+
204
+ data: NotRequired[EtfProfileResponseDataTypedDict]
205
+ r"""ETF profile payload."""
206
+
207
+
208
+ class EtfProfileResponse(BaseModel):
209
+ r"""Profile information for an ETF from Finnhub."""
210
+
211
+ data: Optional[EtfProfileResponseData] = None
212
+ r"""ETF profile payload."""
213
+
214
+ @model_serializer(mode="wrap")
215
+ def serialize_model(self, handler):
216
+ optional_fields = set(["data"])
217
+ serialized = handler(self)
218
+ m = {}
219
+
220
+ for n, f in type(self).model_fields.items():
221
+ k = f.alias or n
222
+ val = serialized.get(k, serialized.get(n))
223
+
224
+ if val != UNSET_SENTINEL:
225
+ if val is not None or k not in optional_fields:
226
+ m[k] = val
227
+
228
+ return m
229
+
230
+
231
+ try:
232
+ Profile.model_rebuild()
233
+ except NameError:
234
+ pass
@@ -0,0 +1,113 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: dc63bb7562f9
3
+
4
+ from __future__ import annotations
5
+ from finance_dev.types import BaseModel, UNSET_SENTINEL
6
+ import pydantic
7
+ from pydantic import model_serializer
8
+ from typing import List, Optional
9
+ from typing_extensions import Annotated, NotRequired, TypedDict
10
+
11
+
12
+ class SectorExposureTypedDict(TypedDict):
13
+ exposure: NotRequired[float]
14
+ r"""Exposure of the ETF to this sector as reported by the provider."""
15
+ industry: NotRequired[str]
16
+ r"""Name of the sector or industry."""
17
+
18
+
19
+ class SectorExposure(BaseModel):
20
+ exposure: Optional[float] = None
21
+ r"""Exposure of the ETF to this sector as reported by the provider."""
22
+
23
+ industry: Optional[str] = None
24
+ r"""Name of the sector or industry."""
25
+
26
+ @model_serializer(mode="wrap")
27
+ def serialize_model(self, handler):
28
+ optional_fields = set(["exposure", "industry"])
29
+ serialized = handler(self)
30
+ m = {}
31
+
32
+ for n, f in type(self).model_fields.items():
33
+ k = f.alias or n
34
+ val = serialized.get(k, serialized.get(n))
35
+
36
+ if val != UNSET_SENTINEL:
37
+ if val is not None or k not in optional_fields:
38
+ m[k] = val
39
+
40
+ return m
41
+
42
+
43
+ class EtfSectorAllocationResponseDataTypedDict(TypedDict):
44
+ r"""ETF sector exposure payload."""
45
+
46
+ sector_exposure: NotRequired[List[SectorExposureTypedDict]]
47
+ r"""List of sector exposures for the ETF."""
48
+ symbol: NotRequired[str]
49
+ r"""ETF ticker symbol."""
50
+
51
+
52
+ class EtfSectorAllocationResponseData(BaseModel):
53
+ r"""ETF sector exposure payload."""
54
+
55
+ sector_exposure: Annotated[
56
+ Optional[List[SectorExposure]], pydantic.Field(alias="sectorExposure")
57
+ ] = None
58
+ r"""List of sector exposures for the ETF."""
59
+
60
+ symbol: Optional[str] = None
61
+ r"""ETF ticker symbol."""
62
+
63
+ @model_serializer(mode="wrap")
64
+ def serialize_model(self, handler):
65
+ optional_fields = set(["sectorExposure", "symbol"])
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 EtfSectorAllocationResponseTypedDict(TypedDict):
81
+ r"""Sector exposure breakdown of an ETF from Finnhub."""
82
+
83
+ data: NotRequired[EtfSectorAllocationResponseDataTypedDict]
84
+ r"""ETF sector exposure payload."""
85
+
86
+
87
+ class EtfSectorAllocationResponse(BaseModel):
88
+ r"""Sector exposure breakdown of an ETF from Finnhub."""
89
+
90
+ data: Optional[EtfSectorAllocationResponseData] = None
91
+ r"""ETF sector exposure payload."""
92
+
93
+ @model_serializer(mode="wrap")
94
+ def serialize_model(self, handler):
95
+ optional_fields = set(["data"])
96
+ serialized = handler(self)
97
+ m = {}
98
+
99
+ for n, f in type(self).model_fields.items():
100
+ k = f.alias or n
101
+ val = serialized.get(k, serialized.get(n))
102
+
103
+ if val != UNSET_SENTINEL:
104
+ if val is not None or k not in optional_fields:
105
+ m[k] = val
106
+
107
+ return m
108
+
109
+
110
+ try:
111
+ EtfSectorAllocationResponseData.model_rebuild()
112
+ except NameError:
113
+ pass