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,1795 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
# @generated-id: a292b510ebce
|
|
3
|
+
|
|
4
|
+
from .basesdk import BaseSDK
|
|
5
|
+
from datetime import date
|
|
6
|
+
from finance_dev import errors, models, utils
|
|
7
|
+
from finance_dev._hooks import HookContext
|
|
8
|
+
from finance_dev.types import OptionalNullable, UNSET
|
|
9
|
+
from finance_dev.utils.unmarshal_json_response import unmarshal_json_response
|
|
10
|
+
from jsonpath import JSONPath
|
|
11
|
+
from typing import Any, Dict, List, Mapping, Optional, Union
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class CorporateActions(BaseSDK):
|
|
15
|
+
def get_dividends(
|
|
16
|
+
self,
|
|
17
|
+
*,
|
|
18
|
+
ticker: Optional[str] = None,
|
|
19
|
+
tickers_any_of: Optional[str] = None,
|
|
20
|
+
ticker_from: Optional[str] = None,
|
|
21
|
+
ticker_after: Optional[str] = None,
|
|
22
|
+
ticker_to: Optional[str] = None,
|
|
23
|
+
ticker_before: Optional[str] = None,
|
|
24
|
+
ex_dividend_date: Optional[date] = None,
|
|
25
|
+
ex_dividend_date_from: Optional[date] = None,
|
|
26
|
+
ex_dividend_date_after: Optional[date] = None,
|
|
27
|
+
ex_dividend_date_to: Optional[date] = None,
|
|
28
|
+
ex_dividend_date_before: Optional[date] = None,
|
|
29
|
+
frequency: Optional[int] = None,
|
|
30
|
+
frequency_min: Optional[int] = None,
|
|
31
|
+
frequency_above: Optional[int] = None,
|
|
32
|
+
frequency_max: Optional[int] = None,
|
|
33
|
+
frequency_below: Optional[int] = None,
|
|
34
|
+
distribution_type: Optional[models.DistributionType] = None,
|
|
35
|
+
distribution_types: Optional[str] = None,
|
|
36
|
+
limit: Optional[int] = None,
|
|
37
|
+
sort: Optional[str] = None,
|
|
38
|
+
next: Optional[str] = None,
|
|
39
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
40
|
+
server_url: Optional[str] = None,
|
|
41
|
+
url_override: Optional[str] = None,
|
|
42
|
+
timeout_ms: Optional[int] = None,
|
|
43
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
44
|
+
) -> Optional[models.GetDividendsResponse]:
|
|
45
|
+
r"""Get Dividend History
|
|
46
|
+
|
|
47
|
+
Retrieve historical dividend payments including declaration dates, ex-dividend dates, payment dates, and dividend amounts per share. `ticker` accepts a single symbol only. Use `tickersAnyOf` for multiple symbols. If `ticker` contains multiple comma-separated values, the API returns 400: \"Multiple tickers are not supported. Please provide a single ticker.\" If both `ticker` and `tickersAnyOf` are set, the API returns 400: \"Cannot specify both ticker and tickersAnyOf. Use ticker for a single symbol or tickersAnyOf for multiple.\"
|
|
48
|
+
|
|
49
|
+
If set, this operation will use `client_id` from the global security.
|
|
50
|
+
|
|
51
|
+
:param ticker: Single ticker symbol only, such as AAPL. Do not send a comma-separated list here; if you need multiple symbols, use `tickersAnyOf` instead.
|
|
52
|
+
:param tickers_any_of: Comma-separated list of ticker symbols.
|
|
53
|
+
:param ticker_from: Filter tickers >= this value (inclusive)
|
|
54
|
+
:param ticker_after: Filter tickers > this value (exclusive)
|
|
55
|
+
:param ticker_to: Filter tickers <= this value (inclusive)
|
|
56
|
+
:param ticker_before: Filter tickers < this value (exclusive)
|
|
57
|
+
:param ex_dividend_date: Exact ex-dividend date in YYYY-MM-DD format
|
|
58
|
+
:param ex_dividend_date_from: Ex-dividend start-date filter. Returns dividends with ex-dividend dates on or after this date.
|
|
59
|
+
:param ex_dividend_date_after: Ex-dividend after-date filter. Returns dividends after this date, excluding the date itself.
|
|
60
|
+
:param ex_dividend_date_to: Ex-dividend end-date filter. Returns dividends with ex-dividend dates on or before this date.
|
|
61
|
+
:param ex_dividend_date_before: Ex-dividend before-date filter. Returns dividends before this date, excluding the date itself.
|
|
62
|
+
:param frequency: Exact frequency (0=irregular, 1=annual, 4=quarterly, 12=monthly)
|
|
63
|
+
:param frequency_min: Dividend frequency lower-bound filter. Returns records with frequency greater than or equal to this value.
|
|
64
|
+
:param frequency_above: Dividend frequency lower-bound filter. Returns records above this value, excluding the value itself.
|
|
65
|
+
:param frequency_max: Dividend frequency upper-bound filter. Returns records with frequency less than or equal to this value.
|
|
66
|
+
:param frequency_below: Dividend frequency upper-bound filter. Returns records below this value, excluding the value itself.
|
|
67
|
+
:param distribution_type: Exact type: recurring, special, supplemental, irregular, unknown
|
|
68
|
+
:param distribution_types: Comma-separated list of distribution types
|
|
69
|
+
:param limit: Maximum number of results to return. Use smaller values for UI pages and larger values for exports within API limits. (1-5000)
|
|
70
|
+
:param sort: A comma-separated list of sort columns. For each column, append `.asc` or `.desc` to specify direction. Defaults to `ticker.asc` when not specified. Examples: `ticker.asc`, `ex_dividend_date.desc`, or `ticker.asc,ex_dividend_date.desc`.
|
|
71
|
+
:param next: Pagination cursor from the previous response. Omit it on the first request, then send the returned cursor to fetch the next page.
|
|
72
|
+
:param retries: Override the default retry configuration for this method
|
|
73
|
+
:param server_url: Override the default server URL for this method
|
|
74
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
75
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
76
|
+
"""
|
|
77
|
+
base_url = None
|
|
78
|
+
url_variables = None
|
|
79
|
+
if timeout_ms is None:
|
|
80
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
81
|
+
|
|
82
|
+
if timeout_ms is None:
|
|
83
|
+
timeout_ms = 30000
|
|
84
|
+
|
|
85
|
+
if server_url is not None:
|
|
86
|
+
base_url = server_url
|
|
87
|
+
else:
|
|
88
|
+
base_url = self._get_url(base_url, url_variables)
|
|
89
|
+
|
|
90
|
+
request = models.GetDividendsRequest(
|
|
91
|
+
ticker=ticker,
|
|
92
|
+
tickers_any_of=tickers_any_of,
|
|
93
|
+
ticker_from=ticker_from,
|
|
94
|
+
ticker_after=ticker_after,
|
|
95
|
+
ticker_to=ticker_to,
|
|
96
|
+
ticker_before=ticker_before,
|
|
97
|
+
ex_dividend_date=ex_dividend_date,
|
|
98
|
+
ex_dividend_date_from=ex_dividend_date_from,
|
|
99
|
+
ex_dividend_date_after=ex_dividend_date_after,
|
|
100
|
+
ex_dividend_date_to=ex_dividend_date_to,
|
|
101
|
+
ex_dividend_date_before=ex_dividend_date_before,
|
|
102
|
+
frequency=frequency,
|
|
103
|
+
frequency_min=frequency_min,
|
|
104
|
+
frequency_above=frequency_above,
|
|
105
|
+
frequency_max=frequency_max,
|
|
106
|
+
frequency_below=frequency_below,
|
|
107
|
+
distribution_type=distribution_type,
|
|
108
|
+
distribution_types=distribution_types,
|
|
109
|
+
limit=limit,
|
|
110
|
+
sort=sort,
|
|
111
|
+
next=next,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
req = self._build_request(
|
|
115
|
+
method="GET",
|
|
116
|
+
path="/v1/corporate-actions/dividends",
|
|
117
|
+
base_url=base_url,
|
|
118
|
+
url_variables=url_variables,
|
|
119
|
+
url_override=url_override,
|
|
120
|
+
request=request,
|
|
121
|
+
request_body_required=False,
|
|
122
|
+
request_has_path_params=False,
|
|
123
|
+
request_has_query_params=True,
|
|
124
|
+
user_agent_header="user-agent",
|
|
125
|
+
accept_header_value="application/json",
|
|
126
|
+
http_headers=http_headers,
|
|
127
|
+
security=self.sdk_configuration.security,
|
|
128
|
+
allow_empty_value=None,
|
|
129
|
+
allowed_fields=["client_id"],
|
|
130
|
+
timeout_ms=timeout_ms,
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
if retries == UNSET:
|
|
134
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
135
|
+
retries = self.sdk_configuration.retry_config
|
|
136
|
+
else:
|
|
137
|
+
retries = utils.RetryConfig(
|
|
138
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
retry_config = None
|
|
142
|
+
if isinstance(retries, utils.RetryConfig):
|
|
143
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
144
|
+
|
|
145
|
+
http_res = self.do_request(
|
|
146
|
+
hook_ctx=HookContext(
|
|
147
|
+
config=self.sdk_configuration,
|
|
148
|
+
base_url=base_url or "",
|
|
149
|
+
operation_id="getDividends",
|
|
150
|
+
oauth2_scopes=["market:supplemental"],
|
|
151
|
+
security_source=self.sdk_configuration.security,
|
|
152
|
+
tags=["Corporate Actions"],
|
|
153
|
+
extensions=None,
|
|
154
|
+
),
|
|
155
|
+
request=req,
|
|
156
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
157
|
+
retry_config=retry_config,
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
def next_func() -> Optional[models.GetDividendsResponse]:
|
|
161
|
+
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
|
|
162
|
+
next_url_match = JSONPath("$.nextUrl").parse(body)
|
|
163
|
+
if len(next_url_match) == 0:
|
|
164
|
+
return None
|
|
165
|
+
|
|
166
|
+
next_url = next_url_match[0]
|
|
167
|
+
if not next_url:
|
|
168
|
+
return None
|
|
169
|
+
|
|
170
|
+
if next_url[0] == "/":
|
|
171
|
+
url = self._get_url(base_url, url_variables)
|
|
172
|
+
next_url = url + next_url
|
|
173
|
+
|
|
174
|
+
return self.get_dividends(
|
|
175
|
+
ticker=ticker,
|
|
176
|
+
tickers_any_of=tickers_any_of,
|
|
177
|
+
ticker_from=ticker_from,
|
|
178
|
+
ticker_after=ticker_after,
|
|
179
|
+
ticker_to=ticker_to,
|
|
180
|
+
ticker_before=ticker_before,
|
|
181
|
+
ex_dividend_date=ex_dividend_date,
|
|
182
|
+
ex_dividend_date_from=ex_dividend_date_from,
|
|
183
|
+
ex_dividend_date_after=ex_dividend_date_after,
|
|
184
|
+
ex_dividend_date_to=ex_dividend_date_to,
|
|
185
|
+
ex_dividend_date_before=ex_dividend_date_before,
|
|
186
|
+
frequency=frequency,
|
|
187
|
+
frequency_min=frequency_min,
|
|
188
|
+
frequency_above=frequency_above,
|
|
189
|
+
frequency_max=frequency_max,
|
|
190
|
+
frequency_below=frequency_below,
|
|
191
|
+
distribution_type=distribution_type,
|
|
192
|
+
distribution_types=distribution_types,
|
|
193
|
+
limit=limit,
|
|
194
|
+
sort=sort,
|
|
195
|
+
next=next,
|
|
196
|
+
retries=retries,
|
|
197
|
+
server_url=server_url,
|
|
198
|
+
timeout_ms=timeout_ms,
|
|
199
|
+
http_headers=http_headers,
|
|
200
|
+
url_override=next_url,
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
response_data: Any = None
|
|
204
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
205
|
+
return models.GetDividendsResponse(
|
|
206
|
+
dividends_response=unmarshal_json_response(
|
|
207
|
+
Optional[models.DividendsResponse], http_res
|
|
208
|
+
),
|
|
209
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
210
|
+
next=next_func,
|
|
211
|
+
)
|
|
212
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
213
|
+
response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
|
|
214
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
215
|
+
request=req, response=http_res
|
|
216
|
+
)
|
|
217
|
+
raise errors.BadRequest(response_data, http_res)
|
|
218
|
+
if utils.match_response(http_res, "401", "application/json"):
|
|
219
|
+
response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
|
|
220
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
221
|
+
request=req, response=http_res
|
|
222
|
+
)
|
|
223
|
+
raise errors.Unauthorized(response_data, http_res)
|
|
224
|
+
if utils.match_response(http_res, "403", "application/json"):
|
|
225
|
+
response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
|
|
226
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
227
|
+
request=req, response=http_res
|
|
228
|
+
)
|
|
229
|
+
raise errors.Forbidden(response_data, http_res)
|
|
230
|
+
if utils.match_response(http_res, "404", "application/json"):
|
|
231
|
+
response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
|
|
232
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
233
|
+
request=req, response=http_res
|
|
234
|
+
)
|
|
235
|
+
raise errors.NotFound(response_data, http_res)
|
|
236
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
237
|
+
response_data = unmarshal_json_response(
|
|
238
|
+
errors.InternalServerErrorUnion, http_res
|
|
239
|
+
)
|
|
240
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
241
|
+
request=req, response=http_res
|
|
242
|
+
)
|
|
243
|
+
raise errors.InternalServerError(response_data, http_res)
|
|
244
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
245
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
246
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
247
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
248
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
249
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
250
|
+
|
|
251
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
252
|
+
|
|
253
|
+
async def get_dividends_async(
|
|
254
|
+
self,
|
|
255
|
+
*,
|
|
256
|
+
ticker: Optional[str] = None,
|
|
257
|
+
tickers_any_of: Optional[str] = None,
|
|
258
|
+
ticker_from: Optional[str] = None,
|
|
259
|
+
ticker_after: Optional[str] = None,
|
|
260
|
+
ticker_to: Optional[str] = None,
|
|
261
|
+
ticker_before: Optional[str] = None,
|
|
262
|
+
ex_dividend_date: Optional[date] = None,
|
|
263
|
+
ex_dividend_date_from: Optional[date] = None,
|
|
264
|
+
ex_dividend_date_after: Optional[date] = None,
|
|
265
|
+
ex_dividend_date_to: Optional[date] = None,
|
|
266
|
+
ex_dividend_date_before: Optional[date] = None,
|
|
267
|
+
frequency: Optional[int] = None,
|
|
268
|
+
frequency_min: Optional[int] = None,
|
|
269
|
+
frequency_above: Optional[int] = None,
|
|
270
|
+
frequency_max: Optional[int] = None,
|
|
271
|
+
frequency_below: Optional[int] = None,
|
|
272
|
+
distribution_type: Optional[models.DistributionType] = None,
|
|
273
|
+
distribution_types: Optional[str] = None,
|
|
274
|
+
limit: Optional[int] = None,
|
|
275
|
+
sort: Optional[str] = None,
|
|
276
|
+
next: Optional[str] = None,
|
|
277
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
278
|
+
server_url: Optional[str] = None,
|
|
279
|
+
url_override: Optional[str] = None,
|
|
280
|
+
timeout_ms: Optional[int] = None,
|
|
281
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
282
|
+
) -> Optional[models.GetDividendsResponse]:
|
|
283
|
+
r"""Get Dividend History
|
|
284
|
+
|
|
285
|
+
Retrieve historical dividend payments including declaration dates, ex-dividend dates, payment dates, and dividend amounts per share. `ticker` accepts a single symbol only. Use `tickersAnyOf` for multiple symbols. If `ticker` contains multiple comma-separated values, the API returns 400: \"Multiple tickers are not supported. Please provide a single ticker.\" If both `ticker` and `tickersAnyOf` are set, the API returns 400: \"Cannot specify both ticker and tickersAnyOf. Use ticker for a single symbol or tickersAnyOf for multiple.\"
|
|
286
|
+
|
|
287
|
+
If set, this operation will use `client_id` from the global security.
|
|
288
|
+
|
|
289
|
+
:param ticker: Single ticker symbol only, such as AAPL. Do not send a comma-separated list here; if you need multiple symbols, use `tickersAnyOf` instead.
|
|
290
|
+
:param tickers_any_of: Comma-separated list of ticker symbols.
|
|
291
|
+
:param ticker_from: Filter tickers >= this value (inclusive)
|
|
292
|
+
:param ticker_after: Filter tickers > this value (exclusive)
|
|
293
|
+
:param ticker_to: Filter tickers <= this value (inclusive)
|
|
294
|
+
:param ticker_before: Filter tickers < this value (exclusive)
|
|
295
|
+
:param ex_dividend_date: Exact ex-dividend date in YYYY-MM-DD format
|
|
296
|
+
:param ex_dividend_date_from: Ex-dividend start-date filter. Returns dividends with ex-dividend dates on or after this date.
|
|
297
|
+
:param ex_dividend_date_after: Ex-dividend after-date filter. Returns dividends after this date, excluding the date itself.
|
|
298
|
+
:param ex_dividend_date_to: Ex-dividend end-date filter. Returns dividends with ex-dividend dates on or before this date.
|
|
299
|
+
:param ex_dividend_date_before: Ex-dividend before-date filter. Returns dividends before this date, excluding the date itself.
|
|
300
|
+
:param frequency: Exact frequency (0=irregular, 1=annual, 4=quarterly, 12=monthly)
|
|
301
|
+
:param frequency_min: Dividend frequency lower-bound filter. Returns records with frequency greater than or equal to this value.
|
|
302
|
+
:param frequency_above: Dividend frequency lower-bound filter. Returns records above this value, excluding the value itself.
|
|
303
|
+
:param frequency_max: Dividend frequency upper-bound filter. Returns records with frequency less than or equal to this value.
|
|
304
|
+
:param frequency_below: Dividend frequency upper-bound filter. Returns records below this value, excluding the value itself.
|
|
305
|
+
:param distribution_type: Exact type: recurring, special, supplemental, irregular, unknown
|
|
306
|
+
:param distribution_types: Comma-separated list of distribution types
|
|
307
|
+
:param limit: Maximum number of results to return. Use smaller values for UI pages and larger values for exports within API limits. (1-5000)
|
|
308
|
+
:param sort: A comma-separated list of sort columns. For each column, append `.asc` or `.desc` to specify direction. Defaults to `ticker.asc` when not specified. Examples: `ticker.asc`, `ex_dividend_date.desc`, or `ticker.asc,ex_dividend_date.desc`.
|
|
309
|
+
:param next: Pagination cursor from the previous response. Omit it on the first request, then send the returned cursor to fetch the next page.
|
|
310
|
+
:param retries: Override the default retry configuration for this method
|
|
311
|
+
:param server_url: Override the default server URL for this method
|
|
312
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
313
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
314
|
+
"""
|
|
315
|
+
base_url = None
|
|
316
|
+
url_variables = None
|
|
317
|
+
if timeout_ms is None:
|
|
318
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
319
|
+
|
|
320
|
+
if timeout_ms is None:
|
|
321
|
+
timeout_ms = 30000
|
|
322
|
+
|
|
323
|
+
if server_url is not None:
|
|
324
|
+
base_url = server_url
|
|
325
|
+
else:
|
|
326
|
+
base_url = self._get_url(base_url, url_variables)
|
|
327
|
+
|
|
328
|
+
request = models.GetDividendsRequest(
|
|
329
|
+
ticker=ticker,
|
|
330
|
+
tickers_any_of=tickers_any_of,
|
|
331
|
+
ticker_from=ticker_from,
|
|
332
|
+
ticker_after=ticker_after,
|
|
333
|
+
ticker_to=ticker_to,
|
|
334
|
+
ticker_before=ticker_before,
|
|
335
|
+
ex_dividend_date=ex_dividend_date,
|
|
336
|
+
ex_dividend_date_from=ex_dividend_date_from,
|
|
337
|
+
ex_dividend_date_after=ex_dividend_date_after,
|
|
338
|
+
ex_dividend_date_to=ex_dividend_date_to,
|
|
339
|
+
ex_dividend_date_before=ex_dividend_date_before,
|
|
340
|
+
frequency=frequency,
|
|
341
|
+
frequency_min=frequency_min,
|
|
342
|
+
frequency_above=frequency_above,
|
|
343
|
+
frequency_max=frequency_max,
|
|
344
|
+
frequency_below=frequency_below,
|
|
345
|
+
distribution_type=distribution_type,
|
|
346
|
+
distribution_types=distribution_types,
|
|
347
|
+
limit=limit,
|
|
348
|
+
sort=sort,
|
|
349
|
+
next=next,
|
|
350
|
+
)
|
|
351
|
+
|
|
352
|
+
req = self._build_request_async(
|
|
353
|
+
method="GET",
|
|
354
|
+
path="/v1/corporate-actions/dividends",
|
|
355
|
+
base_url=base_url,
|
|
356
|
+
url_variables=url_variables,
|
|
357
|
+
url_override=url_override,
|
|
358
|
+
request=request,
|
|
359
|
+
request_body_required=False,
|
|
360
|
+
request_has_path_params=False,
|
|
361
|
+
request_has_query_params=True,
|
|
362
|
+
user_agent_header="user-agent",
|
|
363
|
+
accept_header_value="application/json",
|
|
364
|
+
http_headers=http_headers,
|
|
365
|
+
security=self.sdk_configuration.security,
|
|
366
|
+
allow_empty_value=None,
|
|
367
|
+
allowed_fields=["client_id"],
|
|
368
|
+
timeout_ms=timeout_ms,
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
if retries == UNSET:
|
|
372
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
373
|
+
retries = self.sdk_configuration.retry_config
|
|
374
|
+
else:
|
|
375
|
+
retries = utils.RetryConfig(
|
|
376
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
retry_config = None
|
|
380
|
+
if isinstance(retries, utils.RetryConfig):
|
|
381
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
382
|
+
|
|
383
|
+
http_res = await self.do_request_async(
|
|
384
|
+
hook_ctx=HookContext(
|
|
385
|
+
config=self.sdk_configuration,
|
|
386
|
+
base_url=base_url or "",
|
|
387
|
+
operation_id="getDividends",
|
|
388
|
+
oauth2_scopes=["market:supplemental"],
|
|
389
|
+
security_source=self.sdk_configuration.security,
|
|
390
|
+
tags=["Corporate Actions"],
|
|
391
|
+
extensions=None,
|
|
392
|
+
),
|
|
393
|
+
request=req,
|
|
394
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
395
|
+
retry_config=retry_config,
|
|
396
|
+
)
|
|
397
|
+
|
|
398
|
+
def next_func() -> Optional[models.GetDividendsResponse]:
|
|
399
|
+
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
|
|
400
|
+
next_url_match = JSONPath("$.nextUrl").parse(body)
|
|
401
|
+
if len(next_url_match) == 0:
|
|
402
|
+
return None
|
|
403
|
+
|
|
404
|
+
next_url = next_url_match[0]
|
|
405
|
+
if not next_url:
|
|
406
|
+
return None
|
|
407
|
+
|
|
408
|
+
if next_url[0] == "/":
|
|
409
|
+
url = self._get_url(base_url, url_variables)
|
|
410
|
+
next_url = url + next_url
|
|
411
|
+
|
|
412
|
+
return self.get_dividends(
|
|
413
|
+
ticker=ticker,
|
|
414
|
+
tickers_any_of=tickers_any_of,
|
|
415
|
+
ticker_from=ticker_from,
|
|
416
|
+
ticker_after=ticker_after,
|
|
417
|
+
ticker_to=ticker_to,
|
|
418
|
+
ticker_before=ticker_before,
|
|
419
|
+
ex_dividend_date=ex_dividend_date,
|
|
420
|
+
ex_dividend_date_from=ex_dividend_date_from,
|
|
421
|
+
ex_dividend_date_after=ex_dividend_date_after,
|
|
422
|
+
ex_dividend_date_to=ex_dividend_date_to,
|
|
423
|
+
ex_dividend_date_before=ex_dividend_date_before,
|
|
424
|
+
frequency=frequency,
|
|
425
|
+
frequency_min=frequency_min,
|
|
426
|
+
frequency_above=frequency_above,
|
|
427
|
+
frequency_max=frequency_max,
|
|
428
|
+
frequency_below=frequency_below,
|
|
429
|
+
distribution_type=distribution_type,
|
|
430
|
+
distribution_types=distribution_types,
|
|
431
|
+
limit=limit,
|
|
432
|
+
sort=sort,
|
|
433
|
+
next=next,
|
|
434
|
+
retries=retries,
|
|
435
|
+
server_url=server_url,
|
|
436
|
+
timeout_ms=timeout_ms,
|
|
437
|
+
http_headers=http_headers,
|
|
438
|
+
url_override=next_url,
|
|
439
|
+
)
|
|
440
|
+
|
|
441
|
+
response_data: Any = None
|
|
442
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
443
|
+
return models.GetDividendsResponse(
|
|
444
|
+
dividends_response=unmarshal_json_response(
|
|
445
|
+
Optional[models.DividendsResponse], http_res
|
|
446
|
+
),
|
|
447
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
448
|
+
next=next_func,
|
|
449
|
+
)
|
|
450
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
451
|
+
response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
|
|
452
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
453
|
+
request=req, response=http_res
|
|
454
|
+
)
|
|
455
|
+
raise errors.BadRequest(response_data, http_res)
|
|
456
|
+
if utils.match_response(http_res, "401", "application/json"):
|
|
457
|
+
response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
|
|
458
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
459
|
+
request=req, response=http_res
|
|
460
|
+
)
|
|
461
|
+
raise errors.Unauthorized(response_data, http_res)
|
|
462
|
+
if utils.match_response(http_res, "403", "application/json"):
|
|
463
|
+
response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
|
|
464
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
465
|
+
request=req, response=http_res
|
|
466
|
+
)
|
|
467
|
+
raise errors.Forbidden(response_data, http_res)
|
|
468
|
+
if utils.match_response(http_res, "404", "application/json"):
|
|
469
|
+
response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
|
|
470
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
471
|
+
request=req, response=http_res
|
|
472
|
+
)
|
|
473
|
+
raise errors.NotFound(response_data, http_res)
|
|
474
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
475
|
+
response_data = unmarshal_json_response(
|
|
476
|
+
errors.InternalServerErrorUnion, http_res
|
|
477
|
+
)
|
|
478
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
479
|
+
request=req, response=http_res
|
|
480
|
+
)
|
|
481
|
+
raise errors.InternalServerError(response_data, http_res)
|
|
482
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
483
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
484
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
485
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
486
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
487
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
488
|
+
|
|
489
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
490
|
+
|
|
491
|
+
def get_ipo_calendar(
|
|
492
|
+
self,
|
|
493
|
+
*,
|
|
494
|
+
from_: date,
|
|
495
|
+
to: date,
|
|
496
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
497
|
+
server_url: Optional[str] = None,
|
|
498
|
+
timeout_ms: Optional[int] = None,
|
|
499
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
500
|
+
) -> models.GetIpoCalendarResponse:
|
|
501
|
+
r"""Get IPO Calendar
|
|
502
|
+
|
|
503
|
+
Retrieve upcoming and recent initial public offerings (IPOs) including offering dates, price ranges, share counts, and underwriters.
|
|
504
|
+
|
|
505
|
+
If set, this operation will use `client_id` from the global security.
|
|
506
|
+
|
|
507
|
+
:param from_: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
|
|
508
|
+
:param to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
|
|
509
|
+
:param retries: Override the default retry configuration for this method
|
|
510
|
+
:param server_url: Override the default server URL for this method
|
|
511
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
512
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
513
|
+
"""
|
|
514
|
+
base_url = None
|
|
515
|
+
url_variables = None
|
|
516
|
+
if timeout_ms is None:
|
|
517
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
518
|
+
|
|
519
|
+
if timeout_ms is None:
|
|
520
|
+
timeout_ms = 30000
|
|
521
|
+
|
|
522
|
+
if server_url is not None:
|
|
523
|
+
base_url = server_url
|
|
524
|
+
else:
|
|
525
|
+
base_url = self._get_url(base_url, url_variables)
|
|
526
|
+
|
|
527
|
+
request = models.GetIpoCalendarRequest(
|
|
528
|
+
from_=from_,
|
|
529
|
+
to=to,
|
|
530
|
+
)
|
|
531
|
+
|
|
532
|
+
req = self._build_request(
|
|
533
|
+
method="GET",
|
|
534
|
+
path="/v1/corporate-actions/ipo-calendar",
|
|
535
|
+
base_url=base_url,
|
|
536
|
+
url_variables=url_variables,
|
|
537
|
+
request=request,
|
|
538
|
+
request_body_required=False,
|
|
539
|
+
request_has_path_params=False,
|
|
540
|
+
request_has_query_params=True,
|
|
541
|
+
user_agent_header="user-agent",
|
|
542
|
+
accept_header_value="application/json",
|
|
543
|
+
http_headers=http_headers,
|
|
544
|
+
security=self.sdk_configuration.security,
|
|
545
|
+
allow_empty_value=None,
|
|
546
|
+
allowed_fields=["client_id"],
|
|
547
|
+
timeout_ms=timeout_ms,
|
|
548
|
+
)
|
|
549
|
+
|
|
550
|
+
if retries == UNSET:
|
|
551
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
552
|
+
retries = self.sdk_configuration.retry_config
|
|
553
|
+
else:
|
|
554
|
+
retries = utils.RetryConfig(
|
|
555
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
556
|
+
)
|
|
557
|
+
|
|
558
|
+
retry_config = None
|
|
559
|
+
if isinstance(retries, utils.RetryConfig):
|
|
560
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
561
|
+
|
|
562
|
+
http_res = self.do_request(
|
|
563
|
+
hook_ctx=HookContext(
|
|
564
|
+
config=self.sdk_configuration,
|
|
565
|
+
base_url=base_url or "",
|
|
566
|
+
operation_id="getIpoCalendar",
|
|
567
|
+
oauth2_scopes=["market:supplemental"],
|
|
568
|
+
security_source=self.sdk_configuration.security,
|
|
569
|
+
tags=["Corporate Actions"],
|
|
570
|
+
extensions=None,
|
|
571
|
+
),
|
|
572
|
+
request=req,
|
|
573
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
574
|
+
retry_config=retry_config,
|
|
575
|
+
)
|
|
576
|
+
|
|
577
|
+
response_data: Any = None
|
|
578
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
579
|
+
return models.GetIpoCalendarResponse(
|
|
580
|
+
ipo_calendar_response=unmarshal_json_response(
|
|
581
|
+
Optional[models.IpoCalendarResponse], http_res
|
|
582
|
+
),
|
|
583
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
584
|
+
)
|
|
585
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
586
|
+
response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
|
|
587
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
588
|
+
request=req, response=http_res
|
|
589
|
+
)
|
|
590
|
+
raise errors.BadRequest(response_data, http_res)
|
|
591
|
+
if utils.match_response(http_res, "401", "application/json"):
|
|
592
|
+
response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
|
|
593
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
594
|
+
request=req, response=http_res
|
|
595
|
+
)
|
|
596
|
+
raise errors.Unauthorized(response_data, http_res)
|
|
597
|
+
if utils.match_response(http_res, "403", "application/json"):
|
|
598
|
+
response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
|
|
599
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
600
|
+
request=req, response=http_res
|
|
601
|
+
)
|
|
602
|
+
raise errors.Forbidden(response_data, http_res)
|
|
603
|
+
if utils.match_response(http_res, "404", "application/json"):
|
|
604
|
+
response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
|
|
605
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
606
|
+
request=req, response=http_res
|
|
607
|
+
)
|
|
608
|
+
raise errors.NotFound(response_data, http_res)
|
|
609
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
610
|
+
response_data = unmarshal_json_response(
|
|
611
|
+
errors.InternalServerErrorUnion, http_res
|
|
612
|
+
)
|
|
613
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
614
|
+
request=req, response=http_res
|
|
615
|
+
)
|
|
616
|
+
raise errors.InternalServerError(response_data, http_res)
|
|
617
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
618
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
619
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
620
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
621
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
622
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
623
|
+
|
|
624
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
625
|
+
|
|
626
|
+
async def get_ipo_calendar_async(
|
|
627
|
+
self,
|
|
628
|
+
*,
|
|
629
|
+
from_: date,
|
|
630
|
+
to: date,
|
|
631
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
632
|
+
server_url: Optional[str] = None,
|
|
633
|
+
timeout_ms: Optional[int] = None,
|
|
634
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
635
|
+
) -> models.GetIpoCalendarResponse:
|
|
636
|
+
r"""Get IPO Calendar
|
|
637
|
+
|
|
638
|
+
Retrieve upcoming and recent initial public offerings (IPOs) including offering dates, price ranges, share counts, and underwriters.
|
|
639
|
+
|
|
640
|
+
If set, this operation will use `client_id` from the global security.
|
|
641
|
+
|
|
642
|
+
:param from_: Start date in YYYY-MM-DD format. Enter the first date to include in the research window.
|
|
643
|
+
:param to: End date in YYYY-MM-DD format. Enter the last date to include in the research window.
|
|
644
|
+
:param retries: Override the default retry configuration for this method
|
|
645
|
+
:param server_url: Override the default server URL for this method
|
|
646
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
647
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
648
|
+
"""
|
|
649
|
+
base_url = None
|
|
650
|
+
url_variables = None
|
|
651
|
+
if timeout_ms is None:
|
|
652
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
653
|
+
|
|
654
|
+
if timeout_ms is None:
|
|
655
|
+
timeout_ms = 30000
|
|
656
|
+
|
|
657
|
+
if server_url is not None:
|
|
658
|
+
base_url = server_url
|
|
659
|
+
else:
|
|
660
|
+
base_url = self._get_url(base_url, url_variables)
|
|
661
|
+
|
|
662
|
+
request = models.GetIpoCalendarRequest(
|
|
663
|
+
from_=from_,
|
|
664
|
+
to=to,
|
|
665
|
+
)
|
|
666
|
+
|
|
667
|
+
req = self._build_request_async(
|
|
668
|
+
method="GET",
|
|
669
|
+
path="/v1/corporate-actions/ipo-calendar",
|
|
670
|
+
base_url=base_url,
|
|
671
|
+
url_variables=url_variables,
|
|
672
|
+
request=request,
|
|
673
|
+
request_body_required=False,
|
|
674
|
+
request_has_path_params=False,
|
|
675
|
+
request_has_query_params=True,
|
|
676
|
+
user_agent_header="user-agent",
|
|
677
|
+
accept_header_value="application/json",
|
|
678
|
+
http_headers=http_headers,
|
|
679
|
+
security=self.sdk_configuration.security,
|
|
680
|
+
allow_empty_value=None,
|
|
681
|
+
allowed_fields=["client_id"],
|
|
682
|
+
timeout_ms=timeout_ms,
|
|
683
|
+
)
|
|
684
|
+
|
|
685
|
+
if retries == UNSET:
|
|
686
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
687
|
+
retries = self.sdk_configuration.retry_config
|
|
688
|
+
else:
|
|
689
|
+
retries = utils.RetryConfig(
|
|
690
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
691
|
+
)
|
|
692
|
+
|
|
693
|
+
retry_config = None
|
|
694
|
+
if isinstance(retries, utils.RetryConfig):
|
|
695
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
696
|
+
|
|
697
|
+
http_res = await self.do_request_async(
|
|
698
|
+
hook_ctx=HookContext(
|
|
699
|
+
config=self.sdk_configuration,
|
|
700
|
+
base_url=base_url or "",
|
|
701
|
+
operation_id="getIpoCalendar",
|
|
702
|
+
oauth2_scopes=["market:supplemental"],
|
|
703
|
+
security_source=self.sdk_configuration.security,
|
|
704
|
+
tags=["Corporate Actions"],
|
|
705
|
+
extensions=None,
|
|
706
|
+
),
|
|
707
|
+
request=req,
|
|
708
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
709
|
+
retry_config=retry_config,
|
|
710
|
+
)
|
|
711
|
+
|
|
712
|
+
response_data: Any = None
|
|
713
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
714
|
+
return models.GetIpoCalendarResponse(
|
|
715
|
+
ipo_calendar_response=unmarshal_json_response(
|
|
716
|
+
Optional[models.IpoCalendarResponse], http_res
|
|
717
|
+
),
|
|
718
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
719
|
+
)
|
|
720
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
721
|
+
response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
|
|
722
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
723
|
+
request=req, response=http_res
|
|
724
|
+
)
|
|
725
|
+
raise errors.BadRequest(response_data, http_res)
|
|
726
|
+
if utils.match_response(http_res, "401", "application/json"):
|
|
727
|
+
response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
|
|
728
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
729
|
+
request=req, response=http_res
|
|
730
|
+
)
|
|
731
|
+
raise errors.Unauthorized(response_data, http_res)
|
|
732
|
+
if utils.match_response(http_res, "403", "application/json"):
|
|
733
|
+
response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
|
|
734
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
735
|
+
request=req, response=http_res
|
|
736
|
+
)
|
|
737
|
+
raise errors.Forbidden(response_data, http_res)
|
|
738
|
+
if utils.match_response(http_res, "404", "application/json"):
|
|
739
|
+
response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
|
|
740
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
741
|
+
request=req, response=http_res
|
|
742
|
+
)
|
|
743
|
+
raise errors.NotFound(response_data, http_res)
|
|
744
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
745
|
+
response_data = unmarshal_json_response(
|
|
746
|
+
errors.InternalServerErrorUnion, http_res
|
|
747
|
+
)
|
|
748
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
749
|
+
request=req, response=http_res
|
|
750
|
+
)
|
|
751
|
+
raise errors.InternalServerError(response_data, http_res)
|
|
752
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
753
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
754
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
755
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
756
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
757
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
758
|
+
|
|
759
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
760
|
+
|
|
761
|
+
def get_spinoffs(
|
|
762
|
+
self,
|
|
763
|
+
*,
|
|
764
|
+
identifier: str,
|
|
765
|
+
identifier_type: models.TenderOfferIdentifierType,
|
|
766
|
+
start_date: date,
|
|
767
|
+
end_date: date,
|
|
768
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
769
|
+
server_url: Optional[str] = None,
|
|
770
|
+
timeout_ms: Optional[int] = None,
|
|
771
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
772
|
+
) -> models.GetSpinoffsResponse:
|
|
773
|
+
r"""Get Corporate Spinoffs
|
|
774
|
+
|
|
775
|
+
Retrieve information about corporate spinoffs including separation dates, distribution ratios, and details of the newly independent entities.
|
|
776
|
+
|
|
777
|
+
If set, this operation will use `client_id` from the global security.
|
|
778
|
+
|
|
779
|
+
:param identifier: Identifier value for the company you're querying. The format depends on `identifierType`:
|
|
780
|
+
- `Symbol` — exchange ticker (e.g. `AAPL`).
|
|
781
|
+
- `CUSIP` — 9-character U.S./Canadian identifier (e.g. `037833100`).
|
|
782
|
+
- `ISIN` — 12-character international identifier (e.g. `US0378331005`).
|
|
783
|
+
- `SEDOL` — 7-character UK identifier.
|
|
784
|
+
- `Valoren` — Swiss security identifier.
|
|
785
|
+
- `FIGI` — Bloomberg Financial Instrument Global Identifier.
|
|
786
|
+
- `CompositeFIGI` — country-level composite FIGI.
|
|
787
|
+
|
|
788
|
+
Must match the kind selected in `identifierType`.
|
|
789
|
+
:param identifier_type: Tells the API how to interpret `identifier`. See `TenderOfferIdentifierType` for the full set of supported values and what each one means.
|
|
790
|
+
:param start_date: Start of the spin-off announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2020-01-01`).
|
|
791
|
+
:param end_date: End of the spin-off announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2020-12-31`).
|
|
792
|
+
:param retries: Override the default retry configuration for this method
|
|
793
|
+
:param server_url: Override the default server URL for this method
|
|
794
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
795
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
796
|
+
"""
|
|
797
|
+
base_url = None
|
|
798
|
+
url_variables = None
|
|
799
|
+
if timeout_ms is None:
|
|
800
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
801
|
+
|
|
802
|
+
if timeout_ms is None:
|
|
803
|
+
timeout_ms = 30000
|
|
804
|
+
|
|
805
|
+
if server_url is not None:
|
|
806
|
+
base_url = server_url
|
|
807
|
+
else:
|
|
808
|
+
base_url = self._get_url(base_url, url_variables)
|
|
809
|
+
|
|
810
|
+
request = models.GetSpinoffsRequest(
|
|
811
|
+
identifier=identifier,
|
|
812
|
+
identifier_type=identifier_type,
|
|
813
|
+
start_date=start_date,
|
|
814
|
+
end_date=end_date,
|
|
815
|
+
)
|
|
816
|
+
|
|
817
|
+
req = self._build_request(
|
|
818
|
+
method="GET",
|
|
819
|
+
path="/v1/corporate-actions/spinoffs",
|
|
820
|
+
base_url=base_url,
|
|
821
|
+
url_variables=url_variables,
|
|
822
|
+
request=request,
|
|
823
|
+
request_body_required=False,
|
|
824
|
+
request_has_path_params=False,
|
|
825
|
+
request_has_query_params=True,
|
|
826
|
+
user_agent_header="user-agent",
|
|
827
|
+
accept_header_value="application/json",
|
|
828
|
+
http_headers=http_headers,
|
|
829
|
+
security=self.sdk_configuration.security,
|
|
830
|
+
allow_empty_value=None,
|
|
831
|
+
allowed_fields=["client_id"],
|
|
832
|
+
timeout_ms=timeout_ms,
|
|
833
|
+
)
|
|
834
|
+
|
|
835
|
+
if retries == UNSET:
|
|
836
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
837
|
+
retries = self.sdk_configuration.retry_config
|
|
838
|
+
else:
|
|
839
|
+
retries = utils.RetryConfig(
|
|
840
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
841
|
+
)
|
|
842
|
+
|
|
843
|
+
retry_config = None
|
|
844
|
+
if isinstance(retries, utils.RetryConfig):
|
|
845
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
846
|
+
|
|
847
|
+
http_res = self.do_request(
|
|
848
|
+
hook_ctx=HookContext(
|
|
849
|
+
config=self.sdk_configuration,
|
|
850
|
+
base_url=base_url or "",
|
|
851
|
+
operation_id="getSpinoffs",
|
|
852
|
+
oauth2_scopes=["market:supplemental"],
|
|
853
|
+
security_source=self.sdk_configuration.security,
|
|
854
|
+
tags=["Corporate Actions"],
|
|
855
|
+
extensions=None,
|
|
856
|
+
),
|
|
857
|
+
request=req,
|
|
858
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
859
|
+
retry_config=retry_config,
|
|
860
|
+
)
|
|
861
|
+
|
|
862
|
+
response_data: Any = None
|
|
863
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
864
|
+
return models.GetSpinoffsResponse(
|
|
865
|
+
spinoffs_response=unmarshal_json_response(
|
|
866
|
+
Optional[models.SpinoffsResponse], http_res
|
|
867
|
+
),
|
|
868
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
869
|
+
)
|
|
870
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
871
|
+
response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
|
|
872
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
873
|
+
request=req, response=http_res
|
|
874
|
+
)
|
|
875
|
+
raise errors.BadRequest(response_data, http_res)
|
|
876
|
+
if utils.match_response(http_res, "401", "application/json"):
|
|
877
|
+
response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
|
|
878
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
879
|
+
request=req, response=http_res
|
|
880
|
+
)
|
|
881
|
+
raise errors.Unauthorized(response_data, http_res)
|
|
882
|
+
if utils.match_response(http_res, "403", "application/json"):
|
|
883
|
+
response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
|
|
884
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
885
|
+
request=req, response=http_res
|
|
886
|
+
)
|
|
887
|
+
raise errors.Forbidden(response_data, http_res)
|
|
888
|
+
if utils.match_response(http_res, "404", "application/json"):
|
|
889
|
+
response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
|
|
890
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
891
|
+
request=req, response=http_res
|
|
892
|
+
)
|
|
893
|
+
raise errors.NotFound(response_data, http_res)
|
|
894
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
895
|
+
response_data = unmarshal_json_response(
|
|
896
|
+
errors.InternalServerErrorUnion, http_res
|
|
897
|
+
)
|
|
898
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
899
|
+
request=req, response=http_res
|
|
900
|
+
)
|
|
901
|
+
raise errors.InternalServerError(response_data, http_res)
|
|
902
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
903
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
904
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
905
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
906
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
907
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
908
|
+
|
|
909
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
910
|
+
|
|
911
|
+
async def get_spinoffs_async(
|
|
912
|
+
self,
|
|
913
|
+
*,
|
|
914
|
+
identifier: str,
|
|
915
|
+
identifier_type: models.TenderOfferIdentifierType,
|
|
916
|
+
start_date: date,
|
|
917
|
+
end_date: date,
|
|
918
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
919
|
+
server_url: Optional[str] = None,
|
|
920
|
+
timeout_ms: Optional[int] = None,
|
|
921
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
922
|
+
) -> models.GetSpinoffsResponse:
|
|
923
|
+
r"""Get Corporate Spinoffs
|
|
924
|
+
|
|
925
|
+
Retrieve information about corporate spinoffs including separation dates, distribution ratios, and details of the newly independent entities.
|
|
926
|
+
|
|
927
|
+
If set, this operation will use `client_id` from the global security.
|
|
928
|
+
|
|
929
|
+
:param identifier: Identifier value for the company you're querying. The format depends on `identifierType`:
|
|
930
|
+
- `Symbol` — exchange ticker (e.g. `AAPL`).
|
|
931
|
+
- `CUSIP` — 9-character U.S./Canadian identifier (e.g. `037833100`).
|
|
932
|
+
- `ISIN` — 12-character international identifier (e.g. `US0378331005`).
|
|
933
|
+
- `SEDOL` — 7-character UK identifier.
|
|
934
|
+
- `Valoren` — Swiss security identifier.
|
|
935
|
+
- `FIGI` — Bloomberg Financial Instrument Global Identifier.
|
|
936
|
+
- `CompositeFIGI` — country-level composite FIGI.
|
|
937
|
+
|
|
938
|
+
Must match the kind selected in `identifierType`.
|
|
939
|
+
:param identifier_type: Tells the API how to interpret `identifier`. See `TenderOfferIdentifierType` for the full set of supported values and what each one means.
|
|
940
|
+
:param start_date: Start of the spin-off announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2020-01-01`).
|
|
941
|
+
:param end_date: End of the spin-off announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2020-12-31`).
|
|
942
|
+
:param retries: Override the default retry configuration for this method
|
|
943
|
+
:param server_url: Override the default server URL for this method
|
|
944
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
945
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
946
|
+
"""
|
|
947
|
+
base_url = None
|
|
948
|
+
url_variables = None
|
|
949
|
+
if timeout_ms is None:
|
|
950
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
951
|
+
|
|
952
|
+
if timeout_ms is None:
|
|
953
|
+
timeout_ms = 30000
|
|
954
|
+
|
|
955
|
+
if server_url is not None:
|
|
956
|
+
base_url = server_url
|
|
957
|
+
else:
|
|
958
|
+
base_url = self._get_url(base_url, url_variables)
|
|
959
|
+
|
|
960
|
+
request = models.GetSpinoffsRequest(
|
|
961
|
+
identifier=identifier,
|
|
962
|
+
identifier_type=identifier_type,
|
|
963
|
+
start_date=start_date,
|
|
964
|
+
end_date=end_date,
|
|
965
|
+
)
|
|
966
|
+
|
|
967
|
+
req = self._build_request_async(
|
|
968
|
+
method="GET",
|
|
969
|
+
path="/v1/corporate-actions/spinoffs",
|
|
970
|
+
base_url=base_url,
|
|
971
|
+
url_variables=url_variables,
|
|
972
|
+
request=request,
|
|
973
|
+
request_body_required=False,
|
|
974
|
+
request_has_path_params=False,
|
|
975
|
+
request_has_query_params=True,
|
|
976
|
+
user_agent_header="user-agent",
|
|
977
|
+
accept_header_value="application/json",
|
|
978
|
+
http_headers=http_headers,
|
|
979
|
+
security=self.sdk_configuration.security,
|
|
980
|
+
allow_empty_value=None,
|
|
981
|
+
allowed_fields=["client_id"],
|
|
982
|
+
timeout_ms=timeout_ms,
|
|
983
|
+
)
|
|
984
|
+
|
|
985
|
+
if retries == UNSET:
|
|
986
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
987
|
+
retries = self.sdk_configuration.retry_config
|
|
988
|
+
else:
|
|
989
|
+
retries = utils.RetryConfig(
|
|
990
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
991
|
+
)
|
|
992
|
+
|
|
993
|
+
retry_config = None
|
|
994
|
+
if isinstance(retries, utils.RetryConfig):
|
|
995
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
996
|
+
|
|
997
|
+
http_res = await self.do_request_async(
|
|
998
|
+
hook_ctx=HookContext(
|
|
999
|
+
config=self.sdk_configuration,
|
|
1000
|
+
base_url=base_url or "",
|
|
1001
|
+
operation_id="getSpinoffs",
|
|
1002
|
+
oauth2_scopes=["market:supplemental"],
|
|
1003
|
+
security_source=self.sdk_configuration.security,
|
|
1004
|
+
tags=["Corporate Actions"],
|
|
1005
|
+
extensions=None,
|
|
1006
|
+
),
|
|
1007
|
+
request=req,
|
|
1008
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
1009
|
+
retry_config=retry_config,
|
|
1010
|
+
)
|
|
1011
|
+
|
|
1012
|
+
response_data: Any = None
|
|
1013
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
1014
|
+
return models.GetSpinoffsResponse(
|
|
1015
|
+
spinoffs_response=unmarshal_json_response(
|
|
1016
|
+
Optional[models.SpinoffsResponse], http_res
|
|
1017
|
+
),
|
|
1018
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
1019
|
+
)
|
|
1020
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
1021
|
+
response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
|
|
1022
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1023
|
+
request=req, response=http_res
|
|
1024
|
+
)
|
|
1025
|
+
raise errors.BadRequest(response_data, http_res)
|
|
1026
|
+
if utils.match_response(http_res, "401", "application/json"):
|
|
1027
|
+
response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
|
|
1028
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1029
|
+
request=req, response=http_res
|
|
1030
|
+
)
|
|
1031
|
+
raise errors.Unauthorized(response_data, http_res)
|
|
1032
|
+
if utils.match_response(http_res, "403", "application/json"):
|
|
1033
|
+
response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
|
|
1034
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1035
|
+
request=req, response=http_res
|
|
1036
|
+
)
|
|
1037
|
+
raise errors.Forbidden(response_data, http_res)
|
|
1038
|
+
if utils.match_response(http_res, "404", "application/json"):
|
|
1039
|
+
response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
|
|
1040
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1041
|
+
request=req, response=http_res
|
|
1042
|
+
)
|
|
1043
|
+
raise errors.NotFound(response_data, http_res)
|
|
1044
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
1045
|
+
response_data = unmarshal_json_response(
|
|
1046
|
+
errors.InternalServerErrorUnion, http_res
|
|
1047
|
+
)
|
|
1048
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1049
|
+
request=req, response=http_res
|
|
1050
|
+
)
|
|
1051
|
+
raise errors.InternalServerError(response_data, http_res)
|
|
1052
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
1053
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
1054
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
1055
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
1056
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
1057
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
1058
|
+
|
|
1059
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
1060
|
+
|
|
1061
|
+
def get_tender_offers(
|
|
1062
|
+
self,
|
|
1063
|
+
*,
|
|
1064
|
+
identifier: str,
|
|
1065
|
+
identifier_type: models.TenderOfferIdentifierType,
|
|
1066
|
+
start_date: date,
|
|
1067
|
+
end_date: date,
|
|
1068
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
1069
|
+
server_url: Optional[str] = None,
|
|
1070
|
+
timeout_ms: Optional[int] = None,
|
|
1071
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
1072
|
+
) -> models.GetTenderOffersResponse:
|
|
1073
|
+
r"""Get Tender Offers
|
|
1074
|
+
|
|
1075
|
+
Retrieve information about tender offers including offer prices, expiration dates, and terms for acquiring company shares.
|
|
1076
|
+
|
|
1077
|
+
If set, this operation will use `client_id` from the global security.
|
|
1078
|
+
|
|
1079
|
+
:param identifier: Identifier value for the company you're querying. The format depends on `identifierType`:
|
|
1080
|
+
- `Symbol` — exchange ticker (e.g. `AAPL`).
|
|
1081
|
+
- `CUSIP` — 9-character U.S./Canadian identifier (e.g. `037833100`).
|
|
1082
|
+
- `ISIN` — 12-character international identifier (e.g. `US0378331005`).
|
|
1083
|
+
- `SEDOL` — 7-character UK identifier.
|
|
1084
|
+
- `Valoren` — Swiss security identifier.
|
|
1085
|
+
- `FIGI` — Bloomberg Financial Instrument Global Identifier.
|
|
1086
|
+
- `CompositeFIGI` — country-level composite FIGI.
|
|
1087
|
+
|
|
1088
|
+
Must match the kind selected in `identifierType`.
|
|
1089
|
+
:param identifier_type: Tells the API how to interpret `identifier`. See `TenderOfferIdentifierType` for the full set of supported values and what each one means.
|
|
1090
|
+
:param start_date: Start of the tender-offer announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2024-01-01`).
|
|
1091
|
+
:param end_date: End of the tender-offer announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2024-12-31`).
|
|
1092
|
+
:param retries: Override the default retry configuration for this method
|
|
1093
|
+
:param server_url: Override the default server URL for this method
|
|
1094
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
1095
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
1096
|
+
"""
|
|
1097
|
+
base_url = None
|
|
1098
|
+
url_variables = None
|
|
1099
|
+
if timeout_ms is None:
|
|
1100
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
1101
|
+
|
|
1102
|
+
if timeout_ms is None:
|
|
1103
|
+
timeout_ms = 30000
|
|
1104
|
+
|
|
1105
|
+
if server_url is not None:
|
|
1106
|
+
base_url = server_url
|
|
1107
|
+
else:
|
|
1108
|
+
base_url = self._get_url(base_url, url_variables)
|
|
1109
|
+
|
|
1110
|
+
request = models.GetTenderOffersRequest(
|
|
1111
|
+
identifier=identifier,
|
|
1112
|
+
identifier_type=identifier_type,
|
|
1113
|
+
start_date=start_date,
|
|
1114
|
+
end_date=end_date,
|
|
1115
|
+
)
|
|
1116
|
+
|
|
1117
|
+
req = self._build_request(
|
|
1118
|
+
method="GET",
|
|
1119
|
+
path="/v1/corporate-actions/tender-offers",
|
|
1120
|
+
base_url=base_url,
|
|
1121
|
+
url_variables=url_variables,
|
|
1122
|
+
request=request,
|
|
1123
|
+
request_body_required=False,
|
|
1124
|
+
request_has_path_params=False,
|
|
1125
|
+
request_has_query_params=True,
|
|
1126
|
+
user_agent_header="user-agent",
|
|
1127
|
+
accept_header_value="application/json",
|
|
1128
|
+
http_headers=http_headers,
|
|
1129
|
+
security=self.sdk_configuration.security,
|
|
1130
|
+
allow_empty_value=None,
|
|
1131
|
+
allowed_fields=["client_id"],
|
|
1132
|
+
timeout_ms=timeout_ms,
|
|
1133
|
+
)
|
|
1134
|
+
|
|
1135
|
+
if retries == UNSET:
|
|
1136
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
1137
|
+
retries = self.sdk_configuration.retry_config
|
|
1138
|
+
else:
|
|
1139
|
+
retries = utils.RetryConfig(
|
|
1140
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
1141
|
+
)
|
|
1142
|
+
|
|
1143
|
+
retry_config = None
|
|
1144
|
+
if isinstance(retries, utils.RetryConfig):
|
|
1145
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
1146
|
+
|
|
1147
|
+
http_res = self.do_request(
|
|
1148
|
+
hook_ctx=HookContext(
|
|
1149
|
+
config=self.sdk_configuration,
|
|
1150
|
+
base_url=base_url or "",
|
|
1151
|
+
operation_id="getTenderOffers",
|
|
1152
|
+
oauth2_scopes=["market:supplemental"],
|
|
1153
|
+
security_source=self.sdk_configuration.security,
|
|
1154
|
+
tags=["Corporate Actions"],
|
|
1155
|
+
extensions=None,
|
|
1156
|
+
),
|
|
1157
|
+
request=req,
|
|
1158
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
1159
|
+
retry_config=retry_config,
|
|
1160
|
+
)
|
|
1161
|
+
|
|
1162
|
+
response_data: Any = None
|
|
1163
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
1164
|
+
return models.GetTenderOffersResponse(
|
|
1165
|
+
tender_offers_response=unmarshal_json_response(
|
|
1166
|
+
Optional[models.TenderOffersResponse], http_res
|
|
1167
|
+
),
|
|
1168
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
1169
|
+
)
|
|
1170
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
1171
|
+
response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
|
|
1172
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1173
|
+
request=req, response=http_res
|
|
1174
|
+
)
|
|
1175
|
+
raise errors.BadRequest(response_data, http_res)
|
|
1176
|
+
if utils.match_response(http_res, "401", "application/json"):
|
|
1177
|
+
response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
|
|
1178
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1179
|
+
request=req, response=http_res
|
|
1180
|
+
)
|
|
1181
|
+
raise errors.Unauthorized(response_data, http_res)
|
|
1182
|
+
if utils.match_response(http_res, "403", "application/json"):
|
|
1183
|
+
response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
|
|
1184
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1185
|
+
request=req, response=http_res
|
|
1186
|
+
)
|
|
1187
|
+
raise errors.Forbidden(response_data, http_res)
|
|
1188
|
+
if utils.match_response(http_res, "404", "application/json"):
|
|
1189
|
+
response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
|
|
1190
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1191
|
+
request=req, response=http_res
|
|
1192
|
+
)
|
|
1193
|
+
raise errors.NotFound(response_data, http_res)
|
|
1194
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
1195
|
+
response_data = unmarshal_json_response(
|
|
1196
|
+
errors.InternalServerErrorUnion, http_res
|
|
1197
|
+
)
|
|
1198
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1199
|
+
request=req, response=http_res
|
|
1200
|
+
)
|
|
1201
|
+
raise errors.InternalServerError(response_data, http_res)
|
|
1202
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
1203
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
1204
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
1205
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
1206
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
1207
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
1208
|
+
|
|
1209
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
1210
|
+
|
|
1211
|
+
async def get_tender_offers_async(
|
|
1212
|
+
self,
|
|
1213
|
+
*,
|
|
1214
|
+
identifier: str,
|
|
1215
|
+
identifier_type: models.TenderOfferIdentifierType,
|
|
1216
|
+
start_date: date,
|
|
1217
|
+
end_date: date,
|
|
1218
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
1219
|
+
server_url: Optional[str] = None,
|
|
1220
|
+
timeout_ms: Optional[int] = None,
|
|
1221
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
1222
|
+
) -> models.GetTenderOffersResponse:
|
|
1223
|
+
r"""Get Tender Offers
|
|
1224
|
+
|
|
1225
|
+
Retrieve information about tender offers including offer prices, expiration dates, and terms for acquiring company shares.
|
|
1226
|
+
|
|
1227
|
+
If set, this operation will use `client_id` from the global security.
|
|
1228
|
+
|
|
1229
|
+
:param identifier: Identifier value for the company you're querying. The format depends on `identifierType`:
|
|
1230
|
+
- `Symbol` — exchange ticker (e.g. `AAPL`).
|
|
1231
|
+
- `CUSIP` — 9-character U.S./Canadian identifier (e.g. `037833100`).
|
|
1232
|
+
- `ISIN` — 12-character international identifier (e.g. `US0378331005`).
|
|
1233
|
+
- `SEDOL` — 7-character UK identifier.
|
|
1234
|
+
- `Valoren` — Swiss security identifier.
|
|
1235
|
+
- `FIGI` — Bloomberg Financial Instrument Global Identifier.
|
|
1236
|
+
- `CompositeFIGI` — country-level composite FIGI.
|
|
1237
|
+
|
|
1238
|
+
Must match the kind selected in `identifierType`.
|
|
1239
|
+
:param identifier_type: Tells the API how to interpret `identifier`. See `TenderOfferIdentifierType` for the full set of supported values and what each one means.
|
|
1240
|
+
:param start_date: Start of the tender-offer announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2024-01-01`).
|
|
1241
|
+
:param end_date: End of the tender-offer announcement window, inclusive. Format: `YYYY-MM-DD` (e.g. `2024-12-31`).
|
|
1242
|
+
:param retries: Override the default retry configuration for this method
|
|
1243
|
+
:param server_url: Override the default server URL for this method
|
|
1244
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
1245
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
1246
|
+
"""
|
|
1247
|
+
base_url = None
|
|
1248
|
+
url_variables = None
|
|
1249
|
+
if timeout_ms is None:
|
|
1250
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
1251
|
+
|
|
1252
|
+
if timeout_ms is None:
|
|
1253
|
+
timeout_ms = 30000
|
|
1254
|
+
|
|
1255
|
+
if server_url is not None:
|
|
1256
|
+
base_url = server_url
|
|
1257
|
+
else:
|
|
1258
|
+
base_url = self._get_url(base_url, url_variables)
|
|
1259
|
+
|
|
1260
|
+
request = models.GetTenderOffersRequest(
|
|
1261
|
+
identifier=identifier,
|
|
1262
|
+
identifier_type=identifier_type,
|
|
1263
|
+
start_date=start_date,
|
|
1264
|
+
end_date=end_date,
|
|
1265
|
+
)
|
|
1266
|
+
|
|
1267
|
+
req = self._build_request_async(
|
|
1268
|
+
method="GET",
|
|
1269
|
+
path="/v1/corporate-actions/tender-offers",
|
|
1270
|
+
base_url=base_url,
|
|
1271
|
+
url_variables=url_variables,
|
|
1272
|
+
request=request,
|
|
1273
|
+
request_body_required=False,
|
|
1274
|
+
request_has_path_params=False,
|
|
1275
|
+
request_has_query_params=True,
|
|
1276
|
+
user_agent_header="user-agent",
|
|
1277
|
+
accept_header_value="application/json",
|
|
1278
|
+
http_headers=http_headers,
|
|
1279
|
+
security=self.sdk_configuration.security,
|
|
1280
|
+
allow_empty_value=None,
|
|
1281
|
+
allowed_fields=["client_id"],
|
|
1282
|
+
timeout_ms=timeout_ms,
|
|
1283
|
+
)
|
|
1284
|
+
|
|
1285
|
+
if retries == UNSET:
|
|
1286
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
1287
|
+
retries = self.sdk_configuration.retry_config
|
|
1288
|
+
else:
|
|
1289
|
+
retries = utils.RetryConfig(
|
|
1290
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
1291
|
+
)
|
|
1292
|
+
|
|
1293
|
+
retry_config = None
|
|
1294
|
+
if isinstance(retries, utils.RetryConfig):
|
|
1295
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
1296
|
+
|
|
1297
|
+
http_res = await self.do_request_async(
|
|
1298
|
+
hook_ctx=HookContext(
|
|
1299
|
+
config=self.sdk_configuration,
|
|
1300
|
+
base_url=base_url or "",
|
|
1301
|
+
operation_id="getTenderOffers",
|
|
1302
|
+
oauth2_scopes=["market:supplemental"],
|
|
1303
|
+
security_source=self.sdk_configuration.security,
|
|
1304
|
+
tags=["Corporate Actions"],
|
|
1305
|
+
extensions=None,
|
|
1306
|
+
),
|
|
1307
|
+
request=req,
|
|
1308
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
1309
|
+
retry_config=retry_config,
|
|
1310
|
+
)
|
|
1311
|
+
|
|
1312
|
+
response_data: Any = None
|
|
1313
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
1314
|
+
return models.GetTenderOffersResponse(
|
|
1315
|
+
tender_offers_response=unmarshal_json_response(
|
|
1316
|
+
Optional[models.TenderOffersResponse], http_res
|
|
1317
|
+
),
|
|
1318
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
1319
|
+
)
|
|
1320
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
1321
|
+
response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
|
|
1322
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1323
|
+
request=req, response=http_res
|
|
1324
|
+
)
|
|
1325
|
+
raise errors.BadRequest(response_data, http_res)
|
|
1326
|
+
if utils.match_response(http_res, "401", "application/json"):
|
|
1327
|
+
response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
|
|
1328
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1329
|
+
request=req, response=http_res
|
|
1330
|
+
)
|
|
1331
|
+
raise errors.Unauthorized(response_data, http_res)
|
|
1332
|
+
if utils.match_response(http_res, "403", "application/json"):
|
|
1333
|
+
response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
|
|
1334
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1335
|
+
request=req, response=http_res
|
|
1336
|
+
)
|
|
1337
|
+
raise errors.Forbidden(response_data, http_res)
|
|
1338
|
+
if utils.match_response(http_res, "404", "application/json"):
|
|
1339
|
+
response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
|
|
1340
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1341
|
+
request=req, response=http_res
|
|
1342
|
+
)
|
|
1343
|
+
raise errors.NotFound(response_data, http_res)
|
|
1344
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
1345
|
+
response_data = unmarshal_json_response(
|
|
1346
|
+
errors.InternalServerErrorUnion, http_res
|
|
1347
|
+
)
|
|
1348
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1349
|
+
request=req, response=http_res
|
|
1350
|
+
)
|
|
1351
|
+
raise errors.InternalServerError(response_data, http_res)
|
|
1352
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
1353
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
1354
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
1355
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
1356
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
1357
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
1358
|
+
|
|
1359
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
1360
|
+
|
|
1361
|
+
def get_stock_splits(
|
|
1362
|
+
self,
|
|
1363
|
+
*,
|
|
1364
|
+
ticker: Optional[str] = None,
|
|
1365
|
+
tickers_any_of: Optional[str] = None,
|
|
1366
|
+
ticker_from: Optional[str] = None,
|
|
1367
|
+
ticker_after: Optional[str] = None,
|
|
1368
|
+
ticker_to: Optional[str] = None,
|
|
1369
|
+
ticker_before: Optional[str] = None,
|
|
1370
|
+
execution_date: Optional[date] = None,
|
|
1371
|
+
execution_date_from: Optional[date] = None,
|
|
1372
|
+
execution_date_after: Optional[date] = None,
|
|
1373
|
+
execution_date_to: Optional[date] = None,
|
|
1374
|
+
execution_date_before: Optional[date] = None,
|
|
1375
|
+
adjustment_type: Optional[models.GetStockSplitsAdjustmentType] = None,
|
|
1376
|
+
adjustment_types: Optional[str] = None,
|
|
1377
|
+
limit: Optional[int] = None,
|
|
1378
|
+
sort: Optional[str] = None,
|
|
1379
|
+
next: Optional[str] = None,
|
|
1380
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
1381
|
+
server_url: Optional[str] = None,
|
|
1382
|
+
url_override: Optional[str] = None,
|
|
1383
|
+
timeout_ms: Optional[int] = None,
|
|
1384
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
1385
|
+
) -> Optional[models.GetStockSplitsResponse]:
|
|
1386
|
+
r"""Get Stock Split History
|
|
1387
|
+
|
|
1388
|
+
Retrieve historical stock split events including split ratios, execution dates, and pre/post-split price adjustments. `ticker` accepts a single symbol only. Use `tickersAnyOf` for multiple symbols. If `ticker` contains multiple comma-separated values, the API returns 400: \"Multiple tickers are not supported. Please provide a single ticker.\" If both `ticker` and `tickersAnyOf` are set, the API returns 400: \"Cannot specify both ticker and tickersAnyOf. Use ticker for a single symbol or tickersAnyOf for multiple.\"
|
|
1389
|
+
|
|
1390
|
+
If set, this operation will use `client_id` from the global security.
|
|
1391
|
+
|
|
1392
|
+
:param ticker: Single ticker symbol only, such as AAPL. Do not send a comma-separated list here; if you need multiple symbols, use `tickersAnyOf` instead.
|
|
1393
|
+
:param tickers_any_of: Comma-separated list of ticker symbols.
|
|
1394
|
+
:param ticker_from: Filter tickers >= this value (inclusive)
|
|
1395
|
+
:param ticker_after: Filter tickers > this value (exclusive)
|
|
1396
|
+
:param ticker_to: Filter tickers <= this value (inclusive)
|
|
1397
|
+
:param ticker_before: Filter tickers < this value (exclusive)
|
|
1398
|
+
:param execution_date: Exact execution date in YYYY-MM-DD format
|
|
1399
|
+
:param execution_date_from: Filter to splits that executed on or after this date (inclusive). Format: `YYYY-MM-DD`.
|
|
1400
|
+
:param execution_date_after: Filter to splits that executed strictly after this date (exclusive). Format: `YYYY-MM-DD`.
|
|
1401
|
+
:param execution_date_to: Filter to splits that executed on or before this date (inclusive). Format: `YYYY-MM-DD`.
|
|
1402
|
+
:param execution_date_before: Filter to splits that executed strictly before this date (exclusive). Format: `YYYY-MM-DD`.
|
|
1403
|
+
:param adjustment_type: Exact type: forward_split, reverse_split, stock_dividend
|
|
1404
|
+
:param adjustment_types: Comma-separated list of adjustment types
|
|
1405
|
+
:param limit: Maximum number of results to return. Range: 1 to 5000. Use smaller values for UI pages, larger for batch exports.
|
|
1406
|
+
:param sort: A comma-separated list of sort columns. For each column, append `.asc` or `.desc` to specify direction. Defaults to `ticker.asc` when not specified. Examples: `execution_date.desc` or `ticker.asc,execution_date.desc`.
|
|
1407
|
+
:param next: Pagination cursor from previous response
|
|
1408
|
+
:param retries: Override the default retry configuration for this method
|
|
1409
|
+
:param server_url: Override the default server URL for this method
|
|
1410
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
1411
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
1412
|
+
"""
|
|
1413
|
+
base_url = None
|
|
1414
|
+
url_variables = None
|
|
1415
|
+
if timeout_ms is None:
|
|
1416
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
1417
|
+
|
|
1418
|
+
if timeout_ms is None:
|
|
1419
|
+
timeout_ms = 30000
|
|
1420
|
+
|
|
1421
|
+
if server_url is not None:
|
|
1422
|
+
base_url = server_url
|
|
1423
|
+
else:
|
|
1424
|
+
base_url = self._get_url(base_url, url_variables)
|
|
1425
|
+
|
|
1426
|
+
request = models.GetStockSplitsRequest(
|
|
1427
|
+
ticker=ticker,
|
|
1428
|
+
tickers_any_of=tickers_any_of,
|
|
1429
|
+
ticker_from=ticker_from,
|
|
1430
|
+
ticker_after=ticker_after,
|
|
1431
|
+
ticker_to=ticker_to,
|
|
1432
|
+
ticker_before=ticker_before,
|
|
1433
|
+
execution_date=execution_date,
|
|
1434
|
+
execution_date_from=execution_date_from,
|
|
1435
|
+
execution_date_after=execution_date_after,
|
|
1436
|
+
execution_date_to=execution_date_to,
|
|
1437
|
+
execution_date_before=execution_date_before,
|
|
1438
|
+
adjustment_type=adjustment_type,
|
|
1439
|
+
adjustment_types=adjustment_types,
|
|
1440
|
+
limit=limit,
|
|
1441
|
+
sort=sort,
|
|
1442
|
+
next=next,
|
|
1443
|
+
)
|
|
1444
|
+
|
|
1445
|
+
req = self._build_request(
|
|
1446
|
+
method="GET",
|
|
1447
|
+
path="/v1/stock/split",
|
|
1448
|
+
base_url=base_url,
|
|
1449
|
+
url_variables=url_variables,
|
|
1450
|
+
url_override=url_override,
|
|
1451
|
+
request=request,
|
|
1452
|
+
request_body_required=False,
|
|
1453
|
+
request_has_path_params=False,
|
|
1454
|
+
request_has_query_params=True,
|
|
1455
|
+
user_agent_header="user-agent",
|
|
1456
|
+
accept_header_value="application/json",
|
|
1457
|
+
http_headers=http_headers,
|
|
1458
|
+
security=self.sdk_configuration.security,
|
|
1459
|
+
allow_empty_value=None,
|
|
1460
|
+
allowed_fields=["client_id"],
|
|
1461
|
+
timeout_ms=timeout_ms,
|
|
1462
|
+
)
|
|
1463
|
+
|
|
1464
|
+
if retries == UNSET:
|
|
1465
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
1466
|
+
retries = self.sdk_configuration.retry_config
|
|
1467
|
+
else:
|
|
1468
|
+
retries = utils.RetryConfig(
|
|
1469
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
1470
|
+
)
|
|
1471
|
+
|
|
1472
|
+
retry_config = None
|
|
1473
|
+
if isinstance(retries, utils.RetryConfig):
|
|
1474
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
1475
|
+
|
|
1476
|
+
http_res = self.do_request(
|
|
1477
|
+
hook_ctx=HookContext(
|
|
1478
|
+
config=self.sdk_configuration,
|
|
1479
|
+
base_url=base_url or "",
|
|
1480
|
+
operation_id="getStockSplits",
|
|
1481
|
+
oauth2_scopes=["market:supplemental"],
|
|
1482
|
+
security_source=self.sdk_configuration.security,
|
|
1483
|
+
tags=["Corporate Actions"],
|
|
1484
|
+
extensions=None,
|
|
1485
|
+
),
|
|
1486
|
+
request=req,
|
|
1487
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
1488
|
+
retry_config=retry_config,
|
|
1489
|
+
)
|
|
1490
|
+
|
|
1491
|
+
def next_func() -> Optional[models.GetStockSplitsResponse]:
|
|
1492
|
+
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
|
|
1493
|
+
next_url_match = JSONPath("$.nextUrl").parse(body)
|
|
1494
|
+
if len(next_url_match) == 0:
|
|
1495
|
+
return None
|
|
1496
|
+
|
|
1497
|
+
next_url = next_url_match[0]
|
|
1498
|
+
if not next_url:
|
|
1499
|
+
return None
|
|
1500
|
+
|
|
1501
|
+
if next_url[0] == "/":
|
|
1502
|
+
url = self._get_url(base_url, url_variables)
|
|
1503
|
+
next_url = url + next_url
|
|
1504
|
+
|
|
1505
|
+
return self.get_stock_splits(
|
|
1506
|
+
ticker=ticker,
|
|
1507
|
+
tickers_any_of=tickers_any_of,
|
|
1508
|
+
ticker_from=ticker_from,
|
|
1509
|
+
ticker_after=ticker_after,
|
|
1510
|
+
ticker_to=ticker_to,
|
|
1511
|
+
ticker_before=ticker_before,
|
|
1512
|
+
execution_date=execution_date,
|
|
1513
|
+
execution_date_from=execution_date_from,
|
|
1514
|
+
execution_date_after=execution_date_after,
|
|
1515
|
+
execution_date_to=execution_date_to,
|
|
1516
|
+
execution_date_before=execution_date_before,
|
|
1517
|
+
adjustment_type=adjustment_type,
|
|
1518
|
+
adjustment_types=adjustment_types,
|
|
1519
|
+
limit=limit,
|
|
1520
|
+
sort=sort,
|
|
1521
|
+
next=next,
|
|
1522
|
+
retries=retries,
|
|
1523
|
+
server_url=server_url,
|
|
1524
|
+
timeout_ms=timeout_ms,
|
|
1525
|
+
http_headers=http_headers,
|
|
1526
|
+
url_override=next_url,
|
|
1527
|
+
)
|
|
1528
|
+
|
|
1529
|
+
response_data: Any = None
|
|
1530
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
1531
|
+
return models.GetStockSplitsResponse(
|
|
1532
|
+
stock_splits_response=unmarshal_json_response(
|
|
1533
|
+
Optional[models.StockSplitsResponse], http_res
|
|
1534
|
+
),
|
|
1535
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
1536
|
+
next=next_func,
|
|
1537
|
+
)
|
|
1538
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
1539
|
+
response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
|
|
1540
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1541
|
+
request=req, response=http_res
|
|
1542
|
+
)
|
|
1543
|
+
raise errors.BadRequest(response_data, http_res)
|
|
1544
|
+
if utils.match_response(http_res, "401", "application/json"):
|
|
1545
|
+
response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
|
|
1546
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1547
|
+
request=req, response=http_res
|
|
1548
|
+
)
|
|
1549
|
+
raise errors.Unauthorized(response_data, http_res)
|
|
1550
|
+
if utils.match_response(http_res, "403", "application/json"):
|
|
1551
|
+
response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
|
|
1552
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1553
|
+
request=req, response=http_res
|
|
1554
|
+
)
|
|
1555
|
+
raise errors.Forbidden(response_data, http_res)
|
|
1556
|
+
if utils.match_response(http_res, "404", "application/json"):
|
|
1557
|
+
response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
|
|
1558
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1559
|
+
request=req, response=http_res
|
|
1560
|
+
)
|
|
1561
|
+
raise errors.NotFound(response_data, http_res)
|
|
1562
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
1563
|
+
response_data = unmarshal_json_response(
|
|
1564
|
+
errors.InternalServerErrorUnion, http_res
|
|
1565
|
+
)
|
|
1566
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1567
|
+
request=req, response=http_res
|
|
1568
|
+
)
|
|
1569
|
+
raise errors.InternalServerError(response_data, http_res)
|
|
1570
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
1571
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
1572
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
1573
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
1574
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
1575
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
1576
|
+
|
|
1577
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
1578
|
+
|
|
1579
|
+
async def get_stock_splits_async(
|
|
1580
|
+
self,
|
|
1581
|
+
*,
|
|
1582
|
+
ticker: Optional[str] = None,
|
|
1583
|
+
tickers_any_of: Optional[str] = None,
|
|
1584
|
+
ticker_from: Optional[str] = None,
|
|
1585
|
+
ticker_after: Optional[str] = None,
|
|
1586
|
+
ticker_to: Optional[str] = None,
|
|
1587
|
+
ticker_before: Optional[str] = None,
|
|
1588
|
+
execution_date: Optional[date] = None,
|
|
1589
|
+
execution_date_from: Optional[date] = None,
|
|
1590
|
+
execution_date_after: Optional[date] = None,
|
|
1591
|
+
execution_date_to: Optional[date] = None,
|
|
1592
|
+
execution_date_before: Optional[date] = None,
|
|
1593
|
+
adjustment_type: Optional[models.GetStockSplitsAdjustmentType] = None,
|
|
1594
|
+
adjustment_types: Optional[str] = None,
|
|
1595
|
+
limit: Optional[int] = None,
|
|
1596
|
+
sort: Optional[str] = None,
|
|
1597
|
+
next: Optional[str] = None,
|
|
1598
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
1599
|
+
server_url: Optional[str] = None,
|
|
1600
|
+
url_override: Optional[str] = None,
|
|
1601
|
+
timeout_ms: Optional[int] = None,
|
|
1602
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
1603
|
+
) -> Optional[models.GetStockSplitsResponse]:
|
|
1604
|
+
r"""Get Stock Split History
|
|
1605
|
+
|
|
1606
|
+
Retrieve historical stock split events including split ratios, execution dates, and pre/post-split price adjustments. `ticker` accepts a single symbol only. Use `tickersAnyOf` for multiple symbols. If `ticker` contains multiple comma-separated values, the API returns 400: \"Multiple tickers are not supported. Please provide a single ticker.\" If both `ticker` and `tickersAnyOf` are set, the API returns 400: \"Cannot specify both ticker and tickersAnyOf. Use ticker for a single symbol or tickersAnyOf for multiple.\"
|
|
1607
|
+
|
|
1608
|
+
If set, this operation will use `client_id` from the global security.
|
|
1609
|
+
|
|
1610
|
+
:param ticker: Single ticker symbol only, such as AAPL. Do not send a comma-separated list here; if you need multiple symbols, use `tickersAnyOf` instead.
|
|
1611
|
+
:param tickers_any_of: Comma-separated list of ticker symbols.
|
|
1612
|
+
:param ticker_from: Filter tickers >= this value (inclusive)
|
|
1613
|
+
:param ticker_after: Filter tickers > this value (exclusive)
|
|
1614
|
+
:param ticker_to: Filter tickers <= this value (inclusive)
|
|
1615
|
+
:param ticker_before: Filter tickers < this value (exclusive)
|
|
1616
|
+
:param execution_date: Exact execution date in YYYY-MM-DD format
|
|
1617
|
+
:param execution_date_from: Filter to splits that executed on or after this date (inclusive). Format: `YYYY-MM-DD`.
|
|
1618
|
+
:param execution_date_after: Filter to splits that executed strictly after this date (exclusive). Format: `YYYY-MM-DD`.
|
|
1619
|
+
:param execution_date_to: Filter to splits that executed on or before this date (inclusive). Format: `YYYY-MM-DD`.
|
|
1620
|
+
:param execution_date_before: Filter to splits that executed strictly before this date (exclusive). Format: `YYYY-MM-DD`.
|
|
1621
|
+
:param adjustment_type: Exact type: forward_split, reverse_split, stock_dividend
|
|
1622
|
+
:param adjustment_types: Comma-separated list of adjustment types
|
|
1623
|
+
:param limit: Maximum number of results to return. Range: 1 to 5000. Use smaller values for UI pages, larger for batch exports.
|
|
1624
|
+
:param sort: A comma-separated list of sort columns. For each column, append `.asc` or `.desc` to specify direction. Defaults to `ticker.asc` when not specified. Examples: `execution_date.desc` or `ticker.asc,execution_date.desc`.
|
|
1625
|
+
:param next: Pagination cursor from previous response
|
|
1626
|
+
:param retries: Override the default retry configuration for this method
|
|
1627
|
+
:param server_url: Override the default server URL for this method
|
|
1628
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
1629
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
1630
|
+
"""
|
|
1631
|
+
base_url = None
|
|
1632
|
+
url_variables = None
|
|
1633
|
+
if timeout_ms is None:
|
|
1634
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
1635
|
+
|
|
1636
|
+
if timeout_ms is None:
|
|
1637
|
+
timeout_ms = 30000
|
|
1638
|
+
|
|
1639
|
+
if server_url is not None:
|
|
1640
|
+
base_url = server_url
|
|
1641
|
+
else:
|
|
1642
|
+
base_url = self._get_url(base_url, url_variables)
|
|
1643
|
+
|
|
1644
|
+
request = models.GetStockSplitsRequest(
|
|
1645
|
+
ticker=ticker,
|
|
1646
|
+
tickers_any_of=tickers_any_of,
|
|
1647
|
+
ticker_from=ticker_from,
|
|
1648
|
+
ticker_after=ticker_after,
|
|
1649
|
+
ticker_to=ticker_to,
|
|
1650
|
+
ticker_before=ticker_before,
|
|
1651
|
+
execution_date=execution_date,
|
|
1652
|
+
execution_date_from=execution_date_from,
|
|
1653
|
+
execution_date_after=execution_date_after,
|
|
1654
|
+
execution_date_to=execution_date_to,
|
|
1655
|
+
execution_date_before=execution_date_before,
|
|
1656
|
+
adjustment_type=adjustment_type,
|
|
1657
|
+
adjustment_types=adjustment_types,
|
|
1658
|
+
limit=limit,
|
|
1659
|
+
sort=sort,
|
|
1660
|
+
next=next,
|
|
1661
|
+
)
|
|
1662
|
+
|
|
1663
|
+
req = self._build_request_async(
|
|
1664
|
+
method="GET",
|
|
1665
|
+
path="/v1/stock/split",
|
|
1666
|
+
base_url=base_url,
|
|
1667
|
+
url_variables=url_variables,
|
|
1668
|
+
url_override=url_override,
|
|
1669
|
+
request=request,
|
|
1670
|
+
request_body_required=False,
|
|
1671
|
+
request_has_path_params=False,
|
|
1672
|
+
request_has_query_params=True,
|
|
1673
|
+
user_agent_header="user-agent",
|
|
1674
|
+
accept_header_value="application/json",
|
|
1675
|
+
http_headers=http_headers,
|
|
1676
|
+
security=self.sdk_configuration.security,
|
|
1677
|
+
allow_empty_value=None,
|
|
1678
|
+
allowed_fields=["client_id"],
|
|
1679
|
+
timeout_ms=timeout_ms,
|
|
1680
|
+
)
|
|
1681
|
+
|
|
1682
|
+
if retries == UNSET:
|
|
1683
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
1684
|
+
retries = self.sdk_configuration.retry_config
|
|
1685
|
+
else:
|
|
1686
|
+
retries = utils.RetryConfig(
|
|
1687
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
1688
|
+
)
|
|
1689
|
+
|
|
1690
|
+
retry_config = None
|
|
1691
|
+
if isinstance(retries, utils.RetryConfig):
|
|
1692
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
1693
|
+
|
|
1694
|
+
http_res = await self.do_request_async(
|
|
1695
|
+
hook_ctx=HookContext(
|
|
1696
|
+
config=self.sdk_configuration,
|
|
1697
|
+
base_url=base_url or "",
|
|
1698
|
+
operation_id="getStockSplits",
|
|
1699
|
+
oauth2_scopes=["market:supplemental"],
|
|
1700
|
+
security_source=self.sdk_configuration.security,
|
|
1701
|
+
tags=["Corporate Actions"],
|
|
1702
|
+
extensions=None,
|
|
1703
|
+
),
|
|
1704
|
+
request=req,
|
|
1705
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
1706
|
+
retry_config=retry_config,
|
|
1707
|
+
)
|
|
1708
|
+
|
|
1709
|
+
def next_func() -> Optional[models.GetStockSplitsResponse]:
|
|
1710
|
+
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
|
|
1711
|
+
next_url_match = JSONPath("$.nextUrl").parse(body)
|
|
1712
|
+
if len(next_url_match) == 0:
|
|
1713
|
+
return None
|
|
1714
|
+
|
|
1715
|
+
next_url = next_url_match[0]
|
|
1716
|
+
if not next_url:
|
|
1717
|
+
return None
|
|
1718
|
+
|
|
1719
|
+
if next_url[0] == "/":
|
|
1720
|
+
url = self._get_url(base_url, url_variables)
|
|
1721
|
+
next_url = url + next_url
|
|
1722
|
+
|
|
1723
|
+
return self.get_stock_splits(
|
|
1724
|
+
ticker=ticker,
|
|
1725
|
+
tickers_any_of=tickers_any_of,
|
|
1726
|
+
ticker_from=ticker_from,
|
|
1727
|
+
ticker_after=ticker_after,
|
|
1728
|
+
ticker_to=ticker_to,
|
|
1729
|
+
ticker_before=ticker_before,
|
|
1730
|
+
execution_date=execution_date,
|
|
1731
|
+
execution_date_from=execution_date_from,
|
|
1732
|
+
execution_date_after=execution_date_after,
|
|
1733
|
+
execution_date_to=execution_date_to,
|
|
1734
|
+
execution_date_before=execution_date_before,
|
|
1735
|
+
adjustment_type=adjustment_type,
|
|
1736
|
+
adjustment_types=adjustment_types,
|
|
1737
|
+
limit=limit,
|
|
1738
|
+
sort=sort,
|
|
1739
|
+
next=next,
|
|
1740
|
+
retries=retries,
|
|
1741
|
+
server_url=server_url,
|
|
1742
|
+
timeout_ms=timeout_ms,
|
|
1743
|
+
http_headers=http_headers,
|
|
1744
|
+
url_override=next_url,
|
|
1745
|
+
)
|
|
1746
|
+
|
|
1747
|
+
response_data: Any = None
|
|
1748
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
1749
|
+
return models.GetStockSplitsResponse(
|
|
1750
|
+
stock_splits_response=unmarshal_json_response(
|
|
1751
|
+
Optional[models.StockSplitsResponse], http_res
|
|
1752
|
+
),
|
|
1753
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
1754
|
+
next=next_func,
|
|
1755
|
+
)
|
|
1756
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
1757
|
+
response_data = unmarshal_json_response(errors.BadRequestUnion, http_res)
|
|
1758
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1759
|
+
request=req, response=http_res
|
|
1760
|
+
)
|
|
1761
|
+
raise errors.BadRequest(response_data, http_res)
|
|
1762
|
+
if utils.match_response(http_res, "401", "application/json"):
|
|
1763
|
+
response_data = unmarshal_json_response(errors.UnauthorizedUnion, http_res)
|
|
1764
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1765
|
+
request=req, response=http_res
|
|
1766
|
+
)
|
|
1767
|
+
raise errors.Unauthorized(response_data, http_res)
|
|
1768
|
+
if utils.match_response(http_res, "403", "application/json"):
|
|
1769
|
+
response_data = unmarshal_json_response(errors.ForbiddenUnion, http_res)
|
|
1770
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1771
|
+
request=req, response=http_res
|
|
1772
|
+
)
|
|
1773
|
+
raise errors.Forbidden(response_data, http_res)
|
|
1774
|
+
if utils.match_response(http_res, "404", "application/json"):
|
|
1775
|
+
response_data = unmarshal_json_response(errors.NotFoundUnion, http_res)
|
|
1776
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1777
|
+
request=req, response=http_res
|
|
1778
|
+
)
|
|
1779
|
+
raise errors.NotFound(response_data, http_res)
|
|
1780
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
1781
|
+
response_data = unmarshal_json_response(
|
|
1782
|
+
errors.InternalServerErrorUnion, http_res
|
|
1783
|
+
)
|
|
1784
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
1785
|
+
request=req, response=http_res
|
|
1786
|
+
)
|
|
1787
|
+
raise errors.InternalServerError(response_data, http_res)
|
|
1788
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
1789
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
1790
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
1791
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
1792
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
1793
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
1794
|
+
|
|
1795
|
+
raise errors.APIError("Unexpected response received", http_res)
|