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