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,170 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
# @generated-id: 9a60e9279e12
|
|
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 StockQuotesResponseResultTypedDict(TypedDict):
|
|
13
|
+
ask_exchange: NotRequired[int]
|
|
14
|
+
r"""Ask exchange ID"""
|
|
15
|
+
ask_price: NotRequired[float]
|
|
16
|
+
r"""Ask price"""
|
|
17
|
+
ask_size: NotRequired[float]
|
|
18
|
+
r"""Ask size"""
|
|
19
|
+
bid_exchange: NotRequired[int]
|
|
20
|
+
r"""Bid exchange ID"""
|
|
21
|
+
bid_price: NotRequired[float]
|
|
22
|
+
r"""Bid price"""
|
|
23
|
+
bid_size: NotRequired[float]
|
|
24
|
+
r"""Bid size"""
|
|
25
|
+
conditions: NotRequired[List[int]]
|
|
26
|
+
r"""Quote conditions"""
|
|
27
|
+
indicators: NotRequired[List[int]]
|
|
28
|
+
r"""Quote indicators"""
|
|
29
|
+
participant_timestamp: NotRequired[int]
|
|
30
|
+
r"""Participant timestamp"""
|
|
31
|
+
sequence_number: NotRequired[int]
|
|
32
|
+
r"""Sequence number"""
|
|
33
|
+
sip_timestamp: NotRequired[int]
|
|
34
|
+
r"""SIP timestamp"""
|
|
35
|
+
tape: NotRequired[int]
|
|
36
|
+
r"""Tape"""
|
|
37
|
+
trf_timestamp: NotRequired[int]
|
|
38
|
+
r"""TRF timestamp"""
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class StockQuotesResponseResult(BaseModel):
|
|
42
|
+
ask_exchange: Annotated[Optional[int], pydantic.Field(alias="askExchange")] = None
|
|
43
|
+
r"""Ask exchange ID"""
|
|
44
|
+
|
|
45
|
+
ask_price: Annotated[Optional[float], pydantic.Field(alias="askPrice")] = None
|
|
46
|
+
r"""Ask price"""
|
|
47
|
+
|
|
48
|
+
ask_size: Annotated[Optional[float], pydantic.Field(alias="askSize")] = None
|
|
49
|
+
r"""Ask size"""
|
|
50
|
+
|
|
51
|
+
bid_exchange: Annotated[Optional[int], pydantic.Field(alias="bidExchange")] = None
|
|
52
|
+
r"""Bid exchange ID"""
|
|
53
|
+
|
|
54
|
+
bid_price: Annotated[Optional[float], pydantic.Field(alias="bidPrice")] = None
|
|
55
|
+
r"""Bid price"""
|
|
56
|
+
|
|
57
|
+
bid_size: Annotated[Optional[float], pydantic.Field(alias="bidSize")] = None
|
|
58
|
+
r"""Bid size"""
|
|
59
|
+
|
|
60
|
+
conditions: Optional[List[int]] = None
|
|
61
|
+
r"""Quote conditions"""
|
|
62
|
+
|
|
63
|
+
indicators: Optional[List[int]] = None
|
|
64
|
+
r"""Quote indicators"""
|
|
65
|
+
|
|
66
|
+
participant_timestamp: Annotated[
|
|
67
|
+
Optional[int], pydantic.Field(alias="participantTimestamp")
|
|
68
|
+
] = None
|
|
69
|
+
r"""Participant timestamp"""
|
|
70
|
+
|
|
71
|
+
sequence_number: Annotated[
|
|
72
|
+
Optional[int], pydantic.Field(alias="sequenceNumber")
|
|
73
|
+
] = None
|
|
74
|
+
r"""Sequence number"""
|
|
75
|
+
|
|
76
|
+
sip_timestamp: Annotated[Optional[int], pydantic.Field(alias="sipTimestamp")] = None
|
|
77
|
+
r"""SIP timestamp"""
|
|
78
|
+
|
|
79
|
+
tape: Optional[int] = None
|
|
80
|
+
r"""Tape"""
|
|
81
|
+
|
|
82
|
+
trf_timestamp: Annotated[Optional[int], pydantic.Field(alias="trfTimestamp")] = None
|
|
83
|
+
r"""TRF timestamp"""
|
|
84
|
+
|
|
85
|
+
@model_serializer(mode="wrap")
|
|
86
|
+
def serialize_model(self, handler):
|
|
87
|
+
optional_fields = set(
|
|
88
|
+
[
|
|
89
|
+
"askExchange",
|
|
90
|
+
"askPrice",
|
|
91
|
+
"askSize",
|
|
92
|
+
"bidExchange",
|
|
93
|
+
"bidPrice",
|
|
94
|
+
"bidSize",
|
|
95
|
+
"conditions",
|
|
96
|
+
"indicators",
|
|
97
|
+
"participantTimestamp",
|
|
98
|
+
"sequenceNumber",
|
|
99
|
+
"sipTimestamp",
|
|
100
|
+
"tape",
|
|
101
|
+
"trfTimestamp",
|
|
102
|
+
]
|
|
103
|
+
)
|
|
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
|
+
class StockQuotesResponseTypedDict(TypedDict):
|
|
119
|
+
r"""Paginated list of historical NBBO quotes for a stock ticker."""
|
|
120
|
+
|
|
121
|
+
next_url: NotRequired[str]
|
|
122
|
+
r"""URL for next page of results"""
|
|
123
|
+
request_id: NotRequired[str]
|
|
124
|
+
r"""Unique request ID"""
|
|
125
|
+
results: NotRequired[List[StockQuotesResponseResultTypedDict]]
|
|
126
|
+
r"""Array of NBBO quote objects"""
|
|
127
|
+
status: NotRequired[str]
|
|
128
|
+
r"""Status string from the upstream data provider — typically `OK` for a successful response. Treat any other value as an error indicator alongside the HTTP status code."""
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class StockQuotesResponse(BaseModel):
|
|
132
|
+
r"""Paginated list of historical NBBO quotes for a stock ticker."""
|
|
133
|
+
|
|
134
|
+
next_url: Annotated[Optional[str], pydantic.Field(alias="nextUrl")] = None
|
|
135
|
+
r"""URL for next page of results"""
|
|
136
|
+
|
|
137
|
+
request_id: Annotated[Optional[str], pydantic.Field(alias="requestId")] = None
|
|
138
|
+
r"""Unique request ID"""
|
|
139
|
+
|
|
140
|
+
results: Optional[List[StockQuotesResponseResult]] = None
|
|
141
|
+
r"""Array of NBBO quote objects"""
|
|
142
|
+
|
|
143
|
+
status: Optional[str] = None
|
|
144
|
+
r"""Status string from the upstream data provider — typically `OK` for a successful response. Treat any other value as an error indicator alongside the HTTP status code."""
|
|
145
|
+
|
|
146
|
+
@model_serializer(mode="wrap")
|
|
147
|
+
def serialize_model(self, handler):
|
|
148
|
+
optional_fields = set(["nextUrl", "requestId", "results", "status"])
|
|
149
|
+
serialized = handler(self)
|
|
150
|
+
m = {}
|
|
151
|
+
|
|
152
|
+
for n, f in type(self).model_fields.items():
|
|
153
|
+
k = f.alias or n
|
|
154
|
+
val = serialized.get(k, serialized.get(n))
|
|
155
|
+
|
|
156
|
+
if val != UNSET_SENTINEL:
|
|
157
|
+
if val is not None or k not in optional_fields:
|
|
158
|
+
m[k] = val
|
|
159
|
+
|
|
160
|
+
return m
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
try:
|
|
164
|
+
StockQuotesResponseResult.model_rebuild()
|
|
165
|
+
except NameError:
|
|
166
|
+
pass
|
|
167
|
+
try:
|
|
168
|
+
StockQuotesResponse.model_rebuild()
|
|
169
|
+
except NameError:
|
|
170
|
+
pass
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
# @generated-id: c7990651d6df
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
from .httpmetadata import HTTPMetadata, HTTPMetadataTypedDict
|
|
6
|
+
from .sortorderenum import SortOrderEnum
|
|
7
|
+
from .stockscreenerrequest import StockScreenerRequest, StockScreenerRequestTypedDict
|
|
8
|
+
from .stockscreenerresponse import StockScreenerResponse, StockScreenerResponseTypedDict
|
|
9
|
+
from finance_dev import models
|
|
10
|
+
from finance_dev.types import BaseModel, UNSET_SENTINEL
|
|
11
|
+
from finance_dev.utils import FieldMetadata, QueryParamMetadata, RequestMetadata
|
|
12
|
+
import pydantic
|
|
13
|
+
from pydantic import field_serializer, model_serializer
|
|
14
|
+
from typing import List, Optional
|
|
15
|
+
from typing_extensions import Annotated, NotRequired, TypedDict
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class StockScreenerRequestRequestTypedDict(TypedDict):
|
|
19
|
+
stock_screener_request: StockScreenerRequestTypedDict
|
|
20
|
+
r"""Screener request with operator (AND, OR, or NOT), clauses (field, operator, value), and optional groups."""
|
|
21
|
+
page_size: NotRequired[int]
|
|
22
|
+
r"""Number of results to return per page. Use smaller values (10–50) for UI screens, larger (100–500) for batch exports. Defaults to the upstream provider's default."""
|
|
23
|
+
order_column: NotRequired[str]
|
|
24
|
+
r"""Which data column to sort the screened results by. Accepts any column the upstream screener exposes — not a fixed enum on our side. Common columns:
|
|
25
|
+
- `marketcap` — market capitalization.
|
|
26
|
+
- `pricetoearnings` — trailing P/E ratio.
|
|
27
|
+
- `pricetobook` — price-to-book ratio.
|
|
28
|
+
- `roe` — return on equity.
|
|
29
|
+
- `volume` — average daily volume.
|
|
30
|
+
- `open_price` / `close_price` — most recent open / close.
|
|
31
|
+
- `dilutedeps` — diluted earnings per share (TTM).
|
|
32
|
+
- `cashandequivalents` — cash + cash equivalents on the balance sheet.
|
|
33
|
+
|
|
34
|
+
Pair with `order_direction` (`asc` / `desc`).
|
|
35
|
+
"""
|
|
36
|
+
order_direction: NotRequired[SortOrderEnum]
|
|
37
|
+
r"""Direction to sort `order_column` in:
|
|
38
|
+
- `asc` — ascending (smallest first).
|
|
39
|
+
- `desc` — descending (largest first).
|
|
40
|
+
"""
|
|
41
|
+
primary_only: NotRequired[str]
|
|
42
|
+
r"""When `true`, return only the primary listing for each company (e.g. NYSE for a U.S. dual-listed stock) instead of every listing. Defaults to `false`."""
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class StockScreenerRequestRequest(BaseModel):
|
|
46
|
+
stock_screener_request: Annotated[
|
|
47
|
+
StockScreenerRequest,
|
|
48
|
+
FieldMetadata(request=RequestMetadata(media_type="application/json")),
|
|
49
|
+
]
|
|
50
|
+
r"""Screener request with operator (AND, OR, or NOT), clauses (field, operator, value), and optional groups."""
|
|
51
|
+
|
|
52
|
+
page_size: Annotated[
|
|
53
|
+
Optional[int],
|
|
54
|
+
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
|
55
|
+
] = None
|
|
56
|
+
r"""Number of results to return per page. Use smaller values (10–50) for UI screens, larger (100–500) for batch exports. Defaults to the upstream provider's default."""
|
|
57
|
+
|
|
58
|
+
order_column: Annotated[
|
|
59
|
+
Optional[str],
|
|
60
|
+
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
|
61
|
+
] = None
|
|
62
|
+
r"""Which data column to sort the screened results by. Accepts any column the upstream screener exposes — not a fixed enum on our side. Common columns:
|
|
63
|
+
- `marketcap` — market capitalization.
|
|
64
|
+
- `pricetoearnings` — trailing P/E ratio.
|
|
65
|
+
- `pricetobook` — price-to-book ratio.
|
|
66
|
+
- `roe` — return on equity.
|
|
67
|
+
- `volume` — average daily volume.
|
|
68
|
+
- `open_price` / `close_price` — most recent open / close.
|
|
69
|
+
- `dilutedeps` — diluted earnings per share (TTM).
|
|
70
|
+
- `cashandequivalents` — cash + cash equivalents on the balance sheet.
|
|
71
|
+
|
|
72
|
+
Pair with `order_direction` (`asc` / `desc`).
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
order_direction: Annotated[
|
|
76
|
+
Optional[SortOrderEnum],
|
|
77
|
+
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
|
78
|
+
] = None
|
|
79
|
+
r"""Direction to sort `order_column` in:
|
|
80
|
+
- `asc` — ascending (smallest first).
|
|
81
|
+
- `desc` — descending (largest first).
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
primary_only: Annotated[
|
|
85
|
+
Optional[str],
|
|
86
|
+
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
|
87
|
+
] = None
|
|
88
|
+
r"""When `true`, return only the primary listing for each company (e.g. NYSE for a U.S. dual-listed stock) instead of every listing. Defaults to `false`."""
|
|
89
|
+
|
|
90
|
+
@field_serializer("order_direction")
|
|
91
|
+
def serialize_order_direction(self, value):
|
|
92
|
+
if isinstance(value, str):
|
|
93
|
+
try:
|
|
94
|
+
return models.SortOrderEnum(value)
|
|
95
|
+
except ValueError:
|
|
96
|
+
return value
|
|
97
|
+
return value
|
|
98
|
+
|
|
99
|
+
@model_serializer(mode="wrap")
|
|
100
|
+
def serialize_model(self, handler):
|
|
101
|
+
optional_fields = set(
|
|
102
|
+
["page_size", "order_column", "order_direction", "primary_only"]
|
|
103
|
+
)
|
|
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
|
+
class StockScreenerResponseResponseTypedDict(TypedDict):
|
|
119
|
+
http_meta: HTTPMetadataTypedDict
|
|
120
|
+
stock_screener_response: NotRequired[List[StockScreenerResponseTypedDict]]
|
|
121
|
+
r"""Array of screened securities; each item has security (id, ticker, name, etc.) and data (array of tag, number_value, text_value)"""
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class StockScreenerResponseResponse(BaseModel):
|
|
125
|
+
http_meta: Annotated[Optional[HTTPMetadata], pydantic.Field(exclude=True)] = None
|
|
126
|
+
|
|
127
|
+
stock_screener_response: Optional[List[StockScreenerResponse]] = None
|
|
128
|
+
r"""Array of screened securities; each item has security (id, ticker, name, etc.) and data (array of tag, number_value, text_value)"""
|
|
129
|
+
|
|
130
|
+
@model_serializer(mode="wrap")
|
|
131
|
+
def serialize_model(self, handler):
|
|
132
|
+
optional_fields = set(["StockScreenerResponse"])
|
|
133
|
+
serialized = handler(self)
|
|
134
|
+
m = {}
|
|
135
|
+
|
|
136
|
+
for n, f in type(self).model_fields.items():
|
|
137
|
+
k = f.alias or n
|
|
138
|
+
val = serialized.get(k, serialized.get(n))
|
|
139
|
+
|
|
140
|
+
if val != UNSET_SENTINEL:
|
|
141
|
+
if val is not None or k not in optional_fields:
|
|
142
|
+
m[k] = val
|
|
143
|
+
|
|
144
|
+
return m
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
# @generated-id: 15ca9ede6f77
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
from .screenclause import ScreenClause, ScreenClauseTypedDict
|
|
6
|
+
from .screengroup import ScreenGroup, ScreenGroupTypedDict
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from finance_dev import models, utils
|
|
9
|
+
from finance_dev.types import BaseModel, UNSET_SENTINEL
|
|
10
|
+
from pydantic import field_serializer, model_serializer
|
|
11
|
+
from typing import List, Optional, Union
|
|
12
|
+
from typing_extensions import NotRequired, TypeAliasType, TypedDict
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class StockScreenerRequestOperator2(str, Enum, metaclass=utils.OpenEnumMeta):
|
|
16
|
+
r"""Logical operator for combining clauses: AND, OR, or NOT"""
|
|
17
|
+
|
|
18
|
+
AND = "AND"
|
|
19
|
+
OR = "OR"
|
|
20
|
+
NOT = "NOT"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class StockScreenerRequest2TypedDict(TypedDict):
|
|
24
|
+
groups: List[ScreenGroupTypedDict]
|
|
25
|
+
r"""Optional nested groups of clauses for complex logic"""
|
|
26
|
+
operator: StockScreenerRequestOperator2
|
|
27
|
+
r"""Logical operator for combining clauses: AND, OR, or NOT"""
|
|
28
|
+
clauses: NotRequired[List[ScreenClauseTypedDict]]
|
|
29
|
+
r"""List of filter conditions (field, operator, value). Required unless groups is non-empty."""
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class StockScreenerRequest2(BaseModel):
|
|
33
|
+
groups: List[ScreenGroup]
|
|
34
|
+
r"""Optional nested groups of clauses for complex logic"""
|
|
35
|
+
|
|
36
|
+
operator: StockScreenerRequestOperator2
|
|
37
|
+
r"""Logical operator for combining clauses: AND, OR, or NOT"""
|
|
38
|
+
|
|
39
|
+
clauses: Optional[List[ScreenClause]] = None
|
|
40
|
+
r"""List of filter conditions (field, operator, value). Required unless groups is non-empty."""
|
|
41
|
+
|
|
42
|
+
@field_serializer("operator")
|
|
43
|
+
def serialize_operator(self, value):
|
|
44
|
+
if isinstance(value, str):
|
|
45
|
+
try:
|
|
46
|
+
return models.StockScreenerRequestOperator2(value)
|
|
47
|
+
except ValueError:
|
|
48
|
+
return value
|
|
49
|
+
return value
|
|
50
|
+
|
|
51
|
+
@model_serializer(mode="wrap")
|
|
52
|
+
def serialize_model(self, handler):
|
|
53
|
+
optional_fields = set(["clauses"])
|
|
54
|
+
serialized = handler(self)
|
|
55
|
+
m = {}
|
|
56
|
+
|
|
57
|
+
for n, f in type(self).model_fields.items():
|
|
58
|
+
k = f.alias or n
|
|
59
|
+
val = serialized.get(k, serialized.get(n))
|
|
60
|
+
|
|
61
|
+
if val != UNSET_SENTINEL:
|
|
62
|
+
if val is not None or k not in optional_fields:
|
|
63
|
+
m[k] = val
|
|
64
|
+
|
|
65
|
+
return m
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class StockScreenerRequestOperator1(str, Enum, metaclass=utils.OpenEnumMeta):
|
|
69
|
+
r"""Logical operator for combining clauses: AND, OR, or NOT"""
|
|
70
|
+
|
|
71
|
+
AND = "AND"
|
|
72
|
+
OR = "OR"
|
|
73
|
+
NOT = "NOT"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class StockScreenerRequest1TypedDict(TypedDict):
|
|
77
|
+
clauses: List[ScreenClauseTypedDict]
|
|
78
|
+
r"""List of filter conditions (field, operator, value). Required unless groups is non-empty."""
|
|
79
|
+
operator: StockScreenerRequestOperator1
|
|
80
|
+
r"""Logical operator for combining clauses: AND, OR, or NOT"""
|
|
81
|
+
groups: NotRequired[List[ScreenGroupTypedDict]]
|
|
82
|
+
r"""Optional nested groups of clauses for complex logic"""
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class StockScreenerRequest1(BaseModel):
|
|
86
|
+
clauses: List[ScreenClause]
|
|
87
|
+
r"""List of filter conditions (field, operator, value). Required unless groups is non-empty."""
|
|
88
|
+
|
|
89
|
+
operator: StockScreenerRequestOperator1
|
|
90
|
+
r"""Logical operator for combining clauses: AND, OR, or NOT"""
|
|
91
|
+
|
|
92
|
+
groups: Optional[List[ScreenGroup]] = None
|
|
93
|
+
r"""Optional nested groups of clauses for complex logic"""
|
|
94
|
+
|
|
95
|
+
@field_serializer("operator")
|
|
96
|
+
def serialize_operator(self, value):
|
|
97
|
+
if isinstance(value, str):
|
|
98
|
+
try:
|
|
99
|
+
return models.StockScreenerRequestOperator1(value)
|
|
100
|
+
except ValueError:
|
|
101
|
+
return value
|
|
102
|
+
return value
|
|
103
|
+
|
|
104
|
+
@model_serializer(mode="wrap")
|
|
105
|
+
def serialize_model(self, handler):
|
|
106
|
+
optional_fields = set(["groups"])
|
|
107
|
+
serialized = handler(self)
|
|
108
|
+
m = {}
|
|
109
|
+
|
|
110
|
+
for n, f in type(self).model_fields.items():
|
|
111
|
+
k = f.alias or n
|
|
112
|
+
val = serialized.get(k, serialized.get(n))
|
|
113
|
+
|
|
114
|
+
if val != UNSET_SENTINEL:
|
|
115
|
+
if val is not None or k not in optional_fields:
|
|
116
|
+
m[k] = val
|
|
117
|
+
|
|
118
|
+
return m
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
StockScreenerRequestTypedDict = TypeAliasType(
|
|
122
|
+
"StockScreenerRequestTypedDict",
|
|
123
|
+
Union[StockScreenerRequest1TypedDict, StockScreenerRequest2TypedDict],
|
|
124
|
+
)
|
|
125
|
+
r"""Request body for POST /v1/stock/screener. At least one of clauses or groups must be non-empty."""
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
StockScreenerRequest = TypeAliasType(
|
|
129
|
+
"StockScreenerRequest", Union[StockScreenerRequest1, StockScreenerRequest2]
|
|
130
|
+
)
|
|
131
|
+
r"""Request body for POST /v1/stock/screener. At least one of clauses or groups must be non-empty."""
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
# @generated-id: bfc1ee05ecf0
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
from finance_dev.types import (
|
|
6
|
+
BaseModel,
|
|
7
|
+
Nullable,
|
|
8
|
+
OptionalNullable,
|
|
9
|
+
UNSET,
|
|
10
|
+
UNSET_SENTINEL,
|
|
11
|
+
)
|
|
12
|
+
from pydantic import model_serializer
|
|
13
|
+
from typing import List, Optional
|
|
14
|
+
from typing_extensions import NotRequired, TypedDict
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class StockScreenerResponseDataTypedDict(TypedDict):
|
|
18
|
+
number_value: NotRequired[Nullable[float]]
|
|
19
|
+
tag: NotRequired[str]
|
|
20
|
+
r"""Data tag name (e.g. pricetoearnings, marketcap)"""
|
|
21
|
+
text_value: NotRequired[Nullable[str]]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class StockScreenerResponseData(BaseModel):
|
|
25
|
+
number_value: OptionalNullable[float] = UNSET
|
|
26
|
+
|
|
27
|
+
tag: Optional[str] = None
|
|
28
|
+
r"""Data tag name (e.g. pricetoearnings, marketcap)"""
|
|
29
|
+
|
|
30
|
+
text_value: OptionalNullable[str] = UNSET
|
|
31
|
+
|
|
32
|
+
@model_serializer(mode="wrap")
|
|
33
|
+
def serialize_model(self, handler):
|
|
34
|
+
optional_fields = set(["number_value", "tag", "text_value"])
|
|
35
|
+
nullable_fields = set(["number_value", "text_value"])
|
|
36
|
+
serialized = handler(self)
|
|
37
|
+
m = {}
|
|
38
|
+
|
|
39
|
+
for n, f in type(self).model_fields.items():
|
|
40
|
+
k = f.alias or n
|
|
41
|
+
val = serialized.get(k, serialized.get(n))
|
|
42
|
+
is_nullable_and_explicitly_set = (
|
|
43
|
+
k in nullable_fields
|
|
44
|
+
and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
if val != UNSET_SENTINEL:
|
|
48
|
+
if (
|
|
49
|
+
val is not None
|
|
50
|
+
or k not in optional_fields
|
|
51
|
+
or is_nullable_and_explicitly_set
|
|
52
|
+
):
|
|
53
|
+
m[k] = val
|
|
54
|
+
|
|
55
|
+
return m
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class StockScreenerResponseSecurityTypedDict(TypedDict):
|
|
59
|
+
r"""Security identity and metadata"""
|
|
60
|
+
|
|
61
|
+
code: NotRequired[Nullable[str]]
|
|
62
|
+
company_id: NotRequired[Nullable[str]]
|
|
63
|
+
composite_figi: NotRequired[Nullable[str]]
|
|
64
|
+
composite_ticker: NotRequired[Nullable[str]]
|
|
65
|
+
currency: NotRequired[Nullable[str]]
|
|
66
|
+
exchange: NotRequired[Nullable[str]]
|
|
67
|
+
exchange_mic: NotRequired[Nullable[str]]
|
|
68
|
+
figi: NotRequired[Nullable[str]]
|
|
69
|
+
id: NotRequired[str]
|
|
70
|
+
r"""Security ID"""
|
|
71
|
+
name: NotRequired[Nullable[str]]
|
|
72
|
+
primary_listing: NotRequired[Nullable[bool]]
|
|
73
|
+
share_class_figi: NotRequired[Nullable[str]]
|
|
74
|
+
stock_exchange_id: NotRequired[Nullable[str]]
|
|
75
|
+
ticker: NotRequired[Nullable[str]]
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class StockScreenerResponseSecurity(BaseModel):
|
|
79
|
+
r"""Security identity and metadata"""
|
|
80
|
+
|
|
81
|
+
code: OptionalNullable[str] = UNSET
|
|
82
|
+
|
|
83
|
+
company_id: OptionalNullable[str] = UNSET
|
|
84
|
+
|
|
85
|
+
composite_figi: OptionalNullable[str] = UNSET
|
|
86
|
+
|
|
87
|
+
composite_ticker: OptionalNullable[str] = UNSET
|
|
88
|
+
|
|
89
|
+
currency: OptionalNullable[str] = UNSET
|
|
90
|
+
|
|
91
|
+
exchange: OptionalNullable[str] = UNSET
|
|
92
|
+
|
|
93
|
+
exchange_mic: OptionalNullable[str] = UNSET
|
|
94
|
+
|
|
95
|
+
figi: OptionalNullable[str] = UNSET
|
|
96
|
+
|
|
97
|
+
id: Optional[str] = None
|
|
98
|
+
r"""Security ID"""
|
|
99
|
+
|
|
100
|
+
name: OptionalNullable[str] = UNSET
|
|
101
|
+
|
|
102
|
+
primary_listing: OptionalNullable[bool] = UNSET
|
|
103
|
+
|
|
104
|
+
share_class_figi: OptionalNullable[str] = UNSET
|
|
105
|
+
|
|
106
|
+
stock_exchange_id: OptionalNullable[str] = UNSET
|
|
107
|
+
|
|
108
|
+
ticker: OptionalNullable[str] = UNSET
|
|
109
|
+
|
|
110
|
+
@model_serializer(mode="wrap")
|
|
111
|
+
def serialize_model(self, handler):
|
|
112
|
+
optional_fields = set(
|
|
113
|
+
[
|
|
114
|
+
"code",
|
|
115
|
+
"company_id",
|
|
116
|
+
"composite_figi",
|
|
117
|
+
"composite_ticker",
|
|
118
|
+
"currency",
|
|
119
|
+
"exchange",
|
|
120
|
+
"exchange_mic",
|
|
121
|
+
"figi",
|
|
122
|
+
"id",
|
|
123
|
+
"name",
|
|
124
|
+
"primary_listing",
|
|
125
|
+
"share_class_figi",
|
|
126
|
+
"stock_exchange_id",
|
|
127
|
+
"ticker",
|
|
128
|
+
]
|
|
129
|
+
)
|
|
130
|
+
nullable_fields = set(
|
|
131
|
+
[
|
|
132
|
+
"code",
|
|
133
|
+
"company_id",
|
|
134
|
+
"composite_figi",
|
|
135
|
+
"composite_ticker",
|
|
136
|
+
"currency",
|
|
137
|
+
"exchange",
|
|
138
|
+
"exchange_mic",
|
|
139
|
+
"figi",
|
|
140
|
+
"name",
|
|
141
|
+
"primary_listing",
|
|
142
|
+
"share_class_figi",
|
|
143
|
+
"stock_exchange_id",
|
|
144
|
+
"ticker",
|
|
145
|
+
]
|
|
146
|
+
)
|
|
147
|
+
serialized = handler(self)
|
|
148
|
+
m = {}
|
|
149
|
+
|
|
150
|
+
for n, f in type(self).model_fields.items():
|
|
151
|
+
k = f.alias or n
|
|
152
|
+
val = serialized.get(k, serialized.get(n))
|
|
153
|
+
is_nullable_and_explicitly_set = (
|
|
154
|
+
k in nullable_fields
|
|
155
|
+
and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
if val != UNSET_SENTINEL:
|
|
159
|
+
if (
|
|
160
|
+
val is not None
|
|
161
|
+
or k not in optional_fields
|
|
162
|
+
or is_nullable_and_explicitly_set
|
|
163
|
+
):
|
|
164
|
+
m[k] = val
|
|
165
|
+
|
|
166
|
+
return m
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
class StockScreenerResponseTypedDict(TypedDict):
|
|
170
|
+
data: NotRequired[List[StockScreenerResponseDataTypedDict]]
|
|
171
|
+
r"""Screened data-tag values (e.g. pricetoearnings, marketcap)"""
|
|
172
|
+
security: NotRequired[StockScreenerResponseSecurityTypedDict]
|
|
173
|
+
r"""Security identity and metadata"""
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class StockScreenerResponse(BaseModel):
|
|
177
|
+
data: Optional[List[StockScreenerResponseData]] = None
|
|
178
|
+
r"""Screened data-tag values (e.g. pricetoearnings, marketcap)"""
|
|
179
|
+
|
|
180
|
+
security: Optional[StockScreenerResponseSecurity] = None
|
|
181
|
+
r"""Security identity and metadata"""
|
|
182
|
+
|
|
183
|
+
@model_serializer(mode="wrap")
|
|
184
|
+
def serialize_model(self, handler):
|
|
185
|
+
optional_fields = set(["data", "security"])
|
|
186
|
+
serialized = handler(self)
|
|
187
|
+
m = {}
|
|
188
|
+
|
|
189
|
+
for n, f in type(self).model_fields.items():
|
|
190
|
+
k = f.alias or n
|
|
191
|
+
val = serialized.get(k, serialized.get(n))
|
|
192
|
+
|
|
193
|
+
if val != UNSET_SENTINEL:
|
|
194
|
+
if val is not None or k not in optional_fields:
|
|
195
|
+
m[k] = val
|
|
196
|
+
|
|
197
|
+
return m
|