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
finance_dev/markets.py
ADDED
|
@@ -0,0 +1,952 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
# @generated-id: 7d4528c4c703
|
|
3
|
+
|
|
4
|
+
from .basesdk import BaseSDK
|
|
5
|
+
from finance_dev import errors, models, utils
|
|
6
|
+
from finance_dev._hooks import HookContext
|
|
7
|
+
from finance_dev.types import OptionalNullable, UNSET
|
|
8
|
+
from finance_dev.utils.unmarshal_json_response import unmarshal_json_response
|
|
9
|
+
from jsonpath import JSONPath
|
|
10
|
+
from typing import Any, Dict, List, Mapping, Optional, Union
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Markets(BaseSDK):
|
|
14
|
+
def get_base_event(
|
|
15
|
+
self,
|
|
16
|
+
*,
|
|
17
|
+
base_event_id: str,
|
|
18
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
19
|
+
server_url: Optional[str] = None,
|
|
20
|
+
timeout_ms: Optional[int] = None,
|
|
21
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
22
|
+
) -> models.GetBaseEventResponse:
|
|
23
|
+
r"""Get a base event with its events and each event's contracts
|
|
24
|
+
|
|
25
|
+
:param base_event_id:
|
|
26
|
+
:param retries: Override the default retry configuration for this method
|
|
27
|
+
:param server_url: Override the default server URL for this method
|
|
28
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
29
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
30
|
+
"""
|
|
31
|
+
base_url = None
|
|
32
|
+
url_variables = None
|
|
33
|
+
if timeout_ms is None:
|
|
34
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
35
|
+
|
|
36
|
+
if timeout_ms is None:
|
|
37
|
+
timeout_ms = 30000
|
|
38
|
+
|
|
39
|
+
if server_url is not None:
|
|
40
|
+
base_url = server_url
|
|
41
|
+
else:
|
|
42
|
+
base_url = self._get_url(base_url, url_variables)
|
|
43
|
+
|
|
44
|
+
request = models.GetBaseEventRequest(
|
|
45
|
+
base_event_id=base_event_id,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
req = self._build_request(
|
|
49
|
+
method="GET",
|
|
50
|
+
path="/v1/predictions/base-events/{baseEventId}",
|
|
51
|
+
base_url=base_url,
|
|
52
|
+
url_variables=url_variables,
|
|
53
|
+
request=request,
|
|
54
|
+
request_body_required=False,
|
|
55
|
+
request_has_path_params=True,
|
|
56
|
+
request_has_query_params=False,
|
|
57
|
+
user_agent_header="user-agent",
|
|
58
|
+
accept_header_value="application/json",
|
|
59
|
+
http_headers=http_headers,
|
|
60
|
+
allow_empty_value=None,
|
|
61
|
+
timeout_ms=timeout_ms,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
if retries == UNSET:
|
|
65
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
66
|
+
retries = self.sdk_configuration.retry_config
|
|
67
|
+
else:
|
|
68
|
+
retries = utils.RetryConfig(
|
|
69
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
retry_config = None
|
|
73
|
+
if isinstance(retries, utils.RetryConfig):
|
|
74
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
75
|
+
|
|
76
|
+
http_res = self.do_request(
|
|
77
|
+
hook_ctx=HookContext(
|
|
78
|
+
config=self.sdk_configuration,
|
|
79
|
+
base_url=base_url or "",
|
|
80
|
+
operation_id="getBaseEvent",
|
|
81
|
+
oauth2_scopes=None,
|
|
82
|
+
security_source=None,
|
|
83
|
+
tags=["Prediction Market Data"],
|
|
84
|
+
extensions=None,
|
|
85
|
+
),
|
|
86
|
+
request=req,
|
|
87
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
88
|
+
retry_config=retry_config,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
response_data: Any = None
|
|
92
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
93
|
+
return models.GetBaseEventResponse(
|
|
94
|
+
object=unmarshal_json_response(
|
|
95
|
+
Optional[models.GetBaseEventResponseBody], http_res
|
|
96
|
+
),
|
|
97
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
98
|
+
)
|
|
99
|
+
if utils.match_response(http_res, ["400", "404"], "application/json"):
|
|
100
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
101
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
102
|
+
request=req, response=http_res
|
|
103
|
+
)
|
|
104
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
105
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
106
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
107
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
108
|
+
request=req, response=http_res
|
|
109
|
+
)
|
|
110
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
111
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
112
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
113
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
114
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
115
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
116
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
117
|
+
|
|
118
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
119
|
+
|
|
120
|
+
async def get_base_event_async(
|
|
121
|
+
self,
|
|
122
|
+
*,
|
|
123
|
+
base_event_id: str,
|
|
124
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
125
|
+
server_url: Optional[str] = None,
|
|
126
|
+
timeout_ms: Optional[int] = None,
|
|
127
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
128
|
+
) -> models.GetBaseEventResponse:
|
|
129
|
+
r"""Get a base event with its events and each event's contracts
|
|
130
|
+
|
|
131
|
+
:param base_event_id:
|
|
132
|
+
:param retries: Override the default retry configuration for this method
|
|
133
|
+
:param server_url: Override the default server URL for this method
|
|
134
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
135
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
136
|
+
"""
|
|
137
|
+
base_url = None
|
|
138
|
+
url_variables = None
|
|
139
|
+
if timeout_ms is None:
|
|
140
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
141
|
+
|
|
142
|
+
if timeout_ms is None:
|
|
143
|
+
timeout_ms = 30000
|
|
144
|
+
|
|
145
|
+
if server_url is not None:
|
|
146
|
+
base_url = server_url
|
|
147
|
+
else:
|
|
148
|
+
base_url = self._get_url(base_url, url_variables)
|
|
149
|
+
|
|
150
|
+
request = models.GetBaseEventRequest(
|
|
151
|
+
base_event_id=base_event_id,
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
req = self._build_request_async(
|
|
155
|
+
method="GET",
|
|
156
|
+
path="/v1/predictions/base-events/{baseEventId}",
|
|
157
|
+
base_url=base_url,
|
|
158
|
+
url_variables=url_variables,
|
|
159
|
+
request=request,
|
|
160
|
+
request_body_required=False,
|
|
161
|
+
request_has_path_params=True,
|
|
162
|
+
request_has_query_params=False,
|
|
163
|
+
user_agent_header="user-agent",
|
|
164
|
+
accept_header_value="application/json",
|
|
165
|
+
http_headers=http_headers,
|
|
166
|
+
allow_empty_value=None,
|
|
167
|
+
timeout_ms=timeout_ms,
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
if retries == UNSET:
|
|
171
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
172
|
+
retries = self.sdk_configuration.retry_config
|
|
173
|
+
else:
|
|
174
|
+
retries = utils.RetryConfig(
|
|
175
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
retry_config = None
|
|
179
|
+
if isinstance(retries, utils.RetryConfig):
|
|
180
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
181
|
+
|
|
182
|
+
http_res = await self.do_request_async(
|
|
183
|
+
hook_ctx=HookContext(
|
|
184
|
+
config=self.sdk_configuration,
|
|
185
|
+
base_url=base_url or "",
|
|
186
|
+
operation_id="getBaseEvent",
|
|
187
|
+
oauth2_scopes=None,
|
|
188
|
+
security_source=None,
|
|
189
|
+
tags=["Prediction Market Data"],
|
|
190
|
+
extensions=None,
|
|
191
|
+
),
|
|
192
|
+
request=req,
|
|
193
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
194
|
+
retry_config=retry_config,
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
response_data: Any = None
|
|
198
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
199
|
+
return models.GetBaseEventResponse(
|
|
200
|
+
object=unmarshal_json_response(
|
|
201
|
+
Optional[models.GetBaseEventResponseBody], http_res
|
|
202
|
+
),
|
|
203
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
204
|
+
)
|
|
205
|
+
if utils.match_response(http_res, ["400", "404"], "application/json"):
|
|
206
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
207
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
208
|
+
request=req, response=http_res
|
|
209
|
+
)
|
|
210
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
211
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
212
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
213
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
214
|
+
request=req, response=http_res
|
|
215
|
+
)
|
|
216
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
217
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
218
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
219
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
220
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
221
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
222
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
223
|
+
|
|
224
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
225
|
+
|
|
226
|
+
def list_categories(
|
|
227
|
+
self,
|
|
228
|
+
*,
|
|
229
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
230
|
+
server_url: Optional[str] = None,
|
|
231
|
+
timeout_ms: Optional[int] = None,
|
|
232
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
233
|
+
) -> models.ListCategoriesResponse:
|
|
234
|
+
r"""List prediction market categories
|
|
235
|
+
|
|
236
|
+
The category tree of every category with at least one ACTIVE contract, so each one finds something when passed to search as category. Each level is ordered by name. Read from the search index, which trails the catalogue by seconds.
|
|
237
|
+
|
|
238
|
+
:param retries: Override the default retry configuration for this method
|
|
239
|
+
:param server_url: Override the default server URL for this method
|
|
240
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
241
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
242
|
+
"""
|
|
243
|
+
base_url = None
|
|
244
|
+
url_variables = None
|
|
245
|
+
if timeout_ms is None:
|
|
246
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
247
|
+
|
|
248
|
+
if timeout_ms is None:
|
|
249
|
+
timeout_ms = 30000
|
|
250
|
+
|
|
251
|
+
if server_url is not None:
|
|
252
|
+
base_url = server_url
|
|
253
|
+
else:
|
|
254
|
+
base_url = self._get_url(base_url, url_variables)
|
|
255
|
+
req = self._build_request(
|
|
256
|
+
method="GET",
|
|
257
|
+
path="/v1/predictions/categories",
|
|
258
|
+
base_url=base_url,
|
|
259
|
+
url_variables=url_variables,
|
|
260
|
+
request=None,
|
|
261
|
+
request_body_required=False,
|
|
262
|
+
request_has_path_params=False,
|
|
263
|
+
request_has_query_params=False,
|
|
264
|
+
user_agent_header="user-agent",
|
|
265
|
+
accept_header_value="application/json",
|
|
266
|
+
http_headers=http_headers,
|
|
267
|
+
allow_empty_value=None,
|
|
268
|
+
timeout_ms=timeout_ms,
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
if retries == UNSET:
|
|
272
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
273
|
+
retries = self.sdk_configuration.retry_config
|
|
274
|
+
else:
|
|
275
|
+
retries = utils.RetryConfig(
|
|
276
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
retry_config = None
|
|
280
|
+
if isinstance(retries, utils.RetryConfig):
|
|
281
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
282
|
+
|
|
283
|
+
http_res = self.do_request(
|
|
284
|
+
hook_ctx=HookContext(
|
|
285
|
+
config=self.sdk_configuration,
|
|
286
|
+
base_url=base_url or "",
|
|
287
|
+
operation_id="listCategories",
|
|
288
|
+
oauth2_scopes=None,
|
|
289
|
+
security_source=None,
|
|
290
|
+
tags=["Prediction Market Data"],
|
|
291
|
+
extensions=None,
|
|
292
|
+
),
|
|
293
|
+
request=req,
|
|
294
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
295
|
+
retry_config=retry_config,
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
response_data: Any = None
|
|
299
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
300
|
+
return models.ListCategoriesResponse(
|
|
301
|
+
object=unmarshal_json_response(
|
|
302
|
+
Optional[models.ListCategoriesResponseBody], http_res
|
|
303
|
+
),
|
|
304
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
305
|
+
)
|
|
306
|
+
if utils.match_response(http_res, "502", "application/json"):
|
|
307
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
308
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
309
|
+
request=req, response=http_res
|
|
310
|
+
)
|
|
311
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
312
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
313
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
314
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
315
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
316
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
317
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
318
|
+
|
|
319
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
320
|
+
|
|
321
|
+
async def list_categories_async(
|
|
322
|
+
self,
|
|
323
|
+
*,
|
|
324
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
325
|
+
server_url: Optional[str] = None,
|
|
326
|
+
timeout_ms: Optional[int] = None,
|
|
327
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
328
|
+
) -> models.ListCategoriesResponse:
|
|
329
|
+
r"""List prediction market categories
|
|
330
|
+
|
|
331
|
+
The category tree of every category with at least one ACTIVE contract, so each one finds something when passed to search as category. Each level is ordered by name. Read from the search index, which trails the catalogue by seconds.
|
|
332
|
+
|
|
333
|
+
:param retries: Override the default retry configuration for this method
|
|
334
|
+
:param server_url: Override the default server URL for this method
|
|
335
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
336
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
337
|
+
"""
|
|
338
|
+
base_url = None
|
|
339
|
+
url_variables = None
|
|
340
|
+
if timeout_ms is None:
|
|
341
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
342
|
+
|
|
343
|
+
if timeout_ms is None:
|
|
344
|
+
timeout_ms = 30000
|
|
345
|
+
|
|
346
|
+
if server_url is not None:
|
|
347
|
+
base_url = server_url
|
|
348
|
+
else:
|
|
349
|
+
base_url = self._get_url(base_url, url_variables)
|
|
350
|
+
req = self._build_request_async(
|
|
351
|
+
method="GET",
|
|
352
|
+
path="/v1/predictions/categories",
|
|
353
|
+
base_url=base_url,
|
|
354
|
+
url_variables=url_variables,
|
|
355
|
+
request=None,
|
|
356
|
+
request_body_required=False,
|
|
357
|
+
request_has_path_params=False,
|
|
358
|
+
request_has_query_params=False,
|
|
359
|
+
user_agent_header="user-agent",
|
|
360
|
+
accept_header_value="application/json",
|
|
361
|
+
http_headers=http_headers,
|
|
362
|
+
allow_empty_value=None,
|
|
363
|
+
timeout_ms=timeout_ms,
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
if retries == UNSET:
|
|
367
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
368
|
+
retries = self.sdk_configuration.retry_config
|
|
369
|
+
else:
|
|
370
|
+
retries = utils.RetryConfig(
|
|
371
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
retry_config = None
|
|
375
|
+
if isinstance(retries, utils.RetryConfig):
|
|
376
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
377
|
+
|
|
378
|
+
http_res = await self.do_request_async(
|
|
379
|
+
hook_ctx=HookContext(
|
|
380
|
+
config=self.sdk_configuration,
|
|
381
|
+
base_url=base_url or "",
|
|
382
|
+
operation_id="listCategories",
|
|
383
|
+
oauth2_scopes=None,
|
|
384
|
+
security_source=None,
|
|
385
|
+
tags=["Prediction Market Data"],
|
|
386
|
+
extensions=None,
|
|
387
|
+
),
|
|
388
|
+
request=req,
|
|
389
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
390
|
+
retry_config=retry_config,
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
response_data: Any = None
|
|
394
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
395
|
+
return models.ListCategoriesResponse(
|
|
396
|
+
object=unmarshal_json_response(
|
|
397
|
+
Optional[models.ListCategoriesResponseBody], http_res
|
|
398
|
+
),
|
|
399
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
400
|
+
)
|
|
401
|
+
if utils.match_response(http_res, "502", "application/json"):
|
|
402
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
403
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
404
|
+
request=req, response=http_res
|
|
405
|
+
)
|
|
406
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
407
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
408
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
409
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
410
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
411
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
412
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
413
|
+
|
|
414
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
415
|
+
|
|
416
|
+
def get_event_contracts(
|
|
417
|
+
self,
|
|
418
|
+
*,
|
|
419
|
+
event_id: str,
|
|
420
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
421
|
+
server_url: Optional[str] = None,
|
|
422
|
+
timeout_ms: Optional[int] = None,
|
|
423
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
424
|
+
) -> models.GetEventContractsResponse:
|
|
425
|
+
r"""Get an event and all contracts under it
|
|
426
|
+
|
|
427
|
+
:param event_id:
|
|
428
|
+
:param retries: Override the default retry configuration for this method
|
|
429
|
+
:param server_url: Override the default server URL for this method
|
|
430
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
431
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
432
|
+
"""
|
|
433
|
+
base_url = None
|
|
434
|
+
url_variables = None
|
|
435
|
+
if timeout_ms is None:
|
|
436
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
437
|
+
|
|
438
|
+
if timeout_ms is None:
|
|
439
|
+
timeout_ms = 30000
|
|
440
|
+
|
|
441
|
+
if server_url is not None:
|
|
442
|
+
base_url = server_url
|
|
443
|
+
else:
|
|
444
|
+
base_url = self._get_url(base_url, url_variables)
|
|
445
|
+
|
|
446
|
+
request = models.GetEventContractsRequest(
|
|
447
|
+
event_id=event_id,
|
|
448
|
+
)
|
|
449
|
+
|
|
450
|
+
req = self._build_request(
|
|
451
|
+
method="GET",
|
|
452
|
+
path="/v1/predictions/events/{eventId}/contracts",
|
|
453
|
+
base_url=base_url,
|
|
454
|
+
url_variables=url_variables,
|
|
455
|
+
request=request,
|
|
456
|
+
request_body_required=False,
|
|
457
|
+
request_has_path_params=True,
|
|
458
|
+
request_has_query_params=False,
|
|
459
|
+
user_agent_header="user-agent",
|
|
460
|
+
accept_header_value="application/json",
|
|
461
|
+
http_headers=http_headers,
|
|
462
|
+
allow_empty_value=None,
|
|
463
|
+
timeout_ms=timeout_ms,
|
|
464
|
+
)
|
|
465
|
+
|
|
466
|
+
if retries == UNSET:
|
|
467
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
468
|
+
retries = self.sdk_configuration.retry_config
|
|
469
|
+
else:
|
|
470
|
+
retries = utils.RetryConfig(
|
|
471
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
472
|
+
)
|
|
473
|
+
|
|
474
|
+
retry_config = None
|
|
475
|
+
if isinstance(retries, utils.RetryConfig):
|
|
476
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
477
|
+
|
|
478
|
+
http_res = self.do_request(
|
|
479
|
+
hook_ctx=HookContext(
|
|
480
|
+
config=self.sdk_configuration,
|
|
481
|
+
base_url=base_url or "",
|
|
482
|
+
operation_id="getEventContracts",
|
|
483
|
+
oauth2_scopes=None,
|
|
484
|
+
security_source=None,
|
|
485
|
+
tags=["Prediction Market Data"],
|
|
486
|
+
extensions=None,
|
|
487
|
+
),
|
|
488
|
+
request=req,
|
|
489
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
490
|
+
retry_config=retry_config,
|
|
491
|
+
)
|
|
492
|
+
|
|
493
|
+
response_data: Any = None
|
|
494
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
495
|
+
return models.GetEventContractsResponse(
|
|
496
|
+
object=unmarshal_json_response(
|
|
497
|
+
Optional[models.GetEventContractsResponseBody], http_res
|
|
498
|
+
),
|
|
499
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
500
|
+
)
|
|
501
|
+
if utils.match_response(http_res, ["400", "404"], "application/json"):
|
|
502
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
503
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
504
|
+
request=req, response=http_res
|
|
505
|
+
)
|
|
506
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
507
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
508
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
509
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
510
|
+
request=req, response=http_res
|
|
511
|
+
)
|
|
512
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
513
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
514
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
515
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
516
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
517
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
518
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
519
|
+
|
|
520
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
521
|
+
|
|
522
|
+
async def get_event_contracts_async(
|
|
523
|
+
self,
|
|
524
|
+
*,
|
|
525
|
+
event_id: str,
|
|
526
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
527
|
+
server_url: Optional[str] = None,
|
|
528
|
+
timeout_ms: Optional[int] = None,
|
|
529
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
530
|
+
) -> models.GetEventContractsResponse:
|
|
531
|
+
r"""Get an event and all contracts under it
|
|
532
|
+
|
|
533
|
+
:param event_id:
|
|
534
|
+
:param retries: Override the default retry configuration for this method
|
|
535
|
+
:param server_url: Override the default server URL for this method
|
|
536
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
537
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
538
|
+
"""
|
|
539
|
+
base_url = None
|
|
540
|
+
url_variables = None
|
|
541
|
+
if timeout_ms is None:
|
|
542
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
543
|
+
|
|
544
|
+
if timeout_ms is None:
|
|
545
|
+
timeout_ms = 30000
|
|
546
|
+
|
|
547
|
+
if server_url is not None:
|
|
548
|
+
base_url = server_url
|
|
549
|
+
else:
|
|
550
|
+
base_url = self._get_url(base_url, url_variables)
|
|
551
|
+
|
|
552
|
+
request = models.GetEventContractsRequest(
|
|
553
|
+
event_id=event_id,
|
|
554
|
+
)
|
|
555
|
+
|
|
556
|
+
req = self._build_request_async(
|
|
557
|
+
method="GET",
|
|
558
|
+
path="/v1/predictions/events/{eventId}/contracts",
|
|
559
|
+
base_url=base_url,
|
|
560
|
+
url_variables=url_variables,
|
|
561
|
+
request=request,
|
|
562
|
+
request_body_required=False,
|
|
563
|
+
request_has_path_params=True,
|
|
564
|
+
request_has_query_params=False,
|
|
565
|
+
user_agent_header="user-agent",
|
|
566
|
+
accept_header_value="application/json",
|
|
567
|
+
http_headers=http_headers,
|
|
568
|
+
allow_empty_value=None,
|
|
569
|
+
timeout_ms=timeout_ms,
|
|
570
|
+
)
|
|
571
|
+
|
|
572
|
+
if retries == UNSET:
|
|
573
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
574
|
+
retries = self.sdk_configuration.retry_config
|
|
575
|
+
else:
|
|
576
|
+
retries = utils.RetryConfig(
|
|
577
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
578
|
+
)
|
|
579
|
+
|
|
580
|
+
retry_config = None
|
|
581
|
+
if isinstance(retries, utils.RetryConfig):
|
|
582
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
583
|
+
|
|
584
|
+
http_res = await self.do_request_async(
|
|
585
|
+
hook_ctx=HookContext(
|
|
586
|
+
config=self.sdk_configuration,
|
|
587
|
+
base_url=base_url or "",
|
|
588
|
+
operation_id="getEventContracts",
|
|
589
|
+
oauth2_scopes=None,
|
|
590
|
+
security_source=None,
|
|
591
|
+
tags=["Prediction Market Data"],
|
|
592
|
+
extensions=None,
|
|
593
|
+
),
|
|
594
|
+
request=req,
|
|
595
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
596
|
+
retry_config=retry_config,
|
|
597
|
+
)
|
|
598
|
+
|
|
599
|
+
response_data: Any = None
|
|
600
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
601
|
+
return models.GetEventContractsResponse(
|
|
602
|
+
object=unmarshal_json_response(
|
|
603
|
+
Optional[models.GetEventContractsResponseBody], http_res
|
|
604
|
+
),
|
|
605
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
606
|
+
)
|
|
607
|
+
if utils.match_response(http_res, ["400", "404"], "application/json"):
|
|
608
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
609
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
610
|
+
request=req, response=http_res
|
|
611
|
+
)
|
|
612
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
613
|
+
if utils.match_response(http_res, "500", "application/json"):
|
|
614
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
615
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
616
|
+
request=req, response=http_res
|
|
617
|
+
)
|
|
618
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
619
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
620
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
621
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
622
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
623
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
624
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
625
|
+
|
|
626
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
627
|
+
|
|
628
|
+
def search(
|
|
629
|
+
self,
|
|
630
|
+
*,
|
|
631
|
+
type_: Optional[models.SearchType] = models.SearchType.CONTRACTS,
|
|
632
|
+
q: Optional[str] = None,
|
|
633
|
+
state: Optional[str] = None,
|
|
634
|
+
base_event_id: Optional[str] = None,
|
|
635
|
+
event_id: Optional[str] = None,
|
|
636
|
+
category: Optional[str] = None,
|
|
637
|
+
tradable: Optional[bool] = None,
|
|
638
|
+
page: Optional[int] = None,
|
|
639
|
+
per_page: Optional[int] = None,
|
|
640
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
641
|
+
server_url: Optional[str] = None,
|
|
642
|
+
timeout_ms: Optional[int] = None,
|
|
643
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
644
|
+
) -> Optional[models.SearchResponse]:
|
|
645
|
+
r"""Search contracts, events or base events
|
|
646
|
+
|
|
647
|
+
Full-text search over one index of event contracts. Filters always apply to contracts, so with type=events or type=base-events an event or base event is found through its matching contracts: one with none (for example, only DELETED contracts under the default state) is not returned. The index trails the catalogue by seconds.
|
|
648
|
+
|
|
649
|
+
:param type: Level hits come back at. `contracts` (default) returns matching contracts; `events` returns one hit per event and `base-events` one per base event, each ranked by its best-matching contract and carrying only its own fields and a count of matching contracts. Echoed in the response.
|
|
650
|
+
:param q: Full-text query over symbols, questions, event names and base-event specifications. Symbols split on _, - and . so `BPM 0822` finds `BPM_0822_1750`. Omit to browse, soonest last-trade date first.
|
|
651
|
+
:param state: Contract state. Omitted means ACTIVE; `*` matches every state, including DELETED.
|
|
652
|
+
:param base_event_id: Only contracts under this base event.
|
|
653
|
+
:param event_id: Only contracts under this event.
|
|
654
|
+
:param category: Only contracts in this category or any category under it. Takes a `path` from List Categories, URL-encoded. A bare level name such as `United States` matches nothing, because level names repeat under different parents.
|
|
655
|
+
:param tradable: Only tradable (true) or non-tradable (false) contracts.
|
|
656
|
+
:param page: 1-based page number; 0 or omitted means 1.
|
|
657
|
+
:param per_page: Hits per page, counting whatever type returns; 0 or omitted means 20, values above 100 are clamped to 100.
|
|
658
|
+
:param retries: Override the default retry configuration for this method
|
|
659
|
+
:param server_url: Override the default server URL for this method
|
|
660
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
661
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
662
|
+
"""
|
|
663
|
+
base_url = None
|
|
664
|
+
url_variables = None
|
|
665
|
+
if timeout_ms is None:
|
|
666
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
667
|
+
|
|
668
|
+
if timeout_ms is None:
|
|
669
|
+
timeout_ms = 30000
|
|
670
|
+
|
|
671
|
+
if server_url is not None:
|
|
672
|
+
base_url = server_url
|
|
673
|
+
else:
|
|
674
|
+
base_url = self._get_url(base_url, url_variables)
|
|
675
|
+
|
|
676
|
+
request = models.SearchRequest(
|
|
677
|
+
type=type_,
|
|
678
|
+
q=q,
|
|
679
|
+
state=state,
|
|
680
|
+
base_event_id=base_event_id,
|
|
681
|
+
event_id=event_id,
|
|
682
|
+
category=category,
|
|
683
|
+
tradable=tradable,
|
|
684
|
+
page=page,
|
|
685
|
+
per_page=per_page,
|
|
686
|
+
)
|
|
687
|
+
|
|
688
|
+
req = self._build_request(
|
|
689
|
+
method="GET",
|
|
690
|
+
path="/v1/predictions/search",
|
|
691
|
+
base_url=base_url,
|
|
692
|
+
url_variables=url_variables,
|
|
693
|
+
request=request,
|
|
694
|
+
request_body_required=False,
|
|
695
|
+
request_has_path_params=False,
|
|
696
|
+
request_has_query_params=True,
|
|
697
|
+
user_agent_header="user-agent",
|
|
698
|
+
accept_header_value="application/json",
|
|
699
|
+
http_headers=http_headers,
|
|
700
|
+
allow_empty_value=None,
|
|
701
|
+
timeout_ms=timeout_ms,
|
|
702
|
+
)
|
|
703
|
+
|
|
704
|
+
if retries == UNSET:
|
|
705
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
706
|
+
retries = self.sdk_configuration.retry_config
|
|
707
|
+
else:
|
|
708
|
+
retries = utils.RetryConfig(
|
|
709
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
710
|
+
)
|
|
711
|
+
|
|
712
|
+
retry_config = None
|
|
713
|
+
if isinstance(retries, utils.RetryConfig):
|
|
714
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
715
|
+
|
|
716
|
+
http_res = self.do_request(
|
|
717
|
+
hook_ctx=HookContext(
|
|
718
|
+
config=self.sdk_configuration,
|
|
719
|
+
base_url=base_url or "",
|
|
720
|
+
operation_id="search",
|
|
721
|
+
oauth2_scopes=None,
|
|
722
|
+
security_source=None,
|
|
723
|
+
tags=["Prediction Market Data"],
|
|
724
|
+
extensions=None,
|
|
725
|
+
),
|
|
726
|
+
request=req,
|
|
727
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
728
|
+
retry_config=retry_config,
|
|
729
|
+
)
|
|
730
|
+
|
|
731
|
+
def next_func() -> Optional[models.SearchResponse]:
|
|
732
|
+
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
|
|
733
|
+
page = request.page if isinstance(request.page, int) else 1
|
|
734
|
+
next_page = page + 1
|
|
735
|
+
|
|
736
|
+
if not http_res.text:
|
|
737
|
+
return None
|
|
738
|
+
results = JSONPath("$.data.hits").parse(body)
|
|
739
|
+
if len(results) == 0 or len(results[0]) == 0:
|
|
740
|
+
return None
|
|
741
|
+
limit_ = request.per_page if isinstance(request.per_page, int) else 0
|
|
742
|
+
if len(results[0]) < limit_:
|
|
743
|
+
return None
|
|
744
|
+
|
|
745
|
+
return self.search(
|
|
746
|
+
type_=type_,
|
|
747
|
+
q=q,
|
|
748
|
+
state=state,
|
|
749
|
+
base_event_id=base_event_id,
|
|
750
|
+
event_id=event_id,
|
|
751
|
+
category=category,
|
|
752
|
+
tradable=tradable,
|
|
753
|
+
page=next_page,
|
|
754
|
+
per_page=per_page,
|
|
755
|
+
retries=retries,
|
|
756
|
+
server_url=server_url,
|
|
757
|
+
timeout_ms=timeout_ms,
|
|
758
|
+
http_headers=http_headers,
|
|
759
|
+
)
|
|
760
|
+
|
|
761
|
+
response_data: Any = None
|
|
762
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
763
|
+
return models.SearchResponse(
|
|
764
|
+
object=unmarshal_json_response(
|
|
765
|
+
Optional[models.SearchResponseBody], http_res
|
|
766
|
+
),
|
|
767
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
768
|
+
next=next_func,
|
|
769
|
+
)
|
|
770
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
771
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
772
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
773
|
+
request=req, response=http_res
|
|
774
|
+
)
|
|
775
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
776
|
+
if utils.match_response(http_res, "502", "application/json"):
|
|
777
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
778
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
779
|
+
request=req, response=http_res
|
|
780
|
+
)
|
|
781
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
782
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
783
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
784
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
785
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
786
|
+
http_res_text = utils.stream_to_text(http_res)
|
|
787
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
788
|
+
|
|
789
|
+
raise errors.APIError("Unexpected response received", http_res)
|
|
790
|
+
|
|
791
|
+
async def search_async(
|
|
792
|
+
self,
|
|
793
|
+
*,
|
|
794
|
+
type_: Optional[models.SearchType] = models.SearchType.CONTRACTS,
|
|
795
|
+
q: Optional[str] = None,
|
|
796
|
+
state: Optional[str] = None,
|
|
797
|
+
base_event_id: Optional[str] = None,
|
|
798
|
+
event_id: Optional[str] = None,
|
|
799
|
+
category: Optional[str] = None,
|
|
800
|
+
tradable: Optional[bool] = None,
|
|
801
|
+
page: Optional[int] = None,
|
|
802
|
+
per_page: Optional[int] = None,
|
|
803
|
+
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
804
|
+
server_url: Optional[str] = None,
|
|
805
|
+
timeout_ms: Optional[int] = None,
|
|
806
|
+
http_headers: Optional[Mapping[str, str]] = None,
|
|
807
|
+
) -> Optional[models.SearchResponse]:
|
|
808
|
+
r"""Search contracts, events or base events
|
|
809
|
+
|
|
810
|
+
Full-text search over one index of event contracts. Filters always apply to contracts, so with type=events or type=base-events an event or base event is found through its matching contracts: one with none (for example, only DELETED contracts under the default state) is not returned. The index trails the catalogue by seconds.
|
|
811
|
+
|
|
812
|
+
:param type: Level hits come back at. `contracts` (default) returns matching contracts; `events` returns one hit per event and `base-events` one per base event, each ranked by its best-matching contract and carrying only its own fields and a count of matching contracts. Echoed in the response.
|
|
813
|
+
:param q: Full-text query over symbols, questions, event names and base-event specifications. Symbols split on _, - and . so `BPM 0822` finds `BPM_0822_1750`. Omit to browse, soonest last-trade date first.
|
|
814
|
+
:param state: Contract state. Omitted means ACTIVE; `*` matches every state, including DELETED.
|
|
815
|
+
:param base_event_id: Only contracts under this base event.
|
|
816
|
+
:param event_id: Only contracts under this event.
|
|
817
|
+
:param category: Only contracts in this category or any category under it. Takes a `path` from List Categories, URL-encoded. A bare level name such as `United States` matches nothing, because level names repeat under different parents.
|
|
818
|
+
:param tradable: Only tradable (true) or non-tradable (false) contracts.
|
|
819
|
+
:param page: 1-based page number; 0 or omitted means 1.
|
|
820
|
+
:param per_page: Hits per page, counting whatever type returns; 0 or omitted means 20, values above 100 are clamped to 100.
|
|
821
|
+
:param retries: Override the default retry configuration for this method
|
|
822
|
+
:param server_url: Override the default server URL for this method
|
|
823
|
+
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
824
|
+
:param http_headers: Additional headers to set or replace on requests.
|
|
825
|
+
"""
|
|
826
|
+
base_url = None
|
|
827
|
+
url_variables = None
|
|
828
|
+
if timeout_ms is None:
|
|
829
|
+
timeout_ms = self.sdk_configuration.timeout_ms
|
|
830
|
+
|
|
831
|
+
if timeout_ms is None:
|
|
832
|
+
timeout_ms = 30000
|
|
833
|
+
|
|
834
|
+
if server_url is not None:
|
|
835
|
+
base_url = server_url
|
|
836
|
+
else:
|
|
837
|
+
base_url = self._get_url(base_url, url_variables)
|
|
838
|
+
|
|
839
|
+
request = models.SearchRequest(
|
|
840
|
+
type=type_,
|
|
841
|
+
q=q,
|
|
842
|
+
state=state,
|
|
843
|
+
base_event_id=base_event_id,
|
|
844
|
+
event_id=event_id,
|
|
845
|
+
category=category,
|
|
846
|
+
tradable=tradable,
|
|
847
|
+
page=page,
|
|
848
|
+
per_page=per_page,
|
|
849
|
+
)
|
|
850
|
+
|
|
851
|
+
req = self._build_request_async(
|
|
852
|
+
method="GET",
|
|
853
|
+
path="/v1/predictions/search",
|
|
854
|
+
base_url=base_url,
|
|
855
|
+
url_variables=url_variables,
|
|
856
|
+
request=request,
|
|
857
|
+
request_body_required=False,
|
|
858
|
+
request_has_path_params=False,
|
|
859
|
+
request_has_query_params=True,
|
|
860
|
+
user_agent_header="user-agent",
|
|
861
|
+
accept_header_value="application/json",
|
|
862
|
+
http_headers=http_headers,
|
|
863
|
+
allow_empty_value=None,
|
|
864
|
+
timeout_ms=timeout_ms,
|
|
865
|
+
)
|
|
866
|
+
|
|
867
|
+
if retries == UNSET:
|
|
868
|
+
if self.sdk_configuration.retry_config is not UNSET:
|
|
869
|
+
retries = self.sdk_configuration.retry_config
|
|
870
|
+
else:
|
|
871
|
+
retries = utils.RetryConfig(
|
|
872
|
+
"backoff", utils.BackoffStrategy(500, 8000, 1.5, 60000), True
|
|
873
|
+
)
|
|
874
|
+
|
|
875
|
+
retry_config = None
|
|
876
|
+
if isinstance(retries, utils.RetryConfig):
|
|
877
|
+
retry_config = (retries, ["429", "500", "502", "503", "504"])
|
|
878
|
+
|
|
879
|
+
http_res = await self.do_request_async(
|
|
880
|
+
hook_ctx=HookContext(
|
|
881
|
+
config=self.sdk_configuration,
|
|
882
|
+
base_url=base_url or "",
|
|
883
|
+
operation_id="search",
|
|
884
|
+
oauth2_scopes=None,
|
|
885
|
+
security_source=None,
|
|
886
|
+
tags=["Prediction Market Data"],
|
|
887
|
+
extensions=None,
|
|
888
|
+
),
|
|
889
|
+
request=req,
|
|
890
|
+
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
891
|
+
retry_config=retry_config,
|
|
892
|
+
)
|
|
893
|
+
|
|
894
|
+
def next_func() -> Optional[models.SearchResponse]:
|
|
895
|
+
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
|
|
896
|
+
page = request.page if isinstance(request.page, int) else 1
|
|
897
|
+
next_page = page + 1
|
|
898
|
+
|
|
899
|
+
if not http_res.text:
|
|
900
|
+
return None
|
|
901
|
+
results = JSONPath("$.data.hits").parse(body)
|
|
902
|
+
if len(results) == 0 or len(results[0]) == 0:
|
|
903
|
+
return None
|
|
904
|
+
limit_ = request.per_page if isinstance(request.per_page, int) else 0
|
|
905
|
+
if len(results[0]) < limit_:
|
|
906
|
+
return None
|
|
907
|
+
|
|
908
|
+
return self.search(
|
|
909
|
+
type_=type_,
|
|
910
|
+
q=q,
|
|
911
|
+
state=state,
|
|
912
|
+
base_event_id=base_event_id,
|
|
913
|
+
event_id=event_id,
|
|
914
|
+
category=category,
|
|
915
|
+
tradable=tradable,
|
|
916
|
+
page=next_page,
|
|
917
|
+
per_page=per_page,
|
|
918
|
+
retries=retries,
|
|
919
|
+
server_url=server_url,
|
|
920
|
+
timeout_ms=timeout_ms,
|
|
921
|
+
http_headers=http_headers,
|
|
922
|
+
)
|
|
923
|
+
|
|
924
|
+
response_data: Any = None
|
|
925
|
+
if utils.match_response(http_res, "200", "application/json"):
|
|
926
|
+
return models.SearchResponse(
|
|
927
|
+
object=unmarshal_json_response(
|
|
928
|
+
Optional[models.SearchResponseBody], http_res
|
|
929
|
+
),
|
|
930
|
+
http_meta=models.HTTPMetadata(request=req, response=http_res),
|
|
931
|
+
next=next_func,
|
|
932
|
+
)
|
|
933
|
+
if utils.match_response(http_res, "400", "application/json"):
|
|
934
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
935
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
936
|
+
request=req, response=http_res
|
|
937
|
+
)
|
|
938
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
939
|
+
if utils.match_response(http_res, "502", "application/json"):
|
|
940
|
+
response_data = unmarshal_json_response(errors.ErrorEnvelopeData, http_res)
|
|
941
|
+
response_data.http_meta = models.HTTPMetadata(
|
|
942
|
+
request=req, response=http_res
|
|
943
|
+
)
|
|
944
|
+
raise errors.ErrorEnvelope(response_data, http_res)
|
|
945
|
+
if utils.match_response(http_res, "4XX", "*"):
|
|
946
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
947
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
948
|
+
if utils.match_response(http_res, "5XX", "*"):
|
|
949
|
+
http_res_text = await utils.stream_to_text_async(http_res)
|
|
950
|
+
raise errors.APIError("API error occurred", http_res, http_res_text)
|
|
951
|
+
|
|
952
|
+
raise errors.APIError("Unexpected response received", http_res)
|