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.
- finance_dev/__init__.py +18 -0
- finance_dev/_hooks/__init__.py +7 -0
- finance_dev/_hooks/clientcredentials.py +319 -0
- finance_dev/_hooks/oauth2scopes.py +50 -0
- finance_dev/_hooks/registration.py +13 -0
- finance_dev/_hooks/sdkhooks.py +82 -0
- finance_dev/_hooks/types.py +125 -0
- finance_dev/_version.py +16 -0
- finance_dev/accounts.py +797 -0
- finance_dev/alternativedata.py +4830 -0
- finance_dev/analytics.py +3757 -0
- finance_dev/basesdk.py +393 -0
- finance_dev/calendar.py +1523 -0
- finance_dev/chart.py +1881 -0
- finance_dev/company.py +1105 -0
- finance_dev/corporateactions.py +1795 -0
- finance_dev/economy.py +1153 -0
- finance_dev/errors/__init__.py +94 -0
- finance_dev/errors/apierror.py +41 -0
- finance_dev/errors/authenticationerrorenvelope.py +43 -0
- finance_dev/errors/badrequest.py +34 -0
- finance_dev/errors/errorenvelope.py +42 -0
- finance_dev/errors/errorresponse.py +45 -0
- finance_dev/errors/financedevapierror.py +31 -0
- finance_dev/errors/forbidden.py +34 -0
- finance_dev/errors/internalservererror.py +35 -0
- finance_dev/errors/no_response_error.py +18 -0
- finance_dev/errors/notfound.py +34 -0
- finance_dev/errors/orderhistorybadrequest.py +35 -0
- finance_dev/errors/predorderserrorenvelope.py +42 -0
- finance_dev/errors/responsevalidationerror.py +28 -0
- finance_dev/errors/unauthorized.py +34 -0
- finance_dev/estimates.py +1906 -0
- finance_dev/etf.py +1108 -0
- finance_dev/filings.py +586 -0
- finance_dev/financials.py +4079 -0
- finance_dev/history.py +477 -0
- finance_dev/httpclient.py +126 -0
- finance_dev/indices.py +2308 -0
- finance_dev/logos.py +692 -0
- finance_dev/market.py +1825 -0
- finance_dev/markets.py +952 -0
- finance_dev/models/__init__.py +4568 -0
- finance_dev/models/accountbalancev2.py +340 -0
- finance_dev/models/accountitem.py +78 -0
- finance_dev/models/accountposition.py +147 -0
- finance_dev/models/aggregatetechnicalindicatorsresponse.py +192 -0
- finance_dev/models/analystinsightitem.py +161 -0
- finance_dev/models/analystinsightsresponse.py +39 -0
- finance_dev/models/apperror.py +123 -0
- finance_dev/models/authenticationerrordetail.py +58 -0
- finance_dev/models/bankbranchesresponse.py +96 -0
- finance_dev/models/basicfinancials.py +243 -0
- finance_dev/models/bullbearanalysisresponse.py +150 -0
- finance_dev/models/cancelorderop.py +40 -0
- finance_dev/models/cancelordrequest_union.py +287 -0
- finance_dev/models/cancelordresponse.py +115 -0
- finance_dev/models/cashflowstatement.py +290 -0
- finance_dev/models/cashflowstatementsresponse.py +61 -0
- finance_dev/models/chartbars.py +111 -0
- finance_dev/models/chartconfig.py +81 -0
- finance_dev/models/chartresolution.py +46 -0
- finance_dev/models/companyesgresponse.py +408 -0
- finance_dev/models/companyexecutive.py +70 -0
- finance_dev/models/companyexecutiveresponse.py +39 -0
- finance_dev/models/companypeersresponse.py +38 -0
- finance_dev/models/companypresentationresponse.py +96 -0
- finance_dev/models/companyprofile.py +255 -0
- finance_dev/models/conferencecallsresponse.py +169 -0
- finance_dev/models/congressionaltradingresponse.py +138 -0
- finance_dev/models/covid19uscasesresponse.py +79 -0
- finance_dev/models/createconfigwatchlistop.py +40 -0
- finance_dev/models/createwatchlistrequest.py +43 -0
- finance_dev/models/dailymarketsummaryresponse.py +73 -0
- finance_dev/models/deleteconfigwatchlistbyidop.py +53 -0
- finance_dev/models/dividenditem.py +125 -0
- finance_dev/models/dividendsresponse.py +61 -0
- finance_dev/models/earningrelease.py +291 -0
- finance_dev/models/earningscallliveresponse.py +103 -0
- finance_dev/models/earningsqualityscoreresponse.py +140 -0
- finance_dev/models/earningssurprisesresponse.py +125 -0
- finance_dev/models/ebitdaestimatesresponse.py +176 -0
- finance_dev/models/ebitestimatesresponse.py +176 -0
- finance_dev/models/economicscalendarevent.py +160 -0
- finance_dev/models/economicsindicator.py +87 -0
- finance_dev/models/epsestimatesresponse.py +176 -0
- finance_dev/models/equitydetailsdto.py +569 -0
- finance_dev/models/errorcode.py +48 -0
- finance_dev/models/etblistresponse.py +43 -0
- finance_dev/models/etbsearchrequest.py +21 -0
- finance_dev/models/etbsearchresponse.py +43 -0
- finance_dev/models/etfcountryallocationresponse.py +113 -0
- finance_dev/models/etfholdingsresponse.py +163 -0
- finance_dev/models/etfprofileresponse.py +234 -0
- finance_dev/models/etfsectorallocationresponse.py +113 -0
- finance_dev/models/exchangecode.py +90 -0
- finance_dev/models/fdaadvisorycommitteecalendarresponse.py +88 -0
- finance_dev/models/filingsimilarityrecord.py +115 -0
- finance_dev/models/filingssimilarityindexdatawrapper.py +52 -0
- finance_dev/models/filingssimilarityindexresponse.py +42 -0
- finance_dev/models/financialratiosresponse.py +252 -0
- finance_dev/models/financialsreporteddatawrapper.py +49 -0
- finance_dev/models/financialsreportedresponse.py +42 -0
- finance_dev/models/financialsrevenuebreakdowndatawrapper.py +49 -0
- finance_dev/models/financialsrevenuebreakdownresponse.py +42 -0
- finance_dev/models/financialsstatementsdatawrapper.py +44 -0
- finance_dev/models/financialsstatementsresponse.py +42 -0
- finance_dev/models/financialstatement.py +171 -0
- finance_dev/models/financialstatementtype.py +14 -0
- finance_dev/models/getaccountbalanceop.py +53 -0
- finance_dev/models/getaccountpositionsop.py +53 -0
- finance_dev/models/getaccountsresponse.py +22 -0
- finance_dev/models/getaggregatetechnicalindicatorsop.py +94 -0
- finance_dev/models/getanalystinsightsop.py +164 -0
- finance_dev/models/getbankbranchesop.py +53 -0
- finance_dev/models/getbaseeventop.py +87 -0
- finance_dev/models/getbullbearanalysisop.py +91 -0
- finance_dev/models/getcashflowstatementsop.py +564 -0
- finance_dev/models/getchartconfigop.py +40 -0
- finance_dev/models/getcharthistoryop.py +122 -0
- finance_dev/models/getcharttimeop.py +39 -0
- finance_dev/models/getcompanyesgop.py +53 -0
- finance_dev/models/getcompanyexecutivesop.py +56 -0
- finance_dev/models/getcompanymetricsop.py +68 -0
- finance_dev/models/getcompanypeersop.py +53 -0
- finance_dev/models/getcompanypresentationop.py +56 -0
- finance_dev/models/getcompanyprofileop.py +86 -0
- finance_dev/models/getconferencecallsop.py +111 -0
- finance_dev/models/getconfigwatchlistbyidop.py +53 -0
- finance_dev/models/getconfigwatchlistsop.py +40 -0
- finance_dev/models/getcongressionaltradingop.py +73 -0
- finance_dev/models/getcovid19uscasesop.py +43 -0
- finance_dev/models/getdailymarketsummaryop.py +92 -0
- finance_dev/models/getdividendsop.py +294 -0
- finance_dev/models/getearningscalendarop.py +87 -0
- finance_dev/models/getearningscallliveop.py +91 -0
- finance_dev/models/getearningsqualityscoreop.py +81 -0
- finance_dev/models/getearningssurprisesop.py +80 -0
- finance_dev/models/getebitdaestimatesop.py +91 -0
- finance_dev/models/getebitestimatesop.py +88 -0
- finance_dev/models/geteconomicscalendarop.py +92 -0
- finance_dev/models/geteconomicscalendarresponse.py +56 -0
- finance_dev/models/getepsestimatesop.py +88 -0
- finance_dev/models/getequitydetailsop.py +56 -0
- finance_dev/models/getequitydetailsresponse.py +45 -0
- finance_dev/models/getetblistop.py +40 -0
- finance_dev/models/getetfcountryallocationop.py +80 -0
- finance_dev/models/getetfholdingsop.py +96 -0
- finance_dev/models/getetfprofileop.py +77 -0
- finance_dev/models/getetfsectorallocationop.py +80 -0
- finance_dev/models/geteventcontractsop.py +87 -0
- finance_dev/models/getfdaadvisorycommitteecalendarop.py +47 -0
- finance_dev/models/getfilingssimilarityindexop.py +102 -0
- finance_dev/models/getfinancialratiosop.py +612 -0
- finance_dev/models/getfinancialstatementsop.py +117 -0
- finance_dev/models/getfundownershipop.py +77 -0
- finance_dev/models/gethistoricaldataop.py +61 -0
- finance_dev/models/gethistoricalesgop.py +53 -0
- finance_dev/models/gethistorybatchop.py +74 -0
- finance_dev/models/gethistoryop.py +123 -0
- finance_dev/models/getincomestatementsop.py +564 -0
- finance_dev/models/getindexbarop.py +140 -0
- finance_dev/models/getindexbarsop.py +149 -0
- finance_dev/models/getindexchartbarsop.py +178 -0
- finance_dev/models/getindexrealtimevaluesop.py +94 -0
- finance_dev/models/getinflationexpectationsop.py +157 -0
- finance_dev/models/getinflationop.py +154 -0
- finance_dev/models/getinsidertransactionsop.py +90 -0
- finance_dev/models/getinstitutionalownershipop.py +99 -0
- finance_dev/models/getinstitutionalportfolioop.py +75 -0
- finance_dev/models/getinvestmentthemeop.py +68 -0
- finance_dev/models/getipocalendarop.py +63 -0
- finance_dev/models/getlobbyingop.py +70 -0
- finance_dev/models/getmarketbreadthop.py +40 -0
- finance_dev/models/getmarketholidaysop.py +65 -0
- finance_dev/models/getmarketstatusop.py +65 -0
- finance_dev/models/getmergersandacquisitionsop.py +113 -0
- finance_dev/models/getnetinflowop.py +40 -0
- finance_dev/models/getnewsbyidop.py +73 -0
- finance_dev/models/getnewsop.py +98 -0
- finance_dev/models/getnewssentimentop.py +53 -0
- finance_dev/models/getoptionchainsnapshotop.py +244 -0
- finance_dev/models/getoptioncontractsnapshotop.py +69 -0
- finance_dev/models/getoptiondetailsop.py +56 -0
- finance_dev/models/getoptiondetailsresponse.py +45 -0
- finance_dev/models/getoptionlasttradeop.py +56 -0
- finance_dev/models/getoptionopencloseop.py +66 -0
- finance_dev/models/getoptionpreviousdayop.py +56 -0
- finance_dev/models/getoptionquotesop.py +177 -0
- finance_dev/models/getoptionsactivityop.py +111 -0
- finance_dev/models/getoptionsetfstopvolumeop.py +70 -0
- finance_dev/models/getoptionsstockstopgainersop.py +70 -0
- finance_dev/models/getoptionsstockstopvolumeop.py +70 -0
- finance_dev/models/getoptionsunusualactivityop.py +100 -0
- finance_dev/models/getoptiontradesop.py +177 -0
- finance_dev/models/getordersv2response.py +66 -0
- finance_dev/models/getownershipdataop.py +77 -0
- finance_dev/models/getpositionsresponse.py +39 -0
- finance_dev/models/getpredictionorderop.py +88 -0
- finance_dev/models/getpricetargetop.py +53 -0
- finance_dev/models/getquotesop.py +53 -0
- finance_dev/models/getratingsop.py +164 -0
- finance_dev/models/getratingsresponse.py +39 -0
- finance_dev/models/getreportedfinancialsop.py +127 -0
- finance_dev/models/getrevenuebreakdownop.py +85 -0
- finance_dev/models/getrevenueestimatesop.py +91 -0
- finance_dev/models/getsecfilingsop.py +113 -0
- finance_dev/models/getsectortickersop.py +124 -0
- finance_dev/models/getsectorwisechangeop.py +84 -0
- finance_dev/models/getshortinterestop.py +334 -0
- finance_dev/models/getshortvolumeop.py +333 -0
- finance_dev/models/getsocialsentimentop.py +90 -0
- finance_dev/models/getspinoffsop.py +112 -0
- finance_dev/models/getstockaggregatesop.py +174 -0
- finance_dev/models/getstocklastquoteop.py +56 -0
- finance_dev/models/getstocklasttradeop.py +56 -0
- finance_dev/models/getstockopencloseop.py +90 -0
- finance_dev/models/getstockpreviousdayop.py +80 -0
- finance_dev/models/getstockquotesop.py +177 -0
- finance_dev/models/getstocksnapshotsop.py +82 -0
- finance_dev/models/getstocksplitsop.py +243 -0
- finance_dev/models/getstocktradesop.py +177 -0
- finance_dev/models/getsupplychainop.py +53 -0
- finance_dev/models/getsupportresistancelevelsop.py +90 -0
- finance_dev/models/getsymbolinfoop.py +53 -0
- finance_dev/models/gettechnicalindicatorop.py +172 -0
- finance_dev/models/gettechnicalpatternsop.py +88 -0
- finance_dev/models/gettenderoffersop.py +112 -0
- finance_dev/models/gettickhistoryop.py +104 -0
- finance_dev/models/gettopgainersop.py +78 -0
- finance_dev/models/gettoplosersop.py +78 -0
- finance_dev/models/gettopmostactiveop.py +78 -0
- finance_dev/models/gettranscriptop.py +53 -0
- finance_dev/models/gettreasuryyieldsop.py +157 -0
- finance_dev/models/getunifiedsnapshotop.py +223 -0
- finance_dev/models/getupgradesdowngradesop.py +91 -0
- finance_dev/models/getusaspendingop.py +70 -0
- finance_dev/models/getuseraccountsop.py +40 -0
- finance_dev/models/getusptopatentsop.py +70 -0
- finance_dev/models/getvisaapplicationsop.py +73 -0
- finance_dev/models/historicalesgresponse.py +439 -0
- finance_dev/models/httpmetadata.py +24 -0
- finance_dev/models/incomestatement.py +296 -0
- finance_dev/models/incomestatementsresponse.py +61 -0
- finance_dev/models/indexbarresponse.py +194 -0
- finance_dev/models/indexbarsresponse.py +123 -0
- finance_dev/models/indexchartbarsresponse.py +213 -0
- finance_dev/models/indexgroupsresponse.py +78 -0
- finance_dev/models/indexlistresponse.py +95 -0
- finance_dev/models/indexsearchresponse.py +93 -0
- finance_dev/models/indicesbygroupresponse.py +93 -0
- finance_dev/models/indicesidentifiertype.py +28 -0
- finance_dev/models/indicesrealtimeindexinfo.py +67 -0
- finance_dev/models/indicesrealtimeindexvalue.py +157 -0
- finance_dev/models/indicesrealtimevaluesitem.py +80 -0
- finance_dev/models/indicesrealtimevaluesresponse.py +42 -0
- finance_dev/models/inflationexpectationsresponse.py +140 -0
- finance_dev/models/inflationresponse.py +132 -0
- finance_dev/models/insidertransaction.py +97 -0
- finance_dev/models/insidertransactionsresponse.py +39 -0
- finance_dev/models/institutionalholding.py +77 -0
- finance_dev/models/institutionalownershipresponse.py +39 -0
- finance_dev/models/institutionalportfolioresponse.py +39 -0
- finance_dev/models/investmentthemeid.py +35 -0
- finance_dev/models/investmentthemeresponse.py +80 -0
- finance_dev/models/ipocalendarresponse.py +39 -0
- finance_dev/models/ipoitem.py +93 -0
- finance_dev/models/listactiveordersop.py +87 -0
- finance_dev/models/listcategoriesop.py +79 -0
- finance_dev/models/listindexgroupsop.py +40 -0
- finance_dev/models/listindicesbygroupop.py +58 -0
- finance_dev/models/listindicesop.py +91 -0
- finance_dev/models/listoptioncontractsop.py +66 -0
- finance_dev/models/listoptionexpirydatesop.py +56 -0
- finance_dev/models/listorderhistoryop.py +139 -0
- finance_dev/models/listpredictionordersop.py +134 -0
- finance_dev/models/listtranscriptsop.py +53 -0
- finance_dev/models/lobbyingresponse.py +166 -0
- finance_dev/models/logosearchresponse.py +152 -0
- finance_dev/models/logosyncresponse.py +277 -0
- finance_dev/models/marketbreadth.py +97 -0
- finance_dev/models/marketbreadthresponse.py +44 -0
- finance_dev/models/marketholiday.py +56 -0
- finance_dev/models/marketholidayresponse.py +39 -0
- finance_dev/models/marketstatus.py +67 -0
- finance_dev/models/mergersandacquisitionsresponse.py +186 -0
- finance_dev/models/metricseriespoint.py +43 -0
- finance_dev/models/netinflow.py +81 -0
- finance_dev/models/netinflowresponse.py +44 -0
- finance_dev/models/newsitem.py +102 -0
- finance_dev/models/newslistresponse.py +128 -0
- finance_dev/models/newssentimentresponse.py +176 -0
- finance_dev/models/newstypeenum.py +16 -0
- finance_dev/models/optionchainsnapshotresponse.py +64 -0
- finance_dev/models/optioncontractsnapshotresponse.py +64 -0
- finance_dev/models/optioncontractsnapshotrow.py +164 -0
- finance_dev/models/optioncontractsresponse.py +131 -0
- finance_dev/models/optiondetailsdto.py +72 -0
- finance_dev/models/optionexpirydatesresponse.py +53 -0
- finance_dev/models/optionlasttraderesponse.py +169 -0
- finance_dev/models/optionopencloseresponse.py +97 -0
- finance_dev/models/optionpreviousdayresponse.py +89 -0
- finance_dev/models/optionquotesresponse.py +138 -0
- finance_dev/models/optionsactivityresponse.py +265 -0
- finance_dev/models/optionsnapshotcontractdetails.py +85 -0
- finance_dev/models/optionsnapshotdaybar.py +107 -0
- finance_dev/models/optionsnapshotgreeks.py +67 -0
- finance_dev/models/optionsnapshotlastquote.py +116 -0
- finance_dev/models/optionsnapshotlasttrade.py +102 -0
- finance_dev/models/optionsnapshotunderlying.py +86 -0
- finance_dev/models/optionsscreeneritem.py +151 -0
- finance_dev/models/optionsunusualactivityresponse.py +62 -0
- finance_dev/models/optionsunusualactivitytrade.py +103 -0
- finance_dev/models/optiontradesresponse.py +132 -0
- finance_dev/models/orderrequesttimeinforceenum.py +29 -0
- finance_dev/models/ordersideenum.py +20 -0
- finance_dev/models/ordertypeenum.py +20 -0
- finance_dev/models/ordleg.py +162 -0
- finance_dev/models/ordresponse.py +202 -0
- finance_dev/models/ownershipdataresponse.py +39 -0
- finance_dev/models/ownershiprecord.py +74 -0
- finance_dev/models/placeorderop.py +40 -0
- finance_dev/models/placeordrequest_union.py +335 -0
- finance_dev/models/placepredictionorderop.py +114 -0
- finance_dev/models/predmdbaseevent.py +62 -0
- finance_dev/models/predmdbaseeventhit.py +53 -0
- finance_dev/models/predmdbaseeventsearchresult.py +46 -0
- finance_dev/models/predmdbaseeventwithevents.py +32 -0
- finance_dev/models/predmdbatchhistoryrequest.py +16 -0
- finance_dev/models/predmdbatchhistoryresponse.py +16 -0
- finance_dev/models/predmdcategory.py +48 -0
- finance_dev/models/predmdcontract.py +177 -0
- finance_dev/models/predmdcontracthit.py +157 -0
- finance_dev/models/predmdcontractsearchresult.py +46 -0
- finance_dev/models/predmdevent.py +136 -0
- finance_dev/models/predmdeventhit.py +73 -0
- finance_dev/models/predmdeventsearchresult.py +46 -0
- finance_dev/models/predmdeventwithcontracts.py +22 -0
- finance_dev/models/predmdhistoryrequest.py +59 -0
- finance_dev/models/predmdhistoryresponse.py +53 -0
- finance_dev/models/predmdtick.py +53 -0
- finance_dev/models/predordersapperror.py +78 -0
- finance_dev/models/predordersorder.py +267 -0
- finance_dev/models/predordersorderdetail.py +26 -0
- finance_dev/models/predordersorderpage.py +45 -0
- finance_dev/models/predordersorderreport.py +88 -0
- finance_dev/models/predordersplaceorderrequest.py +159 -0
- finance_dev/models/previeworderop.py +40 -0
- finance_dev/models/previeworderresponse.py +127 -0
- finance_dev/models/pricetargetresponse.py +89 -0
- finance_dev/models/quotedata.py +49 -0
- finance_dev/models/quotesresponse.py +62 -0
- finance_dev/models/quotevalues.py +114 -0
- finance_dev/models/rating.py +193 -0
- finance_dev/models/ratingsaccuracy.py +242 -0
- finance_dev/models/replaceconfigwatchlistsop.py +40 -0
- finance_dev/models/replaceorderop.py +40 -0
- finance_dev/models/replaceordrequest_union.py +367 -0
- finance_dev/models/replaceordresponse.py +144 -0
- finance_dev/models/reportedbsitem.py +53 -0
- finance_dev/models/reportedfiling.py +110 -0
- finance_dev/models/reportedreport.py +39 -0
- finance_dev/models/reportingfrequency.py +16 -0
- finance_dev/models/revenuebreakdownaxis.py +52 -0
- finance_dev/models/revenuebreakdowndatapoint.py +58 -0
- finance_dev/models/revenuebreakdownentry.py +51 -0
- finance_dev/models/revenuebreakdowninner.py +75 -0
- finance_dev/models/revenueestimatesresponse.py +176 -0
- finance_dev/models/screenclause.py +70 -0
- finance_dev/models/screengroup.py +75 -0
- finance_dev/models/searchetbsymbolsop.py +40 -0
- finance_dev/models/searchindicesop.py +55 -0
- finance_dev/models/searchlogosop.py +158 -0
- finance_dev/models/searchmarketsymbolsop.py +80 -0
- finance_dev/models/searchop.py +232 -0
- finance_dev/models/searchsymbolitem.py +76 -0
- finance_dev/models/searchsymbolresponseitem.py +71 -0
- finance_dev/models/searchsymbolsop.py +77 -0
- finance_dev/models/secfiling.py +91 -0
- finance_dev/models/secfilingsresponse.py +39 -0
- finance_dev/models/sectoravgchange.py +50 -0
- finance_dev/models/security.py +59 -0
- finance_dev/models/securitytypeenum.py +16 -0
- finance_dev/models/shortinterestresponse.py +126 -0
- finance_dev/models/shortvolumeresponse.py +198 -0
- finance_dev/models/socialsentimentresponse.py +124 -0
- finance_dev/models/sortorderenum.py +13 -0
- finance_dev/models/spinoffsresponse.py +136 -0
- finance_dev/models/stockaggregatesresponse.py +92 -0
- finance_dev/models/stocklastquoteresponse.py +175 -0
- finance_dev/models/stocklasttraderesponse.py +169 -0
- finance_dev/models/stockohlcbar.py +85 -0
- finance_dev/models/stockopencloseresponse.py +109 -0
- finance_dev/models/stockpreviousdayresponse.py +86 -0
- finance_dev/models/stockquotesresponse.py +170 -0
- finance_dev/models/stockscreenerop.py +144 -0
- finance_dev/models/stockscreenerrequest.py +131 -0
- finance_dev/models/stockscreenerresponse.py +197 -0
- finance_dev/models/stocksnapshotsresponse.py +454 -0
- finance_dev/models/stocksplitsresponse.py +144 -0
- finance_dev/models/stocktradesresponse.py +164 -0
- finance_dev/models/supplychainresponse.py +158 -0
- finance_dev/models/supportresistancelevelsresponse.py +68 -0
- finance_dev/models/symboldetails.py +119 -0
- finance_dev/models/symbolerror.py +43 -0
- finance_dev/models/symbolinfo.py +183 -0
- finance_dev/models/synclogosop.py +146 -0
- finance_dev/models/technicalindicatorresponse.py +43 -0
- finance_dev/models/technicalindicatortype.py +21 -0
- finance_dev/models/technicalpatternsresponse.py +249 -0
- finance_dev/models/tenderofferidentifiertype.py +26 -0
- finance_dev/models/tenderoffersresponse.py +548 -0
- finance_dev/models/tickchartbars.py +104 -0
- finance_dev/models/tickresolution.py +20 -0
- finance_dev/models/timeinforceenum.py +26 -0
- finance_dev/models/tradeorderlegv2.py +164 -0
- finance_dev/models/tradeorderv2.py +434 -0
- finance_dev/models/transcriptresponse.py +162 -0
- finance_dev/models/transcriptsresponse.py +89 -0
- finance_dev/models/treasuryyieldsresponse.py +160 -0
- finance_dev/models/unifiedsnapshotresponse.py +308 -0
- finance_dev/models/updateconfigwatchlistbyidop.py +65 -0
- finance_dev/models/updatewatchlistrequest_union.py +134 -0
- finance_dev/models/upgradesdowngradesresponse.py +98 -0
- finance_dev/models/usaspendingresponse.py +222 -0
- finance_dev/models/usptopatentsresponse.py +134 -0
- finance_dev/models/visaapplicationsresponse.py +228 -0
- finance_dev/models/watchlist.py +68 -0
- finance_dev/models/watchlistrequest.py +43 -0
- finance_dev/models/watchlistresponse.py +44 -0
- finance_dev/news_sdk.py +829 -0
- finance_dev/options.py +3443 -0
- finance_dev/orders.py +1907 -0
- finance_dev/ownership.py +1386 -0
- finance_dev/predictions.py +29 -0
- finance_dev/predictions_orders.py +852 -0
- finance_dev/py.typed +1 -0
- finance_dev/sdk.py +347 -0
- finance_dev/sdkconfiguration.py +50 -0
- finance_dev/signals.py +338 -0
- finance_dev/stocks.py +3131 -0
- finance_dev/technicalanalysis_sdk.py +1137 -0
- finance_dev/types/__init__.py +25 -0
- finance_dev/types/base64fileinput.py +44 -0
- finance_dev/types/basemodel.py +78 -0
- finance_dev/utils/__init__.py +181 -0
- finance_dev/utils/annotations.py +80 -0
- finance_dev/utils/datetimes.py +42 -0
- finance_dev/utils/dynamic_imports.py +55 -0
- finance_dev/utils/enums.py +135 -0
- finance_dev/utils/eventstreaming.py +327 -0
- finance_dev/utils/forms.py +240 -0
- finance_dev/utils/headers.py +137 -0
- finance_dev/utils/logger.py +23 -0
- finance_dev/utils/metadata.py +120 -0
- finance_dev/utils/queryparams.py +218 -0
- finance_dev/utils/requestbodies.py +68 -0
- finance_dev/utils/retries.py +373 -0
- finance_dev/utils/security.py +199 -0
- finance_dev/utils/serializers.py +327 -0
- finance_dev/utils/unmarshal_json_response.py +39 -0
- finance_dev/utils/url.py +155 -0
- finance_dev/utils/values.py +143 -0
- finance_dev/watchlist_sdk.py +1583 -0
- finance_dev/websocket/__init__.py +57 -0
- finance_dev/websocket/account.py +5 -0
- finance_dev/websocket/auth.py +124 -0
- finance_dev/websocket/chart.py +5 -0
- finance_dev/websocket/codec.py +66 -0
- finance_dev/websocket/config.py +52 -0
- finance_dev/websocket/errors.py +54 -0
- finance_dev/websocket/market.py +5 -0
- finance_dev/websocket/models/__init__.py +52 -0
- finance_dev/websocket/models/account.py +60 -0
- finance_dev/websocket/models/chart.py +44 -0
- finance_dev/websocket/models/common.py +85 -0
- finance_dev/websocket/models/market.py +113 -0
- finance_dev/websocket/resources.py +327 -0
- finance_dev/websocket/sdk.py +13 -0
- finance_dev/websocket/transport/async_connection.py +493 -0
- finance_dev/websocket/transport/base.py +78 -0
- finance_dev/websocket/transport/sync_connection.py +470 -0
- finance_dev-0.9.0.dist-info/METADATA +913 -0
- finance_dev-0.9.0.dist-info/RECORD +486 -0
- finance_dev-0.9.0.dist-info/WHEEL +5 -0
- finance_dev-0.9.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
# @generated-id: 9f7608fd8822
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
from finance_dev.types import BaseModel, UNSET_SENTINEL
|
|
6
|
+
import pydantic
|
|
7
|
+
from pydantic import model_serializer
|
|
8
|
+
from typing import List, Optional
|
|
9
|
+
from typing_extensions import Annotated, NotRequired, TypedDict
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EventTypedDict(TypedDict):
|
|
13
|
+
event: NotRequired[str]
|
|
14
|
+
r"""Title of the earnings call event."""
|
|
15
|
+
live_audio: NotRequired[str]
|
|
16
|
+
r"""URL of the live audio stream for the call."""
|
|
17
|
+
quarter: NotRequired[int]
|
|
18
|
+
r"""Fiscal quarter of the earnings call."""
|
|
19
|
+
recording: NotRequired[str]
|
|
20
|
+
r"""URL of the recorded audio of the call."""
|
|
21
|
+
symbol: NotRequired[str]
|
|
22
|
+
r"""Ticker symbol of the company."""
|
|
23
|
+
time: NotRequired[str]
|
|
24
|
+
r"""Timestamp of the earnings call as provided by the data vendor."""
|
|
25
|
+
year: NotRequired[int]
|
|
26
|
+
r"""Fiscal year of the earnings call."""
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class Event(BaseModel):
|
|
30
|
+
event: Optional[str] = None
|
|
31
|
+
r"""Title of the earnings call event."""
|
|
32
|
+
|
|
33
|
+
live_audio: Annotated[Optional[str], pydantic.Field(alias="liveAudio")] = None
|
|
34
|
+
r"""URL of the live audio stream for the call."""
|
|
35
|
+
|
|
36
|
+
quarter: Optional[int] = None
|
|
37
|
+
r"""Fiscal quarter of the earnings call."""
|
|
38
|
+
|
|
39
|
+
recording: Optional[str] = None
|
|
40
|
+
r"""URL of the recorded audio of the call."""
|
|
41
|
+
|
|
42
|
+
symbol: Optional[str] = None
|
|
43
|
+
r"""Ticker symbol of the company."""
|
|
44
|
+
|
|
45
|
+
time: Optional[str] = None
|
|
46
|
+
r"""Timestamp of the earnings call as provided by the data vendor."""
|
|
47
|
+
|
|
48
|
+
year: Optional[int] = None
|
|
49
|
+
r"""Fiscal year of the earnings call."""
|
|
50
|
+
|
|
51
|
+
@model_serializer(mode="wrap")
|
|
52
|
+
def serialize_model(self, handler):
|
|
53
|
+
optional_fields = set(
|
|
54
|
+
["event", "liveAudio", "quarter", "recording", "symbol", "time", "year"]
|
|
55
|
+
)
|
|
56
|
+
serialized = handler(self)
|
|
57
|
+
m = {}
|
|
58
|
+
|
|
59
|
+
for n, f in type(self).model_fields.items():
|
|
60
|
+
k = f.alias or n
|
|
61
|
+
val = serialized.get(k, serialized.get(n))
|
|
62
|
+
|
|
63
|
+
if val != UNSET_SENTINEL:
|
|
64
|
+
if val is not None or k not in optional_fields:
|
|
65
|
+
m[k] = val
|
|
66
|
+
|
|
67
|
+
return m
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class EarningsCallLiveResponseTypedDict(TypedDict):
|
|
71
|
+
r"""Live and recorded earnings call events for the requested range or symbol."""
|
|
72
|
+
|
|
73
|
+
event: NotRequired[List[EventTypedDict]]
|
|
74
|
+
r"""Earnings call events."""
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class EarningsCallLiveResponse(BaseModel):
|
|
78
|
+
r"""Live and recorded earnings call events for the requested range or symbol."""
|
|
79
|
+
|
|
80
|
+
event: Optional[List[Event]] = None
|
|
81
|
+
r"""Earnings call events."""
|
|
82
|
+
|
|
83
|
+
@model_serializer(mode="wrap")
|
|
84
|
+
def serialize_model(self, handler):
|
|
85
|
+
optional_fields = set(["event"])
|
|
86
|
+
serialized = handler(self)
|
|
87
|
+
m = {}
|
|
88
|
+
|
|
89
|
+
for n, f in type(self).model_fields.items():
|
|
90
|
+
k = f.alias or n
|
|
91
|
+
val = serialized.get(k, serialized.get(n))
|
|
92
|
+
|
|
93
|
+
if val != UNSET_SENTINEL:
|
|
94
|
+
if val is not None or k not in optional_fields:
|
|
95
|
+
m[k] = val
|
|
96
|
+
|
|
97
|
+
return m
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
try:
|
|
101
|
+
Event.model_rebuild()
|
|
102
|
+
except NameError:
|
|
103
|
+
pass
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
# @generated-id: b0f437ec92b2
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
from .reportingfrequency import ReportingFrequency
|
|
6
|
+
from finance_dev import models
|
|
7
|
+
from finance_dev.types import BaseModel, UNSET_SENTINEL
|
|
8
|
+
import pydantic
|
|
9
|
+
from pydantic import field_serializer, model_serializer
|
|
10
|
+
from typing import List, Optional
|
|
11
|
+
from typing_extensions import Annotated, NotRequired, TypedDict
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class EarningsQualityScoreResponseDataTypedDict(TypedDict):
|
|
15
|
+
cash_generation_capital_allocation: NotRequired[float]
|
|
16
|
+
r"""Cash generation and capital allocation component score."""
|
|
17
|
+
growth: NotRequired[float]
|
|
18
|
+
r"""Growth component score."""
|
|
19
|
+
letter_score: NotRequired[str]
|
|
20
|
+
r"""Letter grade equivalent of the total score."""
|
|
21
|
+
leverage: NotRequired[float]
|
|
22
|
+
r"""Leverage component score."""
|
|
23
|
+
period: NotRequired[str]
|
|
24
|
+
r"""Reporting period the score applies to."""
|
|
25
|
+
profitability: NotRequired[float]
|
|
26
|
+
r"""Profitability component score."""
|
|
27
|
+
score: NotRequired[float]
|
|
28
|
+
r"""Total earnings quality score."""
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class EarningsQualityScoreResponseData(BaseModel):
|
|
32
|
+
cash_generation_capital_allocation: Annotated[
|
|
33
|
+
Optional[float], pydantic.Field(alias="cashGenerationCapitalAllocation")
|
|
34
|
+
] = None
|
|
35
|
+
r"""Cash generation and capital allocation component score."""
|
|
36
|
+
|
|
37
|
+
growth: Optional[float] = None
|
|
38
|
+
r"""Growth component score."""
|
|
39
|
+
|
|
40
|
+
letter_score: Annotated[Optional[str], pydantic.Field(alias="letterScore")] = None
|
|
41
|
+
r"""Letter grade equivalent of the total score."""
|
|
42
|
+
|
|
43
|
+
leverage: Optional[float] = None
|
|
44
|
+
r"""Leverage component score."""
|
|
45
|
+
|
|
46
|
+
period: Optional[str] = None
|
|
47
|
+
r"""Reporting period the score applies to."""
|
|
48
|
+
|
|
49
|
+
profitability: Optional[float] = None
|
|
50
|
+
r"""Profitability component score."""
|
|
51
|
+
|
|
52
|
+
score: Optional[float] = None
|
|
53
|
+
r"""Total earnings quality score."""
|
|
54
|
+
|
|
55
|
+
@model_serializer(mode="wrap")
|
|
56
|
+
def serialize_model(self, handler):
|
|
57
|
+
optional_fields = set(
|
|
58
|
+
[
|
|
59
|
+
"cashGenerationCapitalAllocation",
|
|
60
|
+
"growth",
|
|
61
|
+
"letterScore",
|
|
62
|
+
"leverage",
|
|
63
|
+
"period",
|
|
64
|
+
"profitability",
|
|
65
|
+
"score",
|
|
66
|
+
]
|
|
67
|
+
)
|
|
68
|
+
serialized = handler(self)
|
|
69
|
+
m = {}
|
|
70
|
+
|
|
71
|
+
for n, f in type(self).model_fields.items():
|
|
72
|
+
k = f.alias or n
|
|
73
|
+
val = serialized.get(k, serialized.get(n))
|
|
74
|
+
|
|
75
|
+
if val != UNSET_SENTINEL:
|
|
76
|
+
if val is not None or k not in optional_fields:
|
|
77
|
+
m[k] = val
|
|
78
|
+
|
|
79
|
+
return m
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class EarningsQualityScoreResponseTypedDict(TypedDict):
|
|
83
|
+
r"""Earnings quality score history for a company, as provided by Finnhub."""
|
|
84
|
+
|
|
85
|
+
data: NotRequired[List[EarningsQualityScoreResponseDataTypedDict]]
|
|
86
|
+
r"""Earnings quality scores, one entry per reporting period."""
|
|
87
|
+
freq: NotRequired[ReportingFrequency]
|
|
88
|
+
r"""How often the underlying data is reported:
|
|
89
|
+
- `annual` — once per fiscal year (10-K, full-year statements).
|
|
90
|
+
- `quarterly` — once per fiscal quarter (10-Q, quarterly statements).
|
|
91
|
+
"""
|
|
92
|
+
symbol: NotRequired[str]
|
|
93
|
+
r"""Company ticker symbol."""
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class EarningsQualityScoreResponse(BaseModel):
|
|
97
|
+
r"""Earnings quality score history for a company, as provided by Finnhub."""
|
|
98
|
+
|
|
99
|
+
data: Optional[List[EarningsQualityScoreResponseData]] = None
|
|
100
|
+
r"""Earnings quality scores, one entry per reporting period."""
|
|
101
|
+
|
|
102
|
+
freq: Optional[ReportingFrequency] = None
|
|
103
|
+
r"""How often the underlying data is reported:
|
|
104
|
+
- `annual` — once per fiscal year (10-K, full-year statements).
|
|
105
|
+
- `quarterly` — once per fiscal quarter (10-Q, quarterly statements).
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
symbol: Optional[str] = None
|
|
109
|
+
r"""Company ticker symbol."""
|
|
110
|
+
|
|
111
|
+
@field_serializer("freq")
|
|
112
|
+
def serialize_freq(self, value):
|
|
113
|
+
if isinstance(value, str):
|
|
114
|
+
try:
|
|
115
|
+
return models.ReportingFrequency(value)
|
|
116
|
+
except ValueError:
|
|
117
|
+
return value
|
|
118
|
+
return value
|
|
119
|
+
|
|
120
|
+
@model_serializer(mode="wrap")
|
|
121
|
+
def serialize_model(self, handler):
|
|
122
|
+
optional_fields = set(["data", "freq", "symbol"])
|
|
123
|
+
serialized = handler(self)
|
|
124
|
+
m = {}
|
|
125
|
+
|
|
126
|
+
for n, f in type(self).model_fields.items():
|
|
127
|
+
k = f.alias or n
|
|
128
|
+
val = serialized.get(k, serialized.get(n))
|
|
129
|
+
|
|
130
|
+
if val != UNSET_SENTINEL:
|
|
131
|
+
if val is not None or k not in optional_fields:
|
|
132
|
+
m[k] = val
|
|
133
|
+
|
|
134
|
+
return m
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
try:
|
|
138
|
+
EarningsQualityScoreResponseData.model_rebuild()
|
|
139
|
+
except NameError:
|
|
140
|
+
pass
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
# @generated-id: 4e76845e066a
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
from finance_dev.types import BaseModel, UNSET_SENTINEL
|
|
6
|
+
import pydantic
|
|
7
|
+
from pydantic import model_serializer
|
|
8
|
+
from typing import List, Optional
|
|
9
|
+
from typing_extensions import Annotated, NotRequired, TypedDict
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EarningSurpriseTypedDict(TypedDict):
|
|
13
|
+
actual: NotRequired[float]
|
|
14
|
+
r"""Reported actual earnings per share"""
|
|
15
|
+
estimate: NotRequired[float]
|
|
16
|
+
r"""Analyst consensus earnings per share estimate"""
|
|
17
|
+
period: NotRequired[str]
|
|
18
|
+
r"""End date of the reporting period"""
|
|
19
|
+
quarter: NotRequired[int]
|
|
20
|
+
r"""Fiscal quarter number"""
|
|
21
|
+
surprise: NotRequired[float]
|
|
22
|
+
r"""Difference between actual and estimate"""
|
|
23
|
+
surprise_percent: NotRequired[float]
|
|
24
|
+
r"""Surprise as a percentage of the estimate"""
|
|
25
|
+
symbol: NotRequired[str]
|
|
26
|
+
r"""Stock ticker symbol"""
|
|
27
|
+
year: NotRequired[int]
|
|
28
|
+
r"""Fiscal year"""
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class EarningSurprise(BaseModel):
|
|
32
|
+
actual: Optional[float] = None
|
|
33
|
+
r"""Reported actual earnings per share"""
|
|
34
|
+
|
|
35
|
+
estimate: Optional[float] = None
|
|
36
|
+
r"""Analyst consensus earnings per share estimate"""
|
|
37
|
+
|
|
38
|
+
period: Optional[str] = None
|
|
39
|
+
r"""End date of the reporting period"""
|
|
40
|
+
|
|
41
|
+
quarter: Optional[int] = None
|
|
42
|
+
r"""Fiscal quarter number"""
|
|
43
|
+
|
|
44
|
+
surprise: Optional[float] = None
|
|
45
|
+
r"""Difference between actual and estimate"""
|
|
46
|
+
|
|
47
|
+
surprise_percent: Annotated[
|
|
48
|
+
Optional[float], pydantic.Field(alias="surprisePercent")
|
|
49
|
+
] = None
|
|
50
|
+
r"""Surprise as a percentage of the estimate"""
|
|
51
|
+
|
|
52
|
+
symbol: Optional[str] = None
|
|
53
|
+
r"""Stock ticker symbol"""
|
|
54
|
+
|
|
55
|
+
year: Optional[int] = None
|
|
56
|
+
r"""Fiscal year"""
|
|
57
|
+
|
|
58
|
+
@model_serializer(mode="wrap")
|
|
59
|
+
def serialize_model(self, handler):
|
|
60
|
+
optional_fields = set(
|
|
61
|
+
[
|
|
62
|
+
"actual",
|
|
63
|
+
"estimate",
|
|
64
|
+
"period",
|
|
65
|
+
"quarter",
|
|
66
|
+
"surprise",
|
|
67
|
+
"surprisePercent",
|
|
68
|
+
"symbol",
|
|
69
|
+
"year",
|
|
70
|
+
]
|
|
71
|
+
)
|
|
72
|
+
serialized = handler(self)
|
|
73
|
+
m = {}
|
|
74
|
+
|
|
75
|
+
for n, f in type(self).model_fields.items():
|
|
76
|
+
k = f.alias or n
|
|
77
|
+
val = serialized.get(k, serialized.get(n))
|
|
78
|
+
|
|
79
|
+
if val != UNSET_SENTINEL:
|
|
80
|
+
if val is not None or k not in optional_fields:
|
|
81
|
+
m[k] = val
|
|
82
|
+
|
|
83
|
+
return m
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class EarningsSurprisesResponseTypedDict(TypedDict):
|
|
87
|
+
r"""Historical quarterly earnings results versus analyst estimates for a stock, sourced from Finnhub."""
|
|
88
|
+
|
|
89
|
+
earning_surprises: NotRequired[List[EarningSurpriseTypedDict]]
|
|
90
|
+
r"""List of quarterly earnings surprise records"""
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class EarningsSurprisesResponse(BaseModel):
|
|
94
|
+
r"""Historical quarterly earnings results versus analyst estimates for a stock, sourced from Finnhub."""
|
|
95
|
+
|
|
96
|
+
earning_surprises: Annotated[
|
|
97
|
+
Optional[List[EarningSurprise]], pydantic.Field(alias="earningSurprises")
|
|
98
|
+
] = None
|
|
99
|
+
r"""List of quarterly earnings surprise records"""
|
|
100
|
+
|
|
101
|
+
@model_serializer(mode="wrap")
|
|
102
|
+
def serialize_model(self, handler):
|
|
103
|
+
optional_fields = set(["earningSurprises"])
|
|
104
|
+
serialized = handler(self)
|
|
105
|
+
m = {}
|
|
106
|
+
|
|
107
|
+
for n, f in type(self).model_fields.items():
|
|
108
|
+
k = f.alias or n
|
|
109
|
+
val = serialized.get(k, serialized.get(n))
|
|
110
|
+
|
|
111
|
+
if val != UNSET_SENTINEL:
|
|
112
|
+
if val is not None or k not in optional_fields:
|
|
113
|
+
m[k] = val
|
|
114
|
+
|
|
115
|
+
return m
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
try:
|
|
119
|
+
EarningSurprise.model_rebuild()
|
|
120
|
+
except NameError:
|
|
121
|
+
pass
|
|
122
|
+
try:
|
|
123
|
+
EarningsSurprisesResponse.model_rebuild()
|
|
124
|
+
except NameError:
|
|
125
|
+
pass
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
# @generated-id: cb94375cece9
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
from .reportingfrequency import ReportingFrequency
|
|
6
|
+
from finance_dev import models
|
|
7
|
+
from finance_dev.types import BaseModel, UNSET_SENTINEL
|
|
8
|
+
import pydantic
|
|
9
|
+
from pydantic import field_serializer, model_serializer
|
|
10
|
+
from typing import List, Optional
|
|
11
|
+
from typing_extensions import Annotated, NotRequired, TypedDict
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class EbitdaEstimatesResponseDataTypedDict(TypedDict):
|
|
15
|
+
ebitda_avg: NotRequired[int]
|
|
16
|
+
r"""Average analyst EBITDA estimate for the period"""
|
|
17
|
+
ebitda_high: NotRequired[int]
|
|
18
|
+
r"""Highest analyst EBITDA estimate for the period"""
|
|
19
|
+
ebitda_low: NotRequired[int]
|
|
20
|
+
r"""Lowest analyst EBITDA estimate for the period"""
|
|
21
|
+
number_analysts: NotRequired[int]
|
|
22
|
+
r"""Number of analysts contributing to the estimate"""
|
|
23
|
+
period: NotRequired[str]
|
|
24
|
+
r"""End date of the reporting period the estimate applies to"""
|
|
25
|
+
quarter: NotRequired[int]
|
|
26
|
+
r"""Fiscal quarter of the period; 0 for annual estimates"""
|
|
27
|
+
year: NotRequired[int]
|
|
28
|
+
r"""Fiscal year of the period"""
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class EbitdaEstimatesResponseData(BaseModel):
|
|
32
|
+
ebitda_avg: Annotated[Optional[int], pydantic.Field(alias="ebitdaAvg")] = None
|
|
33
|
+
r"""Average analyst EBITDA estimate for the period"""
|
|
34
|
+
|
|
35
|
+
ebitda_high: Annotated[Optional[int], pydantic.Field(alias="ebitdaHigh")] = None
|
|
36
|
+
r"""Highest analyst EBITDA estimate for the period"""
|
|
37
|
+
|
|
38
|
+
ebitda_low: Annotated[Optional[int], pydantic.Field(alias="ebitdaLow")] = None
|
|
39
|
+
r"""Lowest analyst EBITDA estimate for the period"""
|
|
40
|
+
|
|
41
|
+
number_analysts: Annotated[
|
|
42
|
+
Optional[int], pydantic.Field(alias="numberAnalysts")
|
|
43
|
+
] = None
|
|
44
|
+
r"""Number of analysts contributing to the estimate"""
|
|
45
|
+
|
|
46
|
+
period: Optional[str] = None
|
|
47
|
+
r"""End date of the reporting period the estimate applies to"""
|
|
48
|
+
|
|
49
|
+
quarter: Optional[int] = None
|
|
50
|
+
r"""Fiscal quarter of the period; 0 for annual estimates"""
|
|
51
|
+
|
|
52
|
+
year: Optional[int] = None
|
|
53
|
+
r"""Fiscal year of the period"""
|
|
54
|
+
|
|
55
|
+
@model_serializer(mode="wrap")
|
|
56
|
+
def serialize_model(self, handler):
|
|
57
|
+
optional_fields = set(
|
|
58
|
+
[
|
|
59
|
+
"ebitdaAvg",
|
|
60
|
+
"ebitdaHigh",
|
|
61
|
+
"ebitdaLow",
|
|
62
|
+
"numberAnalysts",
|
|
63
|
+
"period",
|
|
64
|
+
"quarter",
|
|
65
|
+
"year",
|
|
66
|
+
]
|
|
67
|
+
)
|
|
68
|
+
serialized = handler(self)
|
|
69
|
+
m = {}
|
|
70
|
+
|
|
71
|
+
for n, f in type(self).model_fields.items():
|
|
72
|
+
k = f.alias or n
|
|
73
|
+
val = serialized.get(k, serialized.get(n))
|
|
74
|
+
|
|
75
|
+
if val != UNSET_SENTINEL:
|
|
76
|
+
if val is not None or k not in optional_fields:
|
|
77
|
+
m[k] = val
|
|
78
|
+
|
|
79
|
+
return m
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class EbitdaEstimatesTypedDict(TypedDict):
|
|
83
|
+
r"""EBITDA estimates container for the symbol"""
|
|
84
|
+
|
|
85
|
+
data: NotRequired[List[EbitdaEstimatesResponseDataTypedDict]]
|
|
86
|
+
r"""List of EBITDA estimates, one per reporting period"""
|
|
87
|
+
freq: NotRequired[ReportingFrequency]
|
|
88
|
+
r"""How often the underlying data is reported:
|
|
89
|
+
- `annual` — once per fiscal year (10-K, full-year statements).
|
|
90
|
+
- `quarterly` — once per fiscal quarter (10-Q, quarterly statements).
|
|
91
|
+
"""
|
|
92
|
+
symbol: NotRequired[str]
|
|
93
|
+
r"""Stock ticker symbol"""
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class EbitdaEstimates(BaseModel):
|
|
97
|
+
r"""EBITDA estimates container for the symbol"""
|
|
98
|
+
|
|
99
|
+
data: Optional[List[EbitdaEstimatesResponseData]] = None
|
|
100
|
+
r"""List of EBITDA estimates, one per reporting period"""
|
|
101
|
+
|
|
102
|
+
freq: Optional[ReportingFrequency] = None
|
|
103
|
+
r"""How often the underlying data is reported:
|
|
104
|
+
- `annual` — once per fiscal year (10-K, full-year statements).
|
|
105
|
+
- `quarterly` — once per fiscal quarter (10-Q, quarterly statements).
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
symbol: Optional[str] = None
|
|
109
|
+
r"""Stock ticker symbol"""
|
|
110
|
+
|
|
111
|
+
@field_serializer("freq")
|
|
112
|
+
def serialize_freq(self, value):
|
|
113
|
+
if isinstance(value, str):
|
|
114
|
+
try:
|
|
115
|
+
return models.ReportingFrequency(value)
|
|
116
|
+
except ValueError:
|
|
117
|
+
return value
|
|
118
|
+
return value
|
|
119
|
+
|
|
120
|
+
@model_serializer(mode="wrap")
|
|
121
|
+
def serialize_model(self, handler):
|
|
122
|
+
optional_fields = set(["data", "freq", "symbol"])
|
|
123
|
+
serialized = handler(self)
|
|
124
|
+
m = {}
|
|
125
|
+
|
|
126
|
+
for n, f in type(self).model_fields.items():
|
|
127
|
+
k = f.alias or n
|
|
128
|
+
val = serialized.get(k, serialized.get(n))
|
|
129
|
+
|
|
130
|
+
if val != UNSET_SENTINEL:
|
|
131
|
+
if val is not None or k not in optional_fields:
|
|
132
|
+
m[k] = val
|
|
133
|
+
|
|
134
|
+
return m
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class EbitdaEstimatesResponseTypedDict(TypedDict):
|
|
138
|
+
r"""Analyst consensus EBITDA estimates for a stock by reporting period, sourced from Finnhub."""
|
|
139
|
+
|
|
140
|
+
ebitda_estimates: NotRequired[EbitdaEstimatesTypedDict]
|
|
141
|
+
r"""EBITDA estimates container for the symbol"""
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class EbitdaEstimatesResponse(BaseModel):
|
|
145
|
+
r"""Analyst consensus EBITDA estimates for a stock by reporting period, sourced from Finnhub."""
|
|
146
|
+
|
|
147
|
+
ebitda_estimates: Annotated[
|
|
148
|
+
Optional[EbitdaEstimates], pydantic.Field(alias="ebitdaEstimates")
|
|
149
|
+
] = None
|
|
150
|
+
r"""EBITDA estimates container for the symbol"""
|
|
151
|
+
|
|
152
|
+
@model_serializer(mode="wrap")
|
|
153
|
+
def serialize_model(self, handler):
|
|
154
|
+
optional_fields = set(["ebitdaEstimates"])
|
|
155
|
+
serialized = handler(self)
|
|
156
|
+
m = {}
|
|
157
|
+
|
|
158
|
+
for n, f in type(self).model_fields.items():
|
|
159
|
+
k = f.alias or n
|
|
160
|
+
val = serialized.get(k, serialized.get(n))
|
|
161
|
+
|
|
162
|
+
if val != UNSET_SENTINEL:
|
|
163
|
+
if val is not None or k not in optional_fields:
|
|
164
|
+
m[k] = val
|
|
165
|
+
|
|
166
|
+
return m
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
try:
|
|
170
|
+
EbitdaEstimatesResponseData.model_rebuild()
|
|
171
|
+
except NameError:
|
|
172
|
+
pass
|
|
173
|
+
try:
|
|
174
|
+
EbitdaEstimatesResponse.model_rebuild()
|
|
175
|
+
except NameError:
|
|
176
|
+
pass
|