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
finance_dev/logos.py ADDED
@@ -0,0 +1,692 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+ # @generated-id: 1a647a0e535e
3
+
4
+ from .basesdk import BaseSDK
5
+ from finance_dev import errors, models, utils
6
+ from finance_dev._hooks import HookContext
7
+ from finance_dev.types import OptionalNullable, UNSET
8
+ from finance_dev.utils.unmarshal_json_response import unmarshal_json_response
9
+ from jsonpath import JSONPath
10
+ from typing import Any, Dict, List, Mapping, Optional, Union
11
+
12
+
13
+ class Logos(BaseSDK):
14
+ def search_logos(
15
+ self,
16
+ *,
17
+ search_keys: str,
18
+ fields: str,
19
+ search_keys_type: Optional[models.SearchLogosSearchKeysType] = None,
20
+ composite_auto: Optional[bool] = False,
21
+ composite_radius: Optional[int] = None,
22
+ scale: Optional[str] = None,
23
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
24
+ server_url: Optional[str] = None,
25
+ timeout_ms: Optional[int] = None,
26
+ http_headers: Optional[Mapping[str, str]] = None,
27
+ ) -> models.SearchLogosResponse:
28
+ r"""Search Company Logos
29
+
30
+ Search for company logos and brand assets by ticker symbol or company name for use in financial applications and dashboards.
31
+
32
+ If set, this operation will use `client_id` from the global security.
33
+
34
+ :param search_keys: One or more values to look up, comma-separated. The format depends on `searchKeysType`. For example, with `searchKeysType=symbol` send `AAPL,MSFT`; with `searchKeysType=cik` send `0000320193,0000789019`.
35
+ :param fields: Comma-separated list of logo asset fields to return. Common values:
36
+ - `logo_light` — full logo for light backgrounds.
37
+ - `logo_dark` — full logo for dark backgrounds.
38
+ - `mark_light` — square/icon mark for light backgrounds.
39
+ - `mark_dark` — square/icon mark for dark backgrounds.
40
+
41
+ Other provider-defined fields may also be supported — pass any field name the upstream image catalog exposes.
42
+ :param search_keys_type: Tells the API how to interpret the value you send in `searchKeys`. Allowed values:
43
+ - `firm_id` — the value is a firm/company internal ID.
44
+ - `firm` — the value is the firm/company name.
45
+ :param composite_auto: Whether to auto-generate composite logo marks. Use true when you need fallback visuals for symbols without a standard logo.
46
+ :param composite_radius: Corner radius for generated composite logos. Enter a value from 0 to 50 to match your UI style.
47
+ :param scale: Image scale for returned logo URLs. Use higher scale values for high-density displays.
48
+ :param retries: Override the default retry configuration for this method
49
+ :param server_url: Override the default server URL for this method
50
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
51
+ :param http_headers: Additional headers to set or replace on requests.
52
+ """
53
+ base_url = None
54
+ url_variables = None
55
+ if timeout_ms is None:
56
+ timeout_ms = self.sdk_configuration.timeout_ms
57
+
58
+ if timeout_ms is None:
59
+ timeout_ms = 30000
60
+
61
+ if server_url is not None:
62
+ base_url = server_url
63
+ else:
64
+ base_url = self._get_url(base_url, url_variables)
65
+
66
+ request = models.SearchLogosRequest(
67
+ search_keys=search_keys,
68
+ search_keys_type=search_keys_type,
69
+ fields=fields,
70
+ composite_auto=composite_auto,
71
+ composite_radius=composite_radius,
72
+ scale=scale,
73
+ )
74
+
75
+ req = self._build_request(
76
+ method="GET",
77
+ path="/v1/logos/search",
78
+ base_url=base_url,
79
+ url_variables=url_variables,
80
+ request=request,
81
+ request_body_required=False,
82
+ request_has_path_params=False,
83
+ request_has_query_params=True,
84
+ user_agent_header="user-agent",
85
+ accept_header_value="application/json",
86
+ http_headers=http_headers,
87
+ security=self.sdk_configuration.security,
88
+ allow_empty_value=None,
89
+ allowed_fields=["client_id"],
90
+ timeout_ms=timeout_ms,
91
+ )
92
+
93
+ if retries == UNSET:
94
+ if self.sdk_configuration.retry_config is not UNSET:
95
+ retries = self.sdk_configuration.retry_config
96
+ else:
97
+ retries = utils.RetryConfig(
98
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
99
+ )
100
+
101
+ retry_config = None
102
+ if isinstance(retries, utils.RetryConfig):
103
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
104
+
105
+ http_res = self.do_request(
106
+ hook_ctx=HookContext(
107
+ config=self.sdk_configuration,
108
+ base_url=base_url or "",
109
+ operation_id="searchLogos",
110
+ oauth2_scopes=["market:supplemental"],
111
+ security_source=self.sdk_configuration.security,
112
+ tags=["Logos"],
113
+ extensions=None,
114
+ ),
115
+ request=req,
116
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
117
+ retry_config=retry_config,
118
+ )
119
+
120
+ response_data: Any = None
121
+ if utils.match_response(http_res, "200", "application/json"):
122
+ return models.SearchLogosResponse(
123
+ logo_search_response=unmarshal_json_response(
124
+ Optional[models.LogoSearchResponse], http_res
125
+ ),
126
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
127
+ )
128
+ if utils.match_response(http_res, "400", "application/json"):
129
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
130
+ response_data.http_meta = models.HTTPMetadata(
131
+ request=req, response=http_res
132
+ )
133
+ raise errors.BadRequest(response_data, http_res)
134
+ if utils.match_response(http_res, "401", "application/json"):
135
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
136
+ response_data.http_meta = models.HTTPMetadata(
137
+ request=req, response=http_res
138
+ )
139
+ raise errors.Unauthorized(response_data, http_res)
140
+ if utils.match_response(http_res, "403", "application/json"):
141
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
142
+ response_data.http_meta = models.HTTPMetadata(
143
+ request=req, response=http_res
144
+ )
145
+ raise errors.Forbidden(response_data, http_res)
146
+ if utils.match_response(http_res, "404", "application/json"):
147
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
148
+ response_data.http_meta = models.HTTPMetadata(
149
+ request=req, response=http_res
150
+ )
151
+ raise errors.NotFound(response_data, http_res)
152
+ if utils.match_response(http_res, "500", "application/json"):
153
+ response_data = unmarshal_json_response(
154
+ errors.InternalServerErrorUnion, http_res
155
+ )
156
+ response_data.http_meta = models.HTTPMetadata(
157
+ request=req, response=http_res
158
+ )
159
+ raise errors.InternalServerError(response_data, http_res)
160
+ if utils.match_response(http_res, "4XX", "*"):
161
+ http_res_text = utils.stream_to_text(http_res)
162
+ raise errors.APIError("API error occurred", http_res, http_res_text)
163
+ if utils.match_response(http_res, "5XX", "*"):
164
+ http_res_text = utils.stream_to_text(http_res)
165
+ raise errors.APIError("API error occurred", http_res, http_res_text)
166
+
167
+ raise errors.APIError("Unexpected response received", http_res)
168
+
169
+ async def search_logos_async(
170
+ self,
171
+ *,
172
+ search_keys: str,
173
+ fields: str,
174
+ search_keys_type: Optional[models.SearchLogosSearchKeysType] = None,
175
+ composite_auto: Optional[bool] = False,
176
+ composite_radius: Optional[int] = None,
177
+ scale: Optional[str] = None,
178
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
179
+ server_url: Optional[str] = None,
180
+ timeout_ms: Optional[int] = None,
181
+ http_headers: Optional[Mapping[str, str]] = None,
182
+ ) -> models.SearchLogosResponse:
183
+ r"""Search Company Logos
184
+
185
+ Search for company logos and brand assets by ticker symbol or company name for use in financial applications and dashboards.
186
+
187
+ If set, this operation will use `client_id` from the global security.
188
+
189
+ :param search_keys: One or more values to look up, comma-separated. The format depends on `searchKeysType`. For example, with `searchKeysType=symbol` send `AAPL,MSFT`; with `searchKeysType=cik` send `0000320193,0000789019`.
190
+ :param fields: Comma-separated list of logo asset fields to return. Common values:
191
+ - `logo_light` — full logo for light backgrounds.
192
+ - `logo_dark` — full logo for dark backgrounds.
193
+ - `mark_light` — square/icon mark for light backgrounds.
194
+ - `mark_dark` — square/icon mark for dark backgrounds.
195
+
196
+ Other provider-defined fields may also be supported — pass any field name the upstream image catalog exposes.
197
+ :param search_keys_type: Tells the API how to interpret the value you send in `searchKeys`. Allowed values:
198
+ - `firm_id` — the value is a firm/company internal ID.
199
+ - `firm` — the value is the firm/company name.
200
+ :param composite_auto: Whether to auto-generate composite logo marks. Use true when you need fallback visuals for symbols without a standard logo.
201
+ :param composite_radius: Corner radius for generated composite logos. Enter a value from 0 to 50 to match your UI style.
202
+ :param scale: Image scale for returned logo URLs. Use higher scale values for high-density displays.
203
+ :param retries: Override the default retry configuration for this method
204
+ :param server_url: Override the default server URL for this method
205
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
206
+ :param http_headers: Additional headers to set or replace on requests.
207
+ """
208
+ base_url = None
209
+ url_variables = None
210
+ if timeout_ms is None:
211
+ timeout_ms = self.sdk_configuration.timeout_ms
212
+
213
+ if timeout_ms is None:
214
+ timeout_ms = 30000
215
+
216
+ if server_url is not None:
217
+ base_url = server_url
218
+ else:
219
+ base_url = self._get_url(base_url, url_variables)
220
+
221
+ request = models.SearchLogosRequest(
222
+ search_keys=search_keys,
223
+ search_keys_type=search_keys_type,
224
+ fields=fields,
225
+ composite_auto=composite_auto,
226
+ composite_radius=composite_radius,
227
+ scale=scale,
228
+ )
229
+
230
+ req = self._build_request_async(
231
+ method="GET",
232
+ path="/v1/logos/search",
233
+ base_url=base_url,
234
+ url_variables=url_variables,
235
+ request=request,
236
+ request_body_required=False,
237
+ request_has_path_params=False,
238
+ request_has_query_params=True,
239
+ user_agent_header="user-agent",
240
+ accept_header_value="application/json",
241
+ http_headers=http_headers,
242
+ security=self.sdk_configuration.security,
243
+ allow_empty_value=None,
244
+ allowed_fields=["client_id"],
245
+ timeout_ms=timeout_ms,
246
+ )
247
+
248
+ if retries == UNSET:
249
+ if self.sdk_configuration.retry_config is not UNSET:
250
+ retries = self.sdk_configuration.retry_config
251
+ else:
252
+ retries = utils.RetryConfig(
253
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
254
+ )
255
+
256
+ retry_config = None
257
+ if isinstance(retries, utils.RetryConfig):
258
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
259
+
260
+ http_res = await self.do_request_async(
261
+ hook_ctx=HookContext(
262
+ config=self.sdk_configuration,
263
+ base_url=base_url or "",
264
+ operation_id="searchLogos",
265
+ oauth2_scopes=["market:supplemental"],
266
+ security_source=self.sdk_configuration.security,
267
+ tags=["Logos"],
268
+ extensions=None,
269
+ ),
270
+ request=req,
271
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
272
+ retry_config=retry_config,
273
+ )
274
+
275
+ response_data: Any = None
276
+ if utils.match_response(http_res, "200", "application/json"):
277
+ return models.SearchLogosResponse(
278
+ logo_search_response=unmarshal_json_response(
279
+ Optional[models.LogoSearchResponse], http_res
280
+ ),
281
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
282
+ )
283
+ if utils.match_response(http_res, "400", "application/json"):
284
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
285
+ response_data.http_meta = models.HTTPMetadata(
286
+ request=req, response=http_res
287
+ )
288
+ raise errors.BadRequest(response_data, http_res)
289
+ if utils.match_response(http_res, "401", "application/json"):
290
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
291
+ response_data.http_meta = models.HTTPMetadata(
292
+ request=req, response=http_res
293
+ )
294
+ raise errors.Unauthorized(response_data, http_res)
295
+ if utils.match_response(http_res, "403", "application/json"):
296
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
297
+ response_data.http_meta = models.HTTPMetadata(
298
+ request=req, response=http_res
299
+ )
300
+ raise errors.Forbidden(response_data, http_res)
301
+ if utils.match_response(http_res, "404", "application/json"):
302
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
303
+ response_data.http_meta = models.HTTPMetadata(
304
+ request=req, response=http_res
305
+ )
306
+ raise errors.NotFound(response_data, http_res)
307
+ if utils.match_response(http_res, "500", "application/json"):
308
+ response_data = unmarshal_json_response(
309
+ errors.InternalServerErrorUnion, http_res
310
+ )
311
+ response_data.http_meta = models.HTTPMetadata(
312
+ request=req, response=http_res
313
+ )
314
+ raise errors.InternalServerError(response_data, http_res)
315
+ if utils.match_response(http_res, "4XX", "*"):
316
+ http_res_text = await utils.stream_to_text_async(http_res)
317
+ raise errors.APIError("API error occurred", http_res, http_res_text)
318
+ if utils.match_response(http_res, "5XX", "*"):
319
+ http_res_text = await utils.stream_to_text_async(http_res)
320
+ raise errors.APIError("API error occurred", http_res, http_res_text)
321
+
322
+ raise errors.APIError("Unexpected response received", http_res)
323
+
324
+ def sync_logos(
325
+ self,
326
+ *,
327
+ fields: str,
328
+ updated_since: Optional[int] = None,
329
+ composite_auto: Optional[bool] = False,
330
+ composite_radius: Optional[int] = None,
331
+ scale: Optional[str] = None,
332
+ page: Optional[int] = None,
333
+ page_size: Optional[int] = None,
334
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
335
+ server_url: Optional[str] = None,
336
+ timeout_ms: Optional[int] = None,
337
+ http_headers: Optional[Mapping[str, str]] = None,
338
+ ) -> Optional[models.SyncLogosResponse]:
339
+ r"""Sync Company Logos
340
+
341
+ Synchronize and retrieve the latest company logos ensuring brand assets are up-to-date across all platforms.
342
+
343
+ If set, this operation will use `client_id` from the global security.
344
+
345
+ :param fields: Comma-separated list of logo asset fields to return. Common values:
346
+ - `logo_light` — full logo for light backgrounds.
347
+ - `logo_dark` — full logo for dark backgrounds.
348
+ - `mark_light` — square/icon mark for light backgrounds.
349
+ - `mark_dark` — square/icon mark for dark backgrounds.
350
+
351
+ Other provider-defined fields may also be supported — pass any field name the upstream image catalog exposes.
352
+ :param updated_since: Only return logos updated since this Unix timestamp
353
+ :param composite_auto: Whether to auto-generate composite logo marks. Use true when you need fallback visuals for symbols without a standard logo.
354
+ :param composite_radius: Corner radius for generated composite logos. Enter a value from 0 to 50 to match your UI style.
355
+ :param scale: Image scale for returned logo URLs. Use higher scale values for high-density displays.
356
+ :param page: Zero-based page offset. Enter 0 for the first page of results.
357
+ :param page_size: Number of results per page. Use this to control pagination size in list views. (1-1000)
358
+ :param retries: Override the default retry configuration for this method
359
+ :param server_url: Override the default server URL for this method
360
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
361
+ :param http_headers: Additional headers to set or replace on requests.
362
+ """
363
+ base_url = None
364
+ url_variables = None
365
+ if timeout_ms is None:
366
+ timeout_ms = self.sdk_configuration.timeout_ms
367
+
368
+ if timeout_ms is None:
369
+ timeout_ms = 30000
370
+
371
+ if server_url is not None:
372
+ base_url = server_url
373
+ else:
374
+ base_url = self._get_url(base_url, url_variables)
375
+
376
+ request = models.SyncLogosRequest(
377
+ fields=fields,
378
+ updated_since=updated_since,
379
+ composite_auto=composite_auto,
380
+ composite_radius=composite_radius,
381
+ scale=scale,
382
+ page=page,
383
+ page_size=page_size,
384
+ )
385
+
386
+ req = self._build_request(
387
+ method="GET",
388
+ path="/v1/logos/sync",
389
+ base_url=base_url,
390
+ url_variables=url_variables,
391
+ request=request,
392
+ request_body_required=False,
393
+ request_has_path_params=False,
394
+ request_has_query_params=True,
395
+ user_agent_header="user-agent",
396
+ accept_header_value="application/json",
397
+ http_headers=http_headers,
398
+ security=self.sdk_configuration.security,
399
+ allow_empty_value=None,
400
+ allowed_fields=["client_id"],
401
+ timeout_ms=timeout_ms,
402
+ )
403
+
404
+ if retries == UNSET:
405
+ if self.sdk_configuration.retry_config is not UNSET:
406
+ retries = self.sdk_configuration.retry_config
407
+ else:
408
+ retries = utils.RetryConfig(
409
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
410
+ )
411
+
412
+ retry_config = None
413
+ if isinstance(retries, utils.RetryConfig):
414
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
415
+
416
+ http_res = self.do_request(
417
+ hook_ctx=HookContext(
418
+ config=self.sdk_configuration,
419
+ base_url=base_url or "",
420
+ operation_id="syncLogos",
421
+ oauth2_scopes=["market:supplemental"],
422
+ security_source=self.sdk_configuration.security,
423
+ tags=["Logos"],
424
+ extensions=None,
425
+ ),
426
+ request=req,
427
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
428
+ retry_config=retry_config,
429
+ )
430
+
431
+ def next_func() -> Optional[models.SyncLogosResponse]:
432
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
433
+ page = request.page if isinstance(request.page, int) else 1
434
+ next_page = page + 1
435
+
436
+ if not http_res.text:
437
+ return None
438
+ results = JSONPath("$.data").parse(body)
439
+ if len(results) == 0 or len(results[0]) == 0:
440
+ return None
441
+ limit_ = request.page_size if isinstance(request.page_size, int) else 0
442
+ if len(results[0]) < limit_:
443
+ return None
444
+
445
+ return self.sync_logos(
446
+ fields=fields,
447
+ updated_since=updated_since,
448
+ composite_auto=composite_auto,
449
+ composite_radius=composite_radius,
450
+ scale=scale,
451
+ page=next_page,
452
+ page_size=page_size,
453
+ retries=retries,
454
+ server_url=server_url,
455
+ timeout_ms=timeout_ms,
456
+ http_headers=http_headers,
457
+ )
458
+
459
+ response_data: Any = None
460
+ if utils.match_response(http_res, "200", "application/json"):
461
+ return models.SyncLogosResponse(
462
+ logo_sync_response=unmarshal_json_response(
463
+ Optional[models.LogoSyncResponse], http_res
464
+ ),
465
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
466
+ next=next_func,
467
+ )
468
+ if utils.match_response(http_res, "400", "application/json"):
469
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
470
+ response_data.http_meta = models.HTTPMetadata(
471
+ request=req, response=http_res
472
+ )
473
+ raise errors.BadRequest(response_data, http_res)
474
+ if utils.match_response(http_res, "401", "application/json"):
475
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
476
+ response_data.http_meta = models.HTTPMetadata(
477
+ request=req, response=http_res
478
+ )
479
+ raise errors.Unauthorized(response_data, http_res)
480
+ if utils.match_response(http_res, "403", "application/json"):
481
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
482
+ response_data.http_meta = models.HTTPMetadata(
483
+ request=req, response=http_res
484
+ )
485
+ raise errors.Forbidden(response_data, http_res)
486
+ if utils.match_response(http_res, "404", "application/json"):
487
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
488
+ response_data.http_meta = models.HTTPMetadata(
489
+ request=req, response=http_res
490
+ )
491
+ raise errors.NotFound(response_data, http_res)
492
+ if utils.match_response(http_res, "500", "application/json"):
493
+ response_data = unmarshal_json_response(
494
+ errors.InternalServerErrorUnion, http_res
495
+ )
496
+ response_data.http_meta = models.HTTPMetadata(
497
+ request=req, response=http_res
498
+ )
499
+ raise errors.InternalServerError(response_data, http_res)
500
+ if utils.match_response(http_res, "4XX", "*"):
501
+ http_res_text = utils.stream_to_text(http_res)
502
+ raise errors.APIError("API error occurred", http_res, http_res_text)
503
+ if utils.match_response(http_res, "5XX", "*"):
504
+ http_res_text = utils.stream_to_text(http_res)
505
+ raise errors.APIError("API error occurred", http_res, http_res_text)
506
+
507
+ raise errors.APIError("Unexpected response received", http_res)
508
+
509
+ async def sync_logos_async(
510
+ self,
511
+ *,
512
+ fields: str,
513
+ updated_since: Optional[int] = None,
514
+ composite_auto: Optional[bool] = False,
515
+ composite_radius: Optional[int] = None,
516
+ scale: Optional[str] = None,
517
+ page: Optional[int] = None,
518
+ page_size: Optional[int] = None,
519
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
520
+ server_url: Optional[str] = None,
521
+ timeout_ms: Optional[int] = None,
522
+ http_headers: Optional[Mapping[str, str]] = None,
523
+ ) -> Optional[models.SyncLogosResponse]:
524
+ r"""Sync Company Logos
525
+
526
+ Synchronize and retrieve the latest company logos ensuring brand assets are up-to-date across all platforms.
527
+
528
+ If set, this operation will use `client_id` from the global security.
529
+
530
+ :param fields: Comma-separated list of logo asset fields to return. Common values:
531
+ - `logo_light` — full logo for light backgrounds.
532
+ - `logo_dark` — full logo for dark backgrounds.
533
+ - `mark_light` — square/icon mark for light backgrounds.
534
+ - `mark_dark` — square/icon mark for dark backgrounds.
535
+
536
+ Other provider-defined fields may also be supported — pass any field name the upstream image catalog exposes.
537
+ :param updated_since: Only return logos updated since this Unix timestamp
538
+ :param composite_auto: Whether to auto-generate composite logo marks. Use true when you need fallback visuals for symbols without a standard logo.
539
+ :param composite_radius: Corner radius for generated composite logos. Enter a value from 0 to 50 to match your UI style.
540
+ :param scale: Image scale for returned logo URLs. Use higher scale values for high-density displays.
541
+ :param page: Zero-based page offset. Enter 0 for the first page of results.
542
+ :param page_size: Number of results per page. Use this to control pagination size in list views. (1-1000)
543
+ :param retries: Override the default retry configuration for this method
544
+ :param server_url: Override the default server URL for this method
545
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
546
+ :param http_headers: Additional headers to set or replace on requests.
547
+ """
548
+ base_url = None
549
+ url_variables = None
550
+ if timeout_ms is None:
551
+ timeout_ms = self.sdk_configuration.timeout_ms
552
+
553
+ if timeout_ms is None:
554
+ timeout_ms = 30000
555
+
556
+ if server_url is not None:
557
+ base_url = server_url
558
+ else:
559
+ base_url = self._get_url(base_url, url_variables)
560
+
561
+ request = models.SyncLogosRequest(
562
+ fields=fields,
563
+ updated_since=updated_since,
564
+ composite_auto=composite_auto,
565
+ composite_radius=composite_radius,
566
+ scale=scale,
567
+ page=page,
568
+ page_size=page_size,
569
+ )
570
+
571
+ req = self._build_request_async(
572
+ method="GET",
573
+ path="/v1/logos/sync",
574
+ base_url=base_url,
575
+ url_variables=url_variables,
576
+ request=request,
577
+ request_body_required=False,
578
+ request_has_path_params=False,
579
+ request_has_query_params=True,
580
+ user_agent_header="user-agent",
581
+ accept_header_value="application/json",
582
+ http_headers=http_headers,
583
+ security=self.sdk_configuration.security,
584
+ allow_empty_value=None,
585
+ allowed_fields=["client_id"],
586
+ timeout_ms=timeout_ms,
587
+ )
588
+
589
+ if retries == UNSET:
590
+ if self.sdk_configuration.retry_config is not UNSET:
591
+ retries = self.sdk_configuration.retry_config
592
+ else:
593
+ retries = utils.RetryConfig(
594
+ "backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
595
+ )
596
+
597
+ retry_config = None
598
+ if isinstance(retries, utils.RetryConfig):
599
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
600
+
601
+ http_res = await self.do_request_async(
602
+ hook_ctx=HookContext(
603
+ config=self.sdk_configuration,
604
+ base_url=base_url or "",
605
+ operation_id="syncLogos",
606
+ oauth2_scopes=["market:supplemental"],
607
+ security_source=self.sdk_configuration.security,
608
+ tags=["Logos"],
609
+ extensions=None,
610
+ ),
611
+ request=req,
612
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
613
+ retry_config=retry_config,
614
+ )
615
+
616
+ def next_func() -> Optional[models.SyncLogosResponse]:
617
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
618
+ page = request.page if isinstance(request.page, int) else 1
619
+ next_page = page + 1
620
+
621
+ if not http_res.text:
622
+ return None
623
+ results = JSONPath("$.data").parse(body)
624
+ if len(results) == 0 or len(results[0]) == 0:
625
+ return None
626
+ limit_ = request.page_size if isinstance(request.page_size, int) else 0
627
+ if len(results[0]) < limit_:
628
+ return None
629
+
630
+ return self.sync_logos(
631
+ fields=fields,
632
+ updated_since=updated_since,
633
+ composite_auto=composite_auto,
634
+ composite_radius=composite_radius,
635
+ scale=scale,
636
+ page=next_page,
637
+ page_size=page_size,
638
+ retries=retries,
639
+ server_url=server_url,
640
+ timeout_ms=timeout_ms,
641
+ http_headers=http_headers,
642
+ )
643
+
644
+ response_data: Any = None
645
+ if utils.match_response(http_res, "200", "application/json"):
646
+ return models.SyncLogosResponse(
647
+ logo_sync_response=unmarshal_json_response(
648
+ Optional[models.LogoSyncResponse], http_res
649
+ ),
650
+ http_meta=models.HTTPMetadata(request=req, response=http_res),
651
+ next=next_func,
652
+ )
653
+ if utils.match_response(http_res, "400", "application/json"):
654
+ response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
655
+ response_data.http_meta = models.HTTPMetadata(
656
+ request=req, response=http_res
657
+ )
658
+ raise errors.BadRequest(response_data, http_res)
659
+ if utils.match_response(http_res, "401", "application/json"):
660
+ response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
661
+ response_data.http_meta = models.HTTPMetadata(
662
+ request=req, response=http_res
663
+ )
664
+ raise errors.Unauthorized(response_data, http_res)
665
+ if utils.match_response(http_res, "403", "application/json"):
666
+ response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
667
+ response_data.http_meta = models.HTTPMetadata(
668
+ request=req, response=http_res
669
+ )
670
+ raise errors.Forbidden(response_data, http_res)
671
+ if utils.match_response(http_res, "404", "application/json"):
672
+ response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
673
+ response_data.http_meta = models.HTTPMetadata(
674
+ request=req, response=http_res
675
+ )
676
+ raise errors.NotFound(response_data, http_res)
677
+ if utils.match_response(http_res, "500", "application/json"):
678
+ response_data = unmarshal_json_response(
679
+ errors.InternalServerErrorUnion, http_res
680
+ )
681
+ response_data.http_meta = models.HTTPMetadata(
682
+ request=req, response=http_res
683
+ )
684
+ raise errors.InternalServerError(response_data, http_res)
685
+ if utils.match_response(http_res, "4XX", "*"):
686
+ http_res_text = await utils.stream_to_text_async(http_res)
687
+ raise errors.APIError("API error occurred", http_res, http_res_text)
688
+ if utils.match_response(http_res, "5XX", "*"):
689
+ http_res_text = await utils.stream_to_text_async(http_res)
690
+ raise errors.APIError("API error occurred", http_res, http_res_text)
691
+
692
+ raise errors.APIError("Unexpected response received", http_res)