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,1386 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 4c5e56d8c6cf
3
+
4
+ from .basesdk import BaseSDK
5
+ from datetime import date
6
+ from finance_dev import errors, models, utils
7
+ from finance_dev._hooks import HookContext
8
+ from finance_dev.types import OptionalNullable, UNSET
9
+ from finance_dev.utils.unmarshal_json_response import unmarshal_json_response
10
+ from typing import Any, Mapping, Optional
11
+
12
+
13
+ class Ownership(BaseSDK):
14
+ def get_institutional_ownership(
15
+ self,
16
+ *,
17
+ cusip: str,
18
+ from_: date,
19
+ to: date,
20
+ symbol: Optional[str] = None,
21
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
22
+ server_url: Optional[str] = None,
23
+ timeout_ms: Optional[int] = None,
24
+ http_headers: Optional[Mapping[str, str]] = None,
25
+ ) -> models.GetInstitutionalOwnershipResponse:
26
+ r"""Get Institutional Ownership
27
+
28
+ Retrieve institutional ownership data showing the percentage of shares held by institutional investors and changes over time.
29
+
30
+ If set, this operation will use `client_id` from the global security.
31
+
32
+ :param cusip: CUSIP security identifier for the security you want institutional ownership for.
33
+ :param from_: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
34
+ :param to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
35
+ :param symbol: Optional stock ticker symbol filter, such as AAPL. Use it to narrow results to one company.
36
+ :param retries: Override the default retry configuration for this method
37
+ :param server_url: Override the default server URL for this method
38
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
39
+ :param http_headers: Additional headers to set or replace on requests.
40
+ """
41
+ base_url = None
42
+ url_variables = None
43
+ if timeout_ms is None:
44
+ timeout_ms = self.sdk_configuration.timeout_ms
45
+
46
+ if timeout_ms is None:
47
+ timeout_ms = 30000
48
+
49
+ if server_url is not None:
50
+ base_url = server_url
51
+ else:
52
+ base_url = self._get_url(base_url, url_variables)
53
+
54
+ request = models.GetInstitutionalOwnershipRequest(
55
+ cusip=cusip,
56
+ from_=from_,
57
+ to=to,
58
+ symbol=symbol,
59
+ )
60
+
61
+ req = self._build_request(
62
+ method="GET",
63
+ path="/v1/institutional/ownership",
64
+ base_url=base_url,
65
+ url_variables=url_variables,
66
+ request=request,
67
+ request_body_required=False,
68
+ request_has_path_params=False,
69
+ request_has_query_params=True,
70
+ user_agent_header="user-agent",
71
+ accept_header_value="application/json",
72
+ http_headers=http_headers,
73
+ security=self.sdk_configuration.security,
74
+ allow_empty_value=None,
75
+ allowed_fields=["client_id"],
76
+ timeout_ms=timeout_ms,
77
+ )
78
+
79
+ if retries == UNSET:
80
+ if self.sdk_configuration.retry_config is not UNSET:
81
+ retries = self.sdk_configuration.retry_config
82
+ else:
83
+ retries = utils.RetryConfig(
84
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
85
+ )
86
+
87
+ retry_config = None
88
+ if isinstance(retries, utils.RetryConfig):
89
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
90
+
91
+ http_res = self.do_request(
92
+ hook_ctx=HookContext(
93
+ config=self.sdk_configuration,
94
+ base_url=base_url or "",
95
+ operation_id="getInstitutionalOwnership",
96
+ oauth2_scopes=["market:supplemental"],
97
+ security_source=self.sdk_configuration.security,
98
+ tags=["Ownership"],
99
+ extensions=None,
100
+ ),
101
+ request=req,
102
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
103
+ retry_config=retry_config,
104
+ )
105
+
106
+ response_data: Any = None
107
+ if utils.match_response(http_res, "200", "application/json"):
108
+ return models.GetInstitutionalOwnershipResponse(
109
+ institutional_ownership_response=unmarshal_json_response(
110
+ Optional[models.InstitutionalOwnershipResponse], http_res
111
+ ),
112
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
113
+ )
114
+ if utils.match_response(http_res, "400", "application/json"):
115
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
116
+ response_data.http_meta = models.HTTPMetadata(
117
+ request=req, response=http_res
118
+ )
119
+ raise errors.BadRequest(response_data, http_res)
120
+ if utils.match_response(http_res, "401", "application/json"):
121
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
122
+ response_data.http_meta = models.HTTPMetadata(
123
+ request=req, response=http_res
124
+ )
125
+ raise errors.Unauthorized(response_data, http_res)
126
+ if utils.match_response(http_res, "403", "application/json"):
127
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
128
+ response_data.http_meta = models.HTTPMetadata(
129
+ request=req, response=http_res
130
+ )
131
+ raise errors.Forbidden(response_data, http_res)
132
+ if utils.match_response(http_res, "404", "application/json"):
133
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
134
+ response_data.http_meta = models.HTTPMetadata(
135
+ request=req, response=http_res
136
+ )
137
+ raise errors.NotFound(response_data, http_res)
138
+ if utils.match_response(http_res, "500", "application/json"):
139
+ response_data = unmarshal_json_response(
140
+ errors.InternalServerErrorUnion, http_res
141
+ )
142
+ response_data.http_meta = models.HTTPMetadata(
143
+ request=req, response=http_res
144
+ )
145
+ raise errors.InternalServerError(response_data, http_res)
146
+ if utils.match_response(http_res, "4XX", "*"):
147
+ http_res_text = utils.stream_to_text(http_res)
148
+ raise errors.APIError("API error occurred", http_res, http_res_text)
149
+ if utils.match_response(http_res, "5XX", "*"):
150
+ http_res_text = utils.stream_to_text(http_res)
151
+ raise errors.APIError("API error occurred", http_res, http_res_text)
152
+
153
+ raise errors.APIError("Unexpected response received", http_res)
154
+
155
+ async def get_institutional_ownership_async(
156
+ self,
157
+ *,
158
+ cusip: str,
159
+ from_: date,
160
+ to: date,
161
+ symbol: Optional[str] = None,
162
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
163
+ server_url: Optional[str] = None,
164
+ timeout_ms: Optional[int] = None,
165
+ http_headers: Optional[Mapping[str, str]] = None,
166
+ ) -> models.GetInstitutionalOwnershipResponse:
167
+ r"""Get Institutional Ownership
168
+
169
+ Retrieve institutional ownership data showing the percentage of shares held by institutional investors and changes over time.
170
+
171
+ If set, this operation will use `client_id` from the global security.
172
+
173
+ :param cusip: CUSIP security identifier for the security you want institutional ownership for.
174
+ :param from_: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
175
+ :param to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
176
+ :param symbol: Optional stock ticker symbol filter, such as AAPL. Use it to narrow results to one company.
177
+ :param retries: Override the default retry configuration for this method
178
+ :param server_url: Override the default server URL for this method
179
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
180
+ :param http_headers: Additional headers to set or replace on requests.
181
+ """
182
+ base_url = None
183
+ url_variables = None
184
+ if timeout_ms is None:
185
+ timeout_ms = self.sdk_configuration.timeout_ms
186
+
187
+ if timeout_ms is None:
188
+ timeout_ms = 30000
189
+
190
+ if server_url is not None:
191
+ base_url = server_url
192
+ else:
193
+ base_url = self._get_url(base_url, url_variables)
194
+
195
+ request = models.GetInstitutionalOwnershipRequest(
196
+ cusip=cusip,
197
+ from_=from_,
198
+ to=to,
199
+ symbol=symbol,
200
+ )
201
+
202
+ req = self._build_request_async(
203
+ method="GET",
204
+ path="/v1/institutional/ownership",
205
+ base_url=base_url,
206
+ url_variables=url_variables,
207
+ request=request,
208
+ request_body_required=False,
209
+ request_has_path_params=False,
210
+ request_has_query_params=True,
211
+ user_agent_header="user-agent",
212
+ accept_header_value="application/json",
213
+ http_headers=http_headers,
214
+ security=self.sdk_configuration.security,
215
+ allow_empty_value=None,
216
+ allowed_fields=["client_id"],
217
+ timeout_ms=timeout_ms,
218
+ )
219
+
220
+ if retries == UNSET:
221
+ if self.sdk_configuration.retry_config is not UNSET:
222
+ retries = self.sdk_configuration.retry_config
223
+ else:
224
+ retries = utils.RetryConfig(
225
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
226
+ )
227
+
228
+ retry_config = None
229
+ if isinstance(retries, utils.RetryConfig):
230
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
231
+
232
+ http_res = await self.do_request_async(
233
+ hook_ctx=HookContext(
234
+ config=self.sdk_configuration,
235
+ base_url=base_url or "",
236
+ operation_id="getInstitutionalOwnership",
237
+ oauth2_scopes=["market:supplemental"],
238
+ security_source=self.sdk_configuration.security,
239
+ tags=["Ownership"],
240
+ extensions=None,
241
+ ),
242
+ request=req,
243
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
244
+ retry_config=retry_config,
245
+ )
246
+
247
+ response_data: Any = None
248
+ if utils.match_response(http_res, "200", "application/json"):
249
+ return models.GetInstitutionalOwnershipResponse(
250
+ institutional_ownership_response=unmarshal_json_response(
251
+ Optional[models.InstitutionalOwnershipResponse], http_res
252
+ ),
253
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
254
+ )
255
+ if utils.match_response(http_res, "400", "application/json"):
256
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
257
+ response_data.http_meta = models.HTTPMetadata(
258
+ request=req, response=http_res
259
+ )
260
+ raise errors.BadRequest(response_data, http_res)
261
+ if utils.match_response(http_res, "401", "application/json"):
262
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
263
+ response_data.http_meta = models.HTTPMetadata(
264
+ request=req, response=http_res
265
+ )
266
+ raise errors.Unauthorized(response_data, http_res)
267
+ if utils.match_response(http_res, "403", "application/json"):
268
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
269
+ response_data.http_meta = models.HTTPMetadata(
270
+ request=req, response=http_res
271
+ )
272
+ raise errors.Forbidden(response_data, http_res)
273
+ if utils.match_response(http_res, "404", "application/json"):
274
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
275
+ response_data.http_meta = models.HTTPMetadata(
276
+ request=req, response=http_res
277
+ )
278
+ raise errors.NotFound(response_data, http_res)
279
+ if utils.match_response(http_res, "500", "application/json"):
280
+ response_data = unmarshal_json_response(
281
+ errors.InternalServerErrorUnion, http_res
282
+ )
283
+ response_data.http_meta = models.HTTPMetadata(
284
+ request=req, response=http_res
285
+ )
286
+ raise errors.InternalServerError(response_data, http_res)
287
+ if utils.match_response(http_res, "4XX", "*"):
288
+ http_res_text = await utils.stream_to_text_async(http_res)
289
+ raise errors.APIError("API error occurred", http_res, http_res_text)
290
+ if utils.match_response(http_res, "5XX", "*"):
291
+ http_res_text = await utils.stream_to_text_async(http_res)
292
+ raise errors.APIError("API error occurred", http_res, http_res_text)
293
+
294
+ raise errors.APIError("Unexpected response received", http_res)
295
+
296
+ def get_institutional_portfolio(
297
+ self,
298
+ *,
299
+ cik: str,
300
+ from_: date,
301
+ to: date,
302
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
303
+ server_url: Optional[str] = None,
304
+ timeout_ms: Optional[int] = None,
305
+ http_headers: Optional[Mapping[str, str]] = None,
306
+ ) -> models.GetInstitutionalPortfolioResponse:
307
+ r"""Get Institutional Portfolio
308
+
309
+ Retrieve portfolio holdings for institutional investors including hedge funds, mutual funds, and pension funds based on SEC Form 13F filings.
310
+
311
+ If set, this operation will use `client_id` from the global security.
312
+
313
+ :param cik: Central Index Key (CIK) of the institution.
314
+ :param from_: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
315
+ :param to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
316
+ :param retries: Override the default retry configuration for this method
317
+ :param server_url: Override the default server URL for this method
318
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
319
+ :param http_headers: Additional headers to set or replace on requests.
320
+ """
321
+ base_url = None
322
+ url_variables = None
323
+ if timeout_ms is None:
324
+ timeout_ms = self.sdk_configuration.timeout_ms
325
+
326
+ if timeout_ms is None:
327
+ timeout_ms = 30000
328
+
329
+ if server_url is not None:
330
+ base_url = server_url
331
+ else:
332
+ base_url = self._get_url(base_url, url_variables)
333
+
334
+ request = models.GetInstitutionalPortfolioRequest(
335
+ cik=cik,
336
+ from_=from_,
337
+ to=to,
338
+ )
339
+
340
+ req = self._build_request(
341
+ method="GET",
342
+ path="/v1/institutional/portfolio",
343
+ base_url=base_url,
344
+ url_variables=url_variables,
345
+ request=request,
346
+ request_body_required=False,
347
+ request_has_path_params=False,
348
+ request_has_query_params=True,
349
+ user_agent_header="user-agent",
350
+ accept_header_value="application/json",
351
+ http_headers=http_headers,
352
+ security=self.sdk_configuration.security,
353
+ allow_empty_value=None,
354
+ allowed_fields=["client_id"],
355
+ timeout_ms=timeout_ms,
356
+ )
357
+
358
+ if retries == UNSET:
359
+ if self.sdk_configuration.retry_config is not UNSET:
360
+ retries = self.sdk_configuration.retry_config
361
+ else:
362
+ retries = utils.RetryConfig(
363
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
364
+ )
365
+
366
+ retry_config = None
367
+ if isinstance(retries, utils.RetryConfig):
368
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
369
+
370
+ http_res = self.do_request(
371
+ hook_ctx=HookContext(
372
+ config=self.sdk_configuration,
373
+ base_url=base_url or "",
374
+ operation_id="getInstitutionalPortfolio",
375
+ oauth2_scopes=["market:supplemental"],
376
+ security_source=self.sdk_configuration.security,
377
+ tags=["Ownership"],
378
+ extensions=None,
379
+ ),
380
+ request=req,
381
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
382
+ retry_config=retry_config,
383
+ )
384
+
385
+ response_data: Any = None
386
+ if utils.match_response(http_res, "200", "application/json"):
387
+ return models.GetInstitutionalPortfolioResponse(
388
+ institutional_portfolio_response=unmarshal_json_response(
389
+ Optional[models.InstitutionalPortfolioResponse], http_res
390
+ ),
391
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
392
+ )
393
+ if utils.match_response(http_res, "400", "application/json"):
394
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
395
+ response_data.http_meta = models.HTTPMetadata(
396
+ request=req, response=http_res
397
+ )
398
+ raise errors.BadRequest(response_data, http_res)
399
+ if utils.match_response(http_res, "401", "application/json"):
400
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
401
+ response_data.http_meta = models.HTTPMetadata(
402
+ request=req, response=http_res
403
+ )
404
+ raise errors.Unauthorized(response_data, http_res)
405
+ if utils.match_response(http_res, "403", "application/json"):
406
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
407
+ response_data.http_meta = models.HTTPMetadata(
408
+ request=req, response=http_res
409
+ )
410
+ raise errors.Forbidden(response_data, http_res)
411
+ if utils.match_response(http_res, "404", "application/json"):
412
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
413
+ response_data.http_meta = models.HTTPMetadata(
414
+ request=req, response=http_res
415
+ )
416
+ raise errors.NotFound(response_data, http_res)
417
+ if utils.match_response(http_res, "500", "application/json"):
418
+ response_data = unmarshal_json_response(
419
+ errors.InternalServerErrorUnion, http_res
420
+ )
421
+ response_data.http_meta = models.HTTPMetadata(
422
+ request=req, response=http_res
423
+ )
424
+ raise errors.InternalServerError(response_data, http_res)
425
+ if utils.match_response(http_res, "4XX", "*"):
426
+ http_res_text = utils.stream_to_text(http_res)
427
+ raise errors.APIError("API error occurred", http_res, http_res_text)
428
+ if utils.match_response(http_res, "5XX", "*"):
429
+ http_res_text = utils.stream_to_text(http_res)
430
+ raise errors.APIError("API error occurred", http_res, http_res_text)
431
+
432
+ raise errors.APIError("Unexpected response received", http_res)
433
+
434
+ async def get_institutional_portfolio_async(
435
+ self,
436
+ *,
437
+ cik: str,
438
+ from_: date,
439
+ to: date,
440
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
441
+ server_url: Optional[str] = None,
442
+ timeout_ms: Optional[int] = None,
443
+ http_headers: Optional[Mapping[str, str]] = None,
444
+ ) -> models.GetInstitutionalPortfolioResponse:
445
+ r"""Get Institutional Portfolio
446
+
447
+ Retrieve portfolio holdings for institutional investors including hedge funds, mutual funds, and pension funds based on SEC Form 13F filings.
448
+
449
+ If set, this operation will use `client_id` from the global security.
450
+
451
+ :param cik: Central Index Key (CIK) of the institution.
452
+ :param from_: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
453
+ :param to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
454
+ :param retries: Override the default retry configuration for this method
455
+ :param server_url: Override the default server URL for this method
456
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
457
+ :param http_headers: Additional headers to set or replace on requests.
458
+ """
459
+ base_url = None
460
+ url_variables = None
461
+ if timeout_ms is None:
462
+ timeout_ms = self.sdk_configuration.timeout_ms
463
+
464
+ if timeout_ms is None:
465
+ timeout_ms = 30000
466
+
467
+ if server_url is not None:
468
+ base_url = server_url
469
+ else:
470
+ base_url = self._get_url(base_url, url_variables)
471
+
472
+ request = models.GetInstitutionalPortfolioRequest(
473
+ cik=cik,
474
+ from_=from_,
475
+ to=to,
476
+ )
477
+
478
+ req = self._build_request_async(
479
+ method="GET",
480
+ path="/v1/institutional/portfolio",
481
+ base_url=base_url,
482
+ url_variables=url_variables,
483
+ request=request,
484
+ request_body_required=False,
485
+ request_has_path_params=False,
486
+ request_has_query_params=True,
487
+ user_agent_header="user-agent",
488
+ accept_header_value="application/json",
489
+ http_headers=http_headers,
490
+ security=self.sdk_configuration.security,
491
+ allow_empty_value=None,
492
+ allowed_fields=["client_id"],
493
+ timeout_ms=timeout_ms,
494
+ )
495
+
496
+ if retries == UNSET:
497
+ if self.sdk_configuration.retry_config is not UNSET:
498
+ retries = self.sdk_configuration.retry_config
499
+ else:
500
+ retries = utils.RetryConfig(
501
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
502
+ )
503
+
504
+ retry_config = None
505
+ if isinstance(retries, utils.RetryConfig):
506
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
507
+
508
+ http_res = await self.do_request_async(
509
+ hook_ctx=HookContext(
510
+ config=self.sdk_configuration,
511
+ base_url=base_url or "",
512
+ operation_id="getInstitutionalPortfolio",
513
+ oauth2_scopes=["market:supplemental"],
514
+ security_source=self.sdk_configuration.security,
515
+ tags=["Ownership"],
516
+ extensions=None,
517
+ ),
518
+ request=req,
519
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
520
+ retry_config=retry_config,
521
+ )
522
+
523
+ response_data: Any = None
524
+ if utils.match_response(http_res, "200", "application/json"):
525
+ return models.GetInstitutionalPortfolioResponse(
526
+ institutional_portfolio_response=unmarshal_json_response(
527
+ Optional[models.InstitutionalPortfolioResponse], http_res
528
+ ),
529
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
530
+ )
531
+ if utils.match_response(http_res, "400", "application/json"):
532
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
533
+ response_data.http_meta = models.HTTPMetadata(
534
+ request=req, response=http_res
535
+ )
536
+ raise errors.BadRequest(response_data, http_res)
537
+ if utils.match_response(http_res, "401", "application/json"):
538
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
539
+ response_data.http_meta = models.HTTPMetadata(
540
+ request=req, response=http_res
541
+ )
542
+ raise errors.Unauthorized(response_data, http_res)
543
+ if utils.match_response(http_res, "403", "application/json"):
544
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
545
+ response_data.http_meta = models.HTTPMetadata(
546
+ request=req, response=http_res
547
+ )
548
+ raise errors.Forbidden(response_data, http_res)
549
+ if utils.match_response(http_res, "404", "application/json"):
550
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
551
+ response_data.http_meta = models.HTTPMetadata(
552
+ request=req, response=http_res
553
+ )
554
+ raise errors.NotFound(response_data, http_res)
555
+ if utils.match_response(http_res, "500", "application/json"):
556
+ response_data = unmarshal_json_response(
557
+ errors.InternalServerErrorUnion, http_res
558
+ )
559
+ response_data.http_meta = models.HTTPMetadata(
560
+ request=req, response=http_res
561
+ )
562
+ raise errors.InternalServerError(response_data, http_res)
563
+ if utils.match_response(http_res, "4XX", "*"):
564
+ http_res_text = await utils.stream_to_text_async(http_res)
565
+ raise errors.APIError("API error occurred", http_res, http_res_text)
566
+ if utils.match_response(http_res, "5XX", "*"):
567
+ http_res_text = await utils.stream_to_text_async(http_res)
568
+ raise errors.APIError("API error occurred", http_res, http_res_text)
569
+
570
+ raise errors.APIError("Unexpected response received", http_res)
571
+
572
+ def get_ownership_data(
573
+ self,
574
+ *,
575
+ symbol: str,
576
+ limit: Optional[int] = None,
577
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
578
+ server_url: Optional[str] = None,
579
+ timeout_ms: Optional[int] = None,
580
+ http_headers: Optional[Mapping[str, str]] = None,
581
+ ) -> models.GetOwnershipDataResponse:
582
+ r"""Get Company Ownership Data
583
+
584
+ Retrieve detailed ownership structure showing percentage stakes held by institutional investors, insiders, and retail shareholders.
585
+
586
+ If set, this operation will use `client_id` from the global security.
587
+
588
+ :param symbol: Stock symbol, such as AAPL. Use it to narrow results to one company.
589
+ :param limit: Optional maximum number of results to return. Use it to keep ownership lists small for UI views.
590
+ :param retries: Override the default retry configuration for this method
591
+ :param server_url: Override the default server URL for this method
592
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
593
+ :param http_headers: Additional headers to set or replace on requests.
594
+ """
595
+ base_url = None
596
+ url_variables = None
597
+ if timeout_ms is None:
598
+ timeout_ms = self.sdk_configuration.timeout_ms
599
+
600
+ if timeout_ms is None:
601
+ timeout_ms = 30000
602
+
603
+ if server_url is not None:
604
+ base_url = server_url
605
+ else:
606
+ base_url = self._get_url(base_url, url_variables)
607
+
608
+ request = models.GetOwnershipDataRequest(
609
+ symbol=symbol,
610
+ limit=limit,
611
+ )
612
+
613
+ req = self._build_request(
614
+ method="GET",
615
+ path="/v1/ownership/data",
616
+ base_url=base_url,
617
+ url_variables=url_variables,
618
+ request=request,
619
+ request_body_required=False,
620
+ request_has_path_params=False,
621
+ request_has_query_params=True,
622
+ user_agent_header="user-agent",
623
+ accept_header_value="application/json",
624
+ http_headers=http_headers,
625
+ security=self.sdk_configuration.security,
626
+ allow_empty_value=None,
627
+ allowed_fields=["client_id"],
628
+ timeout_ms=timeout_ms,
629
+ )
630
+
631
+ if retries == UNSET:
632
+ if self.sdk_configuration.retry_config is not UNSET:
633
+ retries = self.sdk_configuration.retry_config
634
+ else:
635
+ retries = utils.RetryConfig(
636
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
637
+ )
638
+
639
+ retry_config = None
640
+ if isinstance(retries, utils.RetryConfig):
641
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
642
+
643
+ http_res = self.do_request(
644
+ hook_ctx=HookContext(
645
+ config=self.sdk_configuration,
646
+ base_url=base_url or "",
647
+ operation_id="getOwnershipData",
648
+ oauth2_scopes=["market:supplemental"],
649
+ security_source=self.sdk_configuration.security,
650
+ tags=["Ownership"],
651
+ extensions=None,
652
+ ),
653
+ request=req,
654
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
655
+ retry_config=retry_config,
656
+ )
657
+
658
+ response_data: Any = None
659
+ if utils.match_response(http_res, "200", "application/json"):
660
+ return models.GetOwnershipDataResponse(
661
+ ownership_data_response=unmarshal_json_response(
662
+ Optional[models.OwnershipDataResponse], http_res
663
+ ),
664
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
665
+ )
666
+ if utils.match_response(http_res, "400", "application/json"):
667
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
668
+ response_data.http_meta = models.HTTPMetadata(
669
+ request=req, response=http_res
670
+ )
671
+ raise errors.BadRequest(response_data, http_res)
672
+ if utils.match_response(http_res, "401", "application/json"):
673
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
674
+ response_data.http_meta = models.HTTPMetadata(
675
+ request=req, response=http_res
676
+ )
677
+ raise errors.Unauthorized(response_data, http_res)
678
+ if utils.match_response(http_res, "403", "application/json"):
679
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
680
+ response_data.http_meta = models.HTTPMetadata(
681
+ request=req, response=http_res
682
+ )
683
+ raise errors.Forbidden(response_data, http_res)
684
+ if utils.match_response(http_res, "404", "application/json"):
685
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
686
+ response_data.http_meta = models.HTTPMetadata(
687
+ request=req, response=http_res
688
+ )
689
+ raise errors.NotFound(response_data, http_res)
690
+ if utils.match_response(http_res, "500", "application/json"):
691
+ response_data = unmarshal_json_response(
692
+ errors.InternalServerErrorUnion, http_res
693
+ )
694
+ response_data.http_meta = models.HTTPMetadata(
695
+ request=req, response=http_res
696
+ )
697
+ raise errors.InternalServerError(response_data, http_res)
698
+ if utils.match_response(http_res, "4XX", "*"):
699
+ http_res_text = utils.stream_to_text(http_res)
700
+ raise errors.APIError("API error occurred", http_res, http_res_text)
701
+ if utils.match_response(http_res, "5XX", "*"):
702
+ http_res_text = utils.stream_to_text(http_res)
703
+ raise errors.APIError("API error occurred", http_res, http_res_text)
704
+
705
+ raise errors.APIError("Unexpected response received", http_res)
706
+
707
+ async def get_ownership_data_async(
708
+ self,
709
+ *,
710
+ symbol: str,
711
+ limit: Optional[int] = None,
712
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
713
+ server_url: Optional[str] = None,
714
+ timeout_ms: Optional[int] = None,
715
+ http_headers: Optional[Mapping[str, str]] = None,
716
+ ) -> models.GetOwnershipDataResponse:
717
+ r"""Get Company Ownership Data
718
+
719
+ Retrieve detailed ownership structure showing percentage stakes held by institutional investors, insiders, and retail shareholders.
720
+
721
+ If set, this operation will use `client_id` from the global security.
722
+
723
+ :param symbol: Stock symbol, such as AAPL. Use it to narrow results to one company.
724
+ :param limit: Optional maximum number of results to return. Use it to keep ownership lists small for UI views.
725
+ :param retries: Override the default retry configuration for this method
726
+ :param server_url: Override the default server URL for this method
727
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
728
+ :param http_headers: Additional headers to set or replace on requests.
729
+ """
730
+ base_url = None
731
+ url_variables = None
732
+ if timeout_ms is None:
733
+ timeout_ms = self.sdk_configuration.timeout_ms
734
+
735
+ if timeout_ms is None:
736
+ timeout_ms = 30000
737
+
738
+ if server_url is not None:
739
+ base_url = server_url
740
+ else:
741
+ base_url = self._get_url(base_url, url_variables)
742
+
743
+ request = models.GetOwnershipDataRequest(
744
+ symbol=symbol,
745
+ limit=limit,
746
+ )
747
+
748
+ req = self._build_request_async(
749
+ method="GET",
750
+ path="/v1/ownership/data",
751
+ base_url=base_url,
752
+ url_variables=url_variables,
753
+ request=request,
754
+ request_body_required=False,
755
+ request_has_path_params=False,
756
+ request_has_query_params=True,
757
+ user_agent_header="user-agent",
758
+ accept_header_value="application/json",
759
+ http_headers=http_headers,
760
+ security=self.sdk_configuration.security,
761
+ allow_empty_value=None,
762
+ allowed_fields=["client_id"],
763
+ timeout_ms=timeout_ms,
764
+ )
765
+
766
+ if retries == UNSET:
767
+ if self.sdk_configuration.retry_config is not UNSET:
768
+ retries = self.sdk_configuration.retry_config
769
+ else:
770
+ retries = utils.RetryConfig(
771
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
772
+ )
773
+
774
+ retry_config = None
775
+ if isinstance(retries, utils.RetryConfig):
776
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
777
+
778
+ http_res = await self.do_request_async(
779
+ hook_ctx=HookContext(
780
+ config=self.sdk_configuration,
781
+ base_url=base_url or "",
782
+ operation_id="getOwnershipData",
783
+ oauth2_scopes=["market:supplemental"],
784
+ security_source=self.sdk_configuration.security,
785
+ tags=["Ownership"],
786
+ extensions=None,
787
+ ),
788
+ request=req,
789
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
790
+ retry_config=retry_config,
791
+ )
792
+
793
+ response_data: Any = None
794
+ if utils.match_response(http_res, "200", "application/json"):
795
+ return models.GetOwnershipDataResponse(
796
+ ownership_data_response=unmarshal_json_response(
797
+ Optional[models.OwnershipDataResponse], http_res
798
+ ),
799
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
800
+ )
801
+ if utils.match_response(http_res, "400", "application/json"):
802
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
803
+ response_data.http_meta = models.HTTPMetadata(
804
+ request=req, response=http_res
805
+ )
806
+ raise errors.BadRequest(response_data, http_res)
807
+ if utils.match_response(http_res, "401", "application/json"):
808
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
809
+ response_data.http_meta = models.HTTPMetadata(
810
+ request=req, response=http_res
811
+ )
812
+ raise errors.Unauthorized(response_data, http_res)
813
+ if utils.match_response(http_res, "403", "application/json"):
814
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
815
+ response_data.http_meta = models.HTTPMetadata(
816
+ request=req, response=http_res
817
+ )
818
+ raise errors.Forbidden(response_data, http_res)
819
+ if utils.match_response(http_res, "404", "application/json"):
820
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
821
+ response_data.http_meta = models.HTTPMetadata(
822
+ request=req, response=http_res
823
+ )
824
+ raise errors.NotFound(response_data, http_res)
825
+ if utils.match_response(http_res, "500", "application/json"):
826
+ response_data = unmarshal_json_response(
827
+ errors.InternalServerErrorUnion, http_res
828
+ )
829
+ response_data.http_meta = models.HTTPMetadata(
830
+ request=req, response=http_res
831
+ )
832
+ raise errors.InternalServerError(response_data, http_res)
833
+ if utils.match_response(http_res, "4XX", "*"):
834
+ http_res_text = await utils.stream_to_text_async(http_res)
835
+ raise errors.APIError("API error occurred", http_res, http_res_text)
836
+ if utils.match_response(http_res, "5XX", "*"):
837
+ http_res_text = await utils.stream_to_text_async(http_res)
838
+ raise errors.APIError("API error occurred", http_res, http_res_text)
839
+
840
+ raise errors.APIError("Unexpected response received", http_res)
841
+
842
+ def get_fund_ownership(
843
+ self,
844
+ *,
845
+ symbol: str,
846
+ limit: Optional[int] = None,
847
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
848
+ server_url: Optional[str] = None,
849
+ timeout_ms: Optional[int] = None,
850
+ http_headers: Optional[Mapping[str, str]] = None,
851
+ ) -> models.GetFundOwnershipResponse:
852
+ r"""Get Fund Ownership Data
853
+
854
+ Retrieve mutual fund and ETF ownership data showing which funds hold positions in a specific security and their holding amounts.
855
+
856
+ If set, this operation will use `client_id` from the global security.
857
+
858
+ :param symbol: Stock symbol, such as AAPL. Use it to narrow results to one company.
859
+ :param limit: Optional maximum number of results to return. Use it to keep ownership lists small for UI views.
860
+ :param retries: Override the default retry configuration for this method
861
+ :param server_url: Override the default server URL for this method
862
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
863
+ :param http_headers: Additional headers to set or replace on requests.
864
+ """
865
+ base_url = None
866
+ url_variables = None
867
+ if timeout_ms is None:
868
+ timeout_ms = self.sdk_configuration.timeout_ms
869
+
870
+ if timeout_ms is None:
871
+ timeout_ms = 30000
872
+
873
+ if server_url is not None:
874
+ base_url = server_url
875
+ else:
876
+ base_url = self._get_url(base_url, url_variables)
877
+
878
+ request = models.GetFundOwnershipRequest(
879
+ symbol=symbol,
880
+ limit=limit,
881
+ )
882
+
883
+ req = self._build_request(
884
+ method="GET",
885
+ path="/v1/ownership/fund",
886
+ base_url=base_url,
887
+ url_variables=url_variables,
888
+ request=request,
889
+ request_body_required=False,
890
+ request_has_path_params=False,
891
+ request_has_query_params=True,
892
+ user_agent_header="user-agent",
893
+ accept_header_value="application/json",
894
+ http_headers=http_headers,
895
+ security=self.sdk_configuration.security,
896
+ allow_empty_value=None,
897
+ allowed_fields=["client_id"],
898
+ timeout_ms=timeout_ms,
899
+ )
900
+
901
+ if retries == UNSET:
902
+ if self.sdk_configuration.retry_config is not UNSET:
903
+ retries = self.sdk_configuration.retry_config
904
+ else:
905
+ retries = utils.RetryConfig(
906
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
907
+ )
908
+
909
+ retry_config = None
910
+ if isinstance(retries, utils.RetryConfig):
911
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
912
+
913
+ http_res = self.do_request(
914
+ hook_ctx=HookContext(
915
+ config=self.sdk_configuration,
916
+ base_url=base_url or "",
917
+ operation_id="getFundOwnership",
918
+ oauth2_scopes=["market:supplemental"],
919
+ security_source=self.sdk_configuration.security,
920
+ tags=["Ownership"],
921
+ extensions=None,
922
+ ),
923
+ request=req,
924
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
925
+ retry_config=retry_config,
926
+ )
927
+
928
+ response_data: Any = None
929
+ if utils.match_response(http_res, "200", "application/json"):
930
+ return models.GetFundOwnershipResponse(
931
+ ownership_data_response=unmarshal_json_response(
932
+ Optional[models.OwnershipDataResponse], http_res
933
+ ),
934
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
935
+ )
936
+ if utils.match_response(http_res, "400", "application/json"):
937
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
938
+ response_data.http_meta = models.HTTPMetadata(
939
+ request=req, response=http_res
940
+ )
941
+ raise errors.BadRequest(response_data, http_res)
942
+ if utils.match_response(http_res, "401", "application/json"):
943
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
944
+ response_data.http_meta = models.HTTPMetadata(
945
+ request=req, response=http_res
946
+ )
947
+ raise errors.Unauthorized(response_data, http_res)
948
+ if utils.match_response(http_res, "403", "application/json"):
949
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
950
+ response_data.http_meta = models.HTTPMetadata(
951
+ request=req, response=http_res
952
+ )
953
+ raise errors.Forbidden(response_data, http_res)
954
+ if utils.match_response(http_res, "404", "application/json"):
955
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
956
+ response_data.http_meta = models.HTTPMetadata(
957
+ request=req, response=http_res
958
+ )
959
+ raise errors.NotFound(response_data, http_res)
960
+ if utils.match_response(http_res, "500", "application/json"):
961
+ response_data = unmarshal_json_response(
962
+ errors.InternalServerErrorUnion, http_res
963
+ )
964
+ response_data.http_meta = models.HTTPMetadata(
965
+ request=req, response=http_res
966
+ )
967
+ raise errors.InternalServerError(response_data, http_res)
968
+ if utils.match_response(http_res, "4XX", "*"):
969
+ http_res_text = utils.stream_to_text(http_res)
970
+ raise errors.APIError("API error occurred", http_res, http_res_text)
971
+ if utils.match_response(http_res, "5XX", "*"):
972
+ http_res_text = utils.stream_to_text(http_res)
973
+ raise errors.APIError("API error occurred", http_res, http_res_text)
974
+
975
+ raise errors.APIError("Unexpected response received", http_res)
976
+
977
+ async def get_fund_ownership_async(
978
+ self,
979
+ *,
980
+ symbol: str,
981
+ limit: Optional[int] = None,
982
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
983
+ server_url: Optional[str] = None,
984
+ timeout_ms: Optional[int] = None,
985
+ http_headers: Optional[Mapping[str, str]] = None,
986
+ ) -> models.GetFundOwnershipResponse:
987
+ r"""Get Fund Ownership Data
988
+
989
+ Retrieve mutual fund and ETF ownership data showing which funds hold positions in a specific security and their holding amounts.
990
+
991
+ If set, this operation will use `client_id` from the global security.
992
+
993
+ :param symbol: Stock symbol, such as AAPL. Use it to narrow results to one company.
994
+ :param limit: Optional maximum number of results to return. Use it to keep ownership lists small for UI views.
995
+ :param retries: Override the default retry configuration for this method
996
+ :param server_url: Override the default server URL for this method
997
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
998
+ :param http_headers: Additional headers to set or replace on requests.
999
+ """
1000
+ base_url = None
1001
+ url_variables = None
1002
+ if timeout_ms is None:
1003
+ timeout_ms = self.sdk_configuration.timeout_ms
1004
+
1005
+ if timeout_ms is None:
1006
+ timeout_ms = 30000
1007
+
1008
+ if server_url is not None:
1009
+ base_url = server_url
1010
+ else:
1011
+ base_url = self._get_url(base_url, url_variables)
1012
+
1013
+ request = models.GetFundOwnershipRequest(
1014
+ symbol=symbol,
1015
+ limit=limit,
1016
+ )
1017
+
1018
+ req = self._build_request_async(
1019
+ method="GET",
1020
+ path="/v1/ownership/fund",
1021
+ base_url=base_url,
1022
+ url_variables=url_variables,
1023
+ request=request,
1024
+ request_body_required=False,
1025
+ request_has_path_params=False,
1026
+ request_has_query_params=True,
1027
+ user_agent_header="user-agent",
1028
+ accept_header_value="application/json",
1029
+ http_headers=http_headers,
1030
+ security=self.sdk_configuration.security,
1031
+ allow_empty_value=None,
1032
+ allowed_fields=["client_id"],
1033
+ timeout_ms=timeout_ms,
1034
+ )
1035
+
1036
+ if retries == UNSET:
1037
+ if self.sdk_configuration.retry_config is not UNSET:
1038
+ retries = self.sdk_configuration.retry_config
1039
+ else:
1040
+ retries = utils.RetryConfig(
1041
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
1042
+ )
1043
+
1044
+ retry_config = None
1045
+ if isinstance(retries, utils.RetryConfig):
1046
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1047
+
1048
+ http_res = await self.do_request_async(
1049
+ hook_ctx=HookContext(
1050
+ config=self.sdk_configuration,
1051
+ base_url=base_url or "",
1052
+ operation_id="getFundOwnership",
1053
+ oauth2_scopes=["market:supplemental"],
1054
+ security_source=self.sdk_configuration.security,
1055
+ tags=["Ownership"],
1056
+ extensions=None,
1057
+ ),
1058
+ request=req,
1059
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1060
+ retry_config=retry_config,
1061
+ )
1062
+
1063
+ response_data: Any = None
1064
+ if utils.match_response(http_res, "200", "application/json"):
1065
+ return models.GetFundOwnershipResponse(
1066
+ ownership_data_response=unmarshal_json_response(
1067
+ Optional[models.OwnershipDataResponse], http_res
1068
+ ),
1069
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1070
+ )
1071
+ if utils.match_response(http_res, "400", "application/json"):
1072
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1073
+ response_data.http_meta = models.HTTPMetadata(
1074
+ request=req, response=http_res
1075
+ )
1076
+ raise errors.BadRequest(response_data, http_res)
1077
+ if utils.match_response(http_res, "401", "application/json"):
1078
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1079
+ response_data.http_meta = models.HTTPMetadata(
1080
+ request=req, response=http_res
1081
+ )
1082
+ raise errors.Unauthorized(response_data, http_res)
1083
+ if utils.match_response(http_res, "403", "application/json"):
1084
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1085
+ response_data.http_meta = models.HTTPMetadata(
1086
+ request=req, response=http_res
1087
+ )
1088
+ raise errors.Forbidden(response_data, http_res)
1089
+ if utils.match_response(http_res, "404", "application/json"):
1090
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1091
+ response_data.http_meta = models.HTTPMetadata(
1092
+ request=req, response=http_res
1093
+ )
1094
+ raise errors.NotFound(response_data, http_res)
1095
+ if utils.match_response(http_res, "500", "application/json"):
1096
+ response_data = unmarshal_json_response(
1097
+ errors.InternalServerErrorUnion, http_res
1098
+ )
1099
+ response_data.http_meta = models.HTTPMetadata(
1100
+ request=req, response=http_res
1101
+ )
1102
+ raise errors.InternalServerError(response_data, http_res)
1103
+ if utils.match_response(http_res, "4XX", "*"):
1104
+ http_res_text = await utils.stream_to_text_async(http_res)
1105
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1106
+ if utils.match_response(http_res, "5XX", "*"):
1107
+ http_res_text = await utils.stream_to_text_async(http_res)
1108
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1109
+
1110
+ raise errors.APIError("Unexpected response received", http_res)
1111
+
1112
+ def get_insider_transactions(
1113
+ self,
1114
+ *,
1115
+ symbol: str,
1116
+ from_: Optional[date] = None,
1117
+ to: Optional[date] = None,
1118
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1119
+ server_url: Optional[str] = None,
1120
+ timeout_ms: Optional[int] = None,
1121
+ http_headers: Optional[Mapping[str, str]] = None,
1122
+ ) -> models.GetInsiderTransactionsResponse:
1123
+ r"""Get Insider Transactions
1124
+
1125
+ Retrieve insider trading activity including purchases, sales, and option exercises by company executives, directors, and major shareholders.
1126
+
1127
+ If set, this operation will use `client_id` from the global security.
1128
+
1129
+ :param symbol: Stock symbol, such as AAPL. Use it to narrow results to one company.
1130
+ :param from_: Optional start date in YYYY-MM-DD format. Use it to begin the research window.
1131
+ :param to: Optional end date in YYYY-MM-DD format. Use it to end the research window.
1132
+ :param retries: Override the default retry configuration for this method
1133
+ :param server_url: Override the default server URL for this method
1134
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1135
+ :param http_headers: Additional headers to set or replace on requests.
1136
+ """
1137
+ base_url = None
1138
+ url_variables = None
1139
+ if timeout_ms is None:
1140
+ timeout_ms = self.sdk_configuration.timeout_ms
1141
+
1142
+ if timeout_ms is None:
1143
+ timeout_ms = 30000
1144
+
1145
+ if server_url is not None:
1146
+ base_url = server_url
1147
+ else:
1148
+ base_url = self._get_url(base_url, url_variables)
1149
+
1150
+ request = models.GetInsiderTransactionsRequest(
1151
+ symbol=symbol,
1152
+ from_=from_,
1153
+ to=to,
1154
+ )
1155
+
1156
+ req = self._build_request(
1157
+ method="GET",
1158
+ path="/v1/ownership/insider-transactions",
1159
+ base_url=base_url,
1160
+ url_variables=url_variables,
1161
+ request=request,
1162
+ request_body_required=False,
1163
+ request_has_path_params=False,
1164
+ request_has_query_params=True,
1165
+ user_agent_header="user-agent",
1166
+ accept_header_value="application/json",
1167
+ http_headers=http_headers,
1168
+ security=self.sdk_configuration.security,
1169
+ allow_empty_value=None,
1170
+ allowed_fields=["client_id"],
1171
+ timeout_ms=timeout_ms,
1172
+ )
1173
+
1174
+ if retries == UNSET:
1175
+ if self.sdk_configuration.retry_config is not UNSET:
1176
+ retries = self.sdk_configuration.retry_config
1177
+ else:
1178
+ retries = utils.RetryConfig(
1179
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
1180
+ )
1181
+
1182
+ retry_config = None
1183
+ if isinstance(retries, utils.RetryConfig):
1184
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1185
+
1186
+ http_res = self.do_request(
1187
+ hook_ctx=HookContext(
1188
+ config=self.sdk_configuration,
1189
+ base_url=base_url or "",
1190
+ operation_id="getInsiderTransactions",
1191
+ oauth2_scopes=["market:supplemental"],
1192
+ security_source=self.sdk_configuration.security,
1193
+ tags=["Ownership"],
1194
+ extensions=None,
1195
+ ),
1196
+ request=req,
1197
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1198
+ retry_config=retry_config,
1199
+ )
1200
+
1201
+ response_data: Any = None
1202
+ if utils.match_response(http_res, "200", "application/json"):
1203
+ return models.GetInsiderTransactionsResponse(
1204
+ insider_transactions_response=unmarshal_json_response(
1205
+ Optional[models.InsiderTransactionsResponse], http_res
1206
+ ),
1207
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1208
+ )
1209
+ if utils.match_response(http_res, "400", "application/json"):
1210
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1211
+ response_data.http_meta = models.HTTPMetadata(
1212
+ request=req, response=http_res
1213
+ )
1214
+ raise errors.BadRequest(response_data, http_res)
1215
+ if utils.match_response(http_res, "401", "application/json"):
1216
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1217
+ response_data.http_meta = models.HTTPMetadata(
1218
+ request=req, response=http_res
1219
+ )
1220
+ raise errors.Unauthorized(response_data, http_res)
1221
+ if utils.match_response(http_res, "403", "application/json"):
1222
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1223
+ response_data.http_meta = models.HTTPMetadata(
1224
+ request=req, response=http_res
1225
+ )
1226
+ raise errors.Forbidden(response_data, http_res)
1227
+ if utils.match_response(http_res, "404", "application/json"):
1228
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1229
+ response_data.http_meta = models.HTTPMetadata(
1230
+ request=req, response=http_res
1231
+ )
1232
+ raise errors.NotFound(response_data, http_res)
1233
+ if utils.match_response(http_res, "500", "application/json"):
1234
+ response_data = unmarshal_json_response(
1235
+ errors.InternalServerErrorUnion, http_res
1236
+ )
1237
+ response_data.http_meta = models.HTTPMetadata(
1238
+ request=req, response=http_res
1239
+ )
1240
+ raise errors.InternalServerError(response_data, http_res)
1241
+ if utils.match_response(http_res, "4XX", "*"):
1242
+ http_res_text = utils.stream_to_text(http_res)
1243
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1244
+ if utils.match_response(http_res, "5XX", "*"):
1245
+ http_res_text = utils.stream_to_text(http_res)
1246
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1247
+
1248
+ raise errors.APIError("Unexpected response received", http_res)
1249
+
1250
+ async def get_insider_transactions_async(
1251
+ self,
1252
+ *,
1253
+ symbol: str,
1254
+ from_: Optional[date] = None,
1255
+ to: Optional[date] = None,
1256
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1257
+ server_url: Optional[str] = None,
1258
+ timeout_ms: Optional[int] = None,
1259
+ http_headers: Optional[Mapping[str, str]] = None,
1260
+ ) -> models.GetInsiderTransactionsResponse:
1261
+ r"""Get Insider Transactions
1262
+
1263
+ Retrieve insider trading activity including purchases, sales, and option exercises by company executives, directors, and major shareholders.
1264
+
1265
+ If set, this operation will use `client_id` from the global security.
1266
+
1267
+ :param symbol: Stock symbol, such as AAPL. Use it to narrow results to one company.
1268
+ :param from_: Optional start date in YYYY-MM-DD format. Use it to begin the research window.
1269
+ :param to: Optional end date in YYYY-MM-DD format. Use it to end the research window.
1270
+ :param retries: Override the default retry configuration for this method
1271
+ :param server_url: Override the default server URL for this method
1272
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1273
+ :param http_headers: Additional headers to set or replace on requests.
1274
+ """
1275
+ base_url = None
1276
+ url_variables = None
1277
+ if timeout_ms is None:
1278
+ timeout_ms = self.sdk_configuration.timeout_ms
1279
+
1280
+ if timeout_ms is None:
1281
+ timeout_ms = 30000
1282
+
1283
+ if server_url is not None:
1284
+ base_url = server_url
1285
+ else:
1286
+ base_url = self._get_url(base_url, url_variables)
1287
+
1288
+ request = models.GetInsiderTransactionsRequest(
1289
+ symbol=symbol,
1290
+ from_=from_,
1291
+ to=to,
1292
+ )
1293
+
1294
+ req = self._build_request_async(
1295
+ method="GET",
1296
+ path="/v1/ownership/insider-transactions",
1297
+ base_url=base_url,
1298
+ url_variables=url_variables,
1299
+ request=request,
1300
+ request_body_required=False,
1301
+ request_has_path_params=False,
1302
+ request_has_query_params=True,
1303
+ user_agent_header="user-agent",
1304
+ accept_header_value="application/json",
1305
+ http_headers=http_headers,
1306
+ security=self.sdk_configuration.security,
1307
+ allow_empty_value=None,
1308
+ allowed_fields=["client_id"],
1309
+ timeout_ms=timeout_ms,
1310
+ )
1311
+
1312
+ if retries == UNSET:
1313
+ if self.sdk_configuration.retry_config is not UNSET:
1314
+ retries = self.sdk_configuration.retry_config
1315
+ else:
1316
+ retries = utils.RetryConfig(
1317
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
1318
+ )
1319
+
1320
+ retry_config = None
1321
+ if isinstance(retries, utils.RetryConfig):
1322
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1323
+
1324
+ http_res = await self.do_request_async(
1325
+ hook_ctx=HookContext(
1326
+ config=self.sdk_configuration,
1327
+ base_url=base_url or "",
1328
+ operation_id="getInsiderTransactions",
1329
+ oauth2_scopes=["market:supplemental"],
1330
+ security_source=self.sdk_configuration.security,
1331
+ tags=["Ownership"],
1332
+ extensions=None,
1333
+ ),
1334
+ request=req,
1335
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
1336
+ retry_config=retry_config,
1337
+ )
1338
+
1339
+ response_data: Any = None
1340
+ if utils.match_response(http_res, "200", "application/json"):
1341
+ return models.GetInsiderTransactionsResponse(
1342
+ insider_transactions_response=unmarshal_json_response(
1343
+ Optional[models.InsiderTransactionsResponse], http_res
1344
+ ),
1345
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
1346
+ )
1347
+ if utils.match_response(http_res, "400", "application/json"):
1348
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
1349
+ response_data.http_meta = models.HTTPMetadata(
1350
+ request=req, response=http_res
1351
+ )
1352
+ raise errors.BadRequest(response_data, http_res)
1353
+ if utils.match_response(http_res, "401", "application/json"):
1354
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
1355
+ response_data.http_meta = models.HTTPMetadata(
1356
+ request=req, response=http_res
1357
+ )
1358
+ raise errors.Unauthorized(response_data, http_res)
1359
+ if utils.match_response(http_res, "403", "application/json"):
1360
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
1361
+ response_data.http_meta = models.HTTPMetadata(
1362
+ request=req, response=http_res
1363
+ )
1364
+ raise errors.Forbidden(response_data, http_res)
1365
+ if utils.match_response(http_res, "404", "application/json"):
1366
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
1367
+ response_data.http_meta = models.HTTPMetadata(
1368
+ request=req, response=http_res
1369
+ )
1370
+ raise errors.NotFound(response_data, http_res)
1371
+ if utils.match_response(http_res, "500", "application/json"):
1372
+ response_data = unmarshal_json_response(
1373
+ errors.InternalServerErrorUnion, http_res
1374
+ )
1375
+ response_data.http_meta = models.HTTPMetadata(
1376
+ request=req, response=http_res
1377
+ )
1378
+ raise errors.InternalServerError(response_data, http_res)
1379
+ if utils.match_response(http_res, "4XX", "*"):
1380
+ http_res_text = await utils.stream_to_text_async(http_res)
1381
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1382
+ if utils.match_response(http_res, "5XX", "*"):
1383
+ http_res_text = await utils.stream_to_text_async(http_res)
1384
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1385
+
1386
+ raise errors.APIError("Unexpected response received", http_res)