eulerpool 1.0.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.
Files changed (64) hide show
  1. eulerpool/__init__.py +281 -0
  2. eulerpool/_client.py +250 -0
  3. eulerpool/_version.py +3 -0
  4. eulerpool/errors.py +46 -0
  5. eulerpool/py.typed +0 -0
  6. eulerpool/resources/__init__.py +0 -0
  7. eulerpool/resources/_base.py +34 -0
  8. eulerpool/resources/aaq.py +18 -0
  9. eulerpool/resources/alternative.py +116 -0
  10. eulerpool/resources/analytics.py +50 -0
  11. eulerpool/resources/backtest.py +66 -0
  12. eulerpool/resources/bonds.py +36 -0
  13. eulerpool/resources/calendar.py +78 -0
  14. eulerpool/resources/certificates.py +30 -0
  15. eulerpool/resources/charting.py +42 -0
  16. eulerpool/resources/commodity.py +64 -0
  17. eulerpool/resources/crypto.py +30 -0
  18. eulerpool/resources/crypto_extended.py +246 -0
  19. eulerpool/resources/data.py +24 -0
  20. eulerpool/resources/datasets.py +100 -0
  21. eulerpool/resources/deals.py +28 -0
  22. eulerpool/resources/derivatives.py +68 -0
  23. eulerpool/resources/dex.py +54 -0
  24. eulerpool/resources/earning_calls.py +24 -0
  25. eulerpool/resources/ecb.py +34 -0
  26. eulerpool/resources/economic_forecasts.py +28 -0
  27. eulerpool/resources/energy.py +94 -0
  28. eulerpool/resources/equity.py +420 -0
  29. eulerpool/resources/equity_extended.py +150 -0
  30. eulerpool/resources/etf.py +60 -0
  31. eulerpool/resources/fair_value.py +18 -0
  32. eulerpool/resources/fixed_income.py +46 -0
  33. eulerpool/resources/forex.py +24 -0
  34. eulerpool/resources/fundamentals.py +60 -0
  35. eulerpool/resources/funds.py +32 -0
  36. eulerpool/resources/government.py +42 -0
  37. eulerpool/resources/ice_swap.py +18 -0
  38. eulerpool/resources/index.py +34 -0
  39. eulerpool/resources/institutional.py +60 -0
  40. eulerpool/resources/interest_rates.py +34 -0
  41. eulerpool/resources/macro.py +156 -0
  42. eulerpool/resources/market.py +214 -0
  43. eulerpool/resources/mutual_fund.py +42 -0
  44. eulerpool/resources/news.py +18 -0
  45. eulerpool/resources/nft.py +42 -0
  46. eulerpool/resources/partner.py +18 -0
  47. eulerpool/resources/patents.py +24 -0
  48. eulerpool/resources/peer_comparison.py +58 -0
  49. eulerpool/resources/portfolio.py +96 -0
  50. eulerpool/resources/portfolio_risk.py +58 -0
  51. eulerpool/resources/private_markets.py +24 -0
  52. eulerpool/resources/research.py +30 -0
  53. eulerpool/resources/risk_models.py +52 -0
  54. eulerpool/resources/screener.py +46 -0
  55. eulerpool/resources/sentiment.py +60 -0
  56. eulerpool/resources/shipping.py +58 -0
  57. eulerpool/resources/singapore.py +82 -0
  58. eulerpool/resources/transcripts.py +40 -0
  59. eulerpool/resources/trends.py +18 -0
  60. eulerpool/resources/vendor.py +28 -0
  61. eulerpool-1.0.0.dist-info/METADATA +146 -0
  62. eulerpool-1.0.0.dist-info/RECORD +64 -0
  63. eulerpool-1.0.0.dist-info/WHEEL +4 -0
  64. eulerpool-1.0.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,116 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Optional
4
+ from urllib.parse import quote
5
+
6
+ from ._base import AsyncResource, SyncResource
7
+
8
+
9
+ class Alternative(SyncResource):
10
+ def congress_trading(self, **params: Any) -> Any:
11
+ """Congress Trading API"""
12
+ return self._get("/alternative/congress-trading", params)
13
+ def cot(self, symbol: str, **params: Any) -> Any:
14
+ """Commitments of Traders (COT) API"""
15
+ return self._get(f"/alternative/cot/{quote(str(symbol))}", params)
16
+ def datasets(self, datasetId: Optional[str] = None, **params: Any) -> Any:
17
+ """Get External Dataset"""
18
+ if datasetId is not None:
19
+ return self._get(f"/alternative/datasets/{quote(str(datasetId))}", params)
20
+ return self._get("/alternative/datasets", params)
21
+ def fear_and_greed(self, **params: Any) -> Any:
22
+ """Fear & Greed Index API"""
23
+ return self._get("/alternative/fear-and-greed", params)
24
+ def google_trends(self, ticker: str, **params: Any) -> Any:
25
+ """Google Trends API"""
26
+ return self._get(f"/alternative/google-trends/{quote(str(ticker))}", params)
27
+ def ingest(self, body: Any = None, **params: Any) -> Any:
28
+ """Ingest External Dataset"""
29
+ if body is None and params:
30
+ body, params = params, None
31
+ elif isinstance(body, dict) and params:
32
+ body = {**body, **params}
33
+ params = None
34
+ return self._post("/alternative/ingest", body, params)
35
+ def investment_themes(self, **params: Any) -> Any:
36
+ """Investment Themes API"""
37
+ return self._get("/alternative/investment-themes", params)
38
+ def reddit_mentions(self, ticker: str, **params: Any) -> Any:
39
+ """Reddit Stock Mentions API"""
40
+ return self._get(f"/alternative/reddit-mentions/{quote(str(ticker))}", params)
41
+ def social_mentions(self, ticker: str, **params: Any) -> Any:
42
+ """Social Mentions History"""
43
+ return self._get(f"/alternative/social-mentions/{quote(str(ticker))}", params)
44
+ def stocktwits(self, ticker: str, **params: Any) -> Any:
45
+ """StockTwits Sentiment API"""
46
+ return self._get(f"/alternative/stocktwits/{quote(str(ticker))}", params)
47
+ def superinvestors_holdings(self, slug: str, **params: Any) -> Any:
48
+ """Superinvestor Holdings API"""
49
+ return self._get(f"/alternative/superinvestors/holdings/{quote(str(slug))}", params)
50
+ def superinvestors_list(self, **params: Any) -> Any:
51
+ """Superinvestors List API"""
52
+ return self._get("/alternative/superinvestors/list", params)
53
+ def superinvestors_recent_activity(self, **params: Any) -> Any:
54
+ """Superinvestor Recent Activity API"""
55
+ return self._get("/alternative/superinvestors/recent-activity", params)
56
+ def superinvestors_top_holdings(self, **params: Any) -> Any:
57
+ """Superinvestor Top Holdings API"""
58
+ return self._get("/alternative/superinvestors/top-holdings", params)
59
+ def wikipedia_pageviews(self, ticker: str, **params: Any) -> Any:
60
+ """Wikipedia Pageviews API"""
61
+ return self._get(f"/alternative/wikipedia-pageviews/{quote(str(ticker))}", params)
62
+
63
+
64
+ class AsyncAlternative(AsyncResource):
65
+ async def congress_trading(self, **params: Any) -> Any:
66
+ """Congress Trading API"""
67
+ return await self._get("/alternative/congress-trading", params)
68
+ async def cot(self, symbol: str, **params: Any) -> Any:
69
+ """Commitments of Traders (COT) API"""
70
+ return await self._get(f"/alternative/cot/{quote(str(symbol))}", params)
71
+ async def datasets(self, datasetId: Optional[str] = None, **params: Any) -> Any:
72
+ """Get External Dataset"""
73
+ if datasetId is not None:
74
+ return await self._get(f"/alternative/datasets/{quote(str(datasetId))}", params)
75
+ return await self._get("/alternative/datasets", params)
76
+ async def fear_and_greed(self, **params: Any) -> Any:
77
+ """Fear & Greed Index API"""
78
+ return await self._get("/alternative/fear-and-greed", params)
79
+ async def google_trends(self, ticker: str, **params: Any) -> Any:
80
+ """Google Trends API"""
81
+ return await self._get(f"/alternative/google-trends/{quote(str(ticker))}", params)
82
+ async def ingest(self, body: Any = None, **params: Any) -> Any:
83
+ """Ingest External Dataset"""
84
+ if body is None and params:
85
+ body, params = params, None
86
+ elif isinstance(body, dict) and params:
87
+ body = {**body, **params}
88
+ params = None
89
+ return await self._post("/alternative/ingest", body, params)
90
+ async def investment_themes(self, **params: Any) -> Any:
91
+ """Investment Themes API"""
92
+ return await self._get("/alternative/investment-themes", params)
93
+ async def reddit_mentions(self, ticker: str, **params: Any) -> Any:
94
+ """Reddit Stock Mentions API"""
95
+ return await self._get(f"/alternative/reddit-mentions/{quote(str(ticker))}", params)
96
+ async def social_mentions(self, ticker: str, **params: Any) -> Any:
97
+ """Social Mentions History"""
98
+ return await self._get(f"/alternative/social-mentions/{quote(str(ticker))}", params)
99
+ async def stocktwits(self, ticker: str, **params: Any) -> Any:
100
+ """StockTwits Sentiment API"""
101
+ return await self._get(f"/alternative/stocktwits/{quote(str(ticker))}", params)
102
+ async def superinvestors_holdings(self, slug: str, **params: Any) -> Any:
103
+ """Superinvestor Holdings API"""
104
+ return await self._get(f"/alternative/superinvestors/holdings/{quote(str(slug))}", params)
105
+ async def superinvestors_list(self, **params: Any) -> Any:
106
+ """Superinvestors List API"""
107
+ return await self._get("/alternative/superinvestors/list", params)
108
+ async def superinvestors_recent_activity(self, **params: Any) -> Any:
109
+ """Superinvestor Recent Activity API"""
110
+ return await self._get("/alternative/superinvestors/recent-activity", params)
111
+ async def superinvestors_top_holdings(self, **params: Any) -> Any:
112
+ """Superinvestor Top Holdings API"""
113
+ return await self._get("/alternative/superinvestors/top-holdings", params)
114
+ async def wikipedia_pageviews(self, ticker: str, **params: Any) -> Any:
115
+ """Wikipedia Pageviews API"""
116
+ return await self._get(f"/alternative/wikipedia-pageviews/{quote(str(ticker))}", params)
@@ -0,0 +1,50 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Optional
4
+ from urllib.parse import quote
5
+
6
+ from ._base import AsyncResource, SyncResource
7
+
8
+
9
+ class Analytics(SyncResource):
10
+ def cftc_tff(self, market_code: Optional[str] = None, **params: Any) -> Any:
11
+ """CFTC TFF Report"""
12
+ if market_code is not None:
13
+ return self._get(f"/analytics/cftc/tff/{quote(str(market_code))}", params)
14
+ return self._get("/analytics/cftc/tff", params)
15
+ def corporate_events(self, ticker: Optional[str] = None, **params: Any) -> Any:
16
+ """Corporate Events"""
17
+ if ticker is not None:
18
+ return self._get(f"/analytics/corporate-events/{quote(str(ticker))}", params)
19
+ return self._get("/analytics/corporate-events", params)
20
+ def earnings_calendar(self, **params: Any) -> Any:
21
+ """Earnings Calendar"""
22
+ return self._get("/analytics/earnings-calendar", params)
23
+ def fama_french(self, **params: Any) -> Any:
24
+ """Fama-French Factors"""
25
+ return self._get("/analytics/fama-french", params)
26
+ def options_volume(self, **params: Any) -> Any:
27
+ """Options Volume"""
28
+ return self._get("/analytics/options-volume", params)
29
+
30
+
31
+ class AsyncAnalytics(AsyncResource):
32
+ async def cftc_tff(self, market_code: Optional[str] = None, **params: Any) -> Any:
33
+ """CFTC TFF Report"""
34
+ if market_code is not None:
35
+ return await self._get(f"/analytics/cftc/tff/{quote(str(market_code))}", params)
36
+ return await self._get("/analytics/cftc/tff", params)
37
+ async def corporate_events(self, ticker: Optional[str] = None, **params: Any) -> Any:
38
+ """Corporate Events"""
39
+ if ticker is not None:
40
+ return await self._get(f"/analytics/corporate-events/{quote(str(ticker))}", params)
41
+ return await self._get("/analytics/corporate-events", params)
42
+ async def earnings_calendar(self, **params: Any) -> Any:
43
+ """Earnings Calendar"""
44
+ return await self._get("/analytics/earnings-calendar", params)
45
+ async def fama_french(self, **params: Any) -> Any:
46
+ """Fama-French Factors"""
47
+ return await self._get("/analytics/fama-french", params)
48
+ async def options_volume(self, **params: Any) -> Any:
49
+ """Options Volume"""
50
+ return await self._get("/analytics/options-volume", params)
@@ -0,0 +1,66 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Optional
4
+ from urllib.parse import quote
5
+
6
+ from ._base import AsyncResource, SyncResource
7
+
8
+
9
+ class Backtest(SyncResource):
10
+ def optimize(self, body: Any = None, **params: Any) -> Any:
11
+ """Optimize Strategy"""
12
+ if body is None and params:
13
+ body, params = params, None
14
+ elif isinstance(body, dict) and params:
15
+ body = {**body, **params}
16
+ params = None
17
+ return self._post("/backtest/optimize", body, params)
18
+ def run(self, body: Any = None, **params: Any) -> Any:
19
+ """Run Backtest"""
20
+ if body is None and params:
21
+ body, params = params, None
22
+ elif isinstance(body, dict) and params:
23
+ body = {**body, **params}
24
+ params = None
25
+ return self._post("/backtest/run", body, params)
26
+ def templates(self, **params: Any) -> Any:
27
+ """Strategy Templates"""
28
+ return self._get("/backtest/templates", params)
29
+ def walk_forward(self, body: Any = None, **params: Any) -> Any:
30
+ """Walk-Forward Analysis"""
31
+ if body is None and params:
32
+ body, params = params, None
33
+ elif isinstance(body, dict) and params:
34
+ body = {**body, **params}
35
+ params = None
36
+ return self._post("/backtest/walk-forward", body, params)
37
+
38
+
39
+ class AsyncBacktest(AsyncResource):
40
+ async def optimize(self, body: Any = None, **params: Any) -> Any:
41
+ """Optimize Strategy"""
42
+ if body is None and params:
43
+ body, params = params, None
44
+ elif isinstance(body, dict) and params:
45
+ body = {**body, **params}
46
+ params = None
47
+ return await self._post("/backtest/optimize", body, params)
48
+ async def run(self, body: Any = None, **params: Any) -> Any:
49
+ """Run Backtest"""
50
+ if body is None and params:
51
+ body, params = params, None
52
+ elif isinstance(body, dict) and params:
53
+ body = {**body, **params}
54
+ params = None
55
+ return await self._post("/backtest/run", body, params)
56
+ async def templates(self, **params: Any) -> Any:
57
+ """Strategy Templates"""
58
+ return await self._get("/backtest/templates", params)
59
+ async def walk_forward(self, body: Any = None, **params: Any) -> Any:
60
+ """Walk-Forward Analysis"""
61
+ if body is None and params:
62
+ body, params = params, None
63
+ elif isinstance(body, dict) and params:
64
+ body = {**body, **params}
65
+ params = None
66
+ return await self._post("/backtest/walk-forward", body, params)
@@ -0,0 +1,36 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Optional
4
+ from urllib.parse import quote
5
+
6
+ from ._base import AsyncResource, SyncResource
7
+
8
+
9
+ class Bonds(SyncResource):
10
+ def list(self, **params: Any) -> Any:
11
+ """Bond List / Search API"""
12
+ return self._get("/bonds/list", params)
13
+ def prices(self, identifier: str, **params: Any) -> Any:
14
+ return self._get(f"/bonds/prices/{quote(str(identifier))}", params)
15
+ def profile(self, identifier: str, **params: Any) -> Any:
16
+ return self._get(f"/bonds/profile/{quote(str(identifier))}", params)
17
+ def ticks(self, identifier: str, **params: Any) -> Any:
18
+ return self._get(f"/bonds/ticks/{quote(str(identifier))}", params)
19
+ def yield_curve(self, **params: Any) -> Any:
20
+ """Government Bond Yield Curve API"""
21
+ return self._get("/bonds/yield-curve", params)
22
+
23
+
24
+ class AsyncBonds(AsyncResource):
25
+ async def list(self, **params: Any) -> Any:
26
+ """Bond List / Search API"""
27
+ return await self._get("/bonds/list", params)
28
+ async def prices(self, identifier: str, **params: Any) -> Any:
29
+ return await self._get(f"/bonds/prices/{quote(str(identifier))}", params)
30
+ async def profile(self, identifier: str, **params: Any) -> Any:
31
+ return await self._get(f"/bonds/profile/{quote(str(identifier))}", params)
32
+ async def ticks(self, identifier: str, **params: Any) -> Any:
33
+ return await self._get(f"/bonds/ticks/{quote(str(identifier))}", params)
34
+ async def yield_curve(self, **params: Any) -> Any:
35
+ """Government Bond Yield Curve API"""
36
+ return await self._get("/bonds/yield-curve", params)
@@ -0,0 +1,78 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Optional
4
+ from urllib.parse import quote
5
+
6
+ from ._base import AsyncResource, SyncResource
7
+
8
+
9
+ class Calendar(SyncResource):
10
+ def dividends(self, year: str, **params: Any) -> Any:
11
+ """Dividend Calendar"""
12
+ return self._get(f"/calendar/dividends/{quote(str(year))}", params)
13
+ def dividends_forward(self, **params: Any) -> Any:
14
+ """Forward Dividend Calendar"""
15
+ return self._get("/calendar/dividends-forward", params)
16
+ def earnings(self, date: str, **params: Any) -> Any:
17
+ """Earnings Calendar (Weekly)"""
18
+ return self._get(f"/calendar/earnings/{quote(str(date))}", params)
19
+ def earnings_by_symbol(self, symbol: str, **params: Any) -> Any:
20
+ """Earnings Calendar by Symbol"""
21
+ return self._get(f"/calendar/earnings-by-symbol/{quote(str(symbol))}", params)
22
+ def earnings_surprises(self, symbol: str, **params: Any) -> Any:
23
+ """Earnings Surprises"""
24
+ return self._get(f"/calendar/earnings-surprises/{quote(str(symbol))}", params)
25
+ def economic_calendar(self, **params: Any) -> Any:
26
+ """Economic Calendar"""
27
+ return self._get("/calendar/economic-calendar", params)
28
+ def economic_calendar_history(self, **params: Any) -> Any:
29
+ """Economic Calendar History"""
30
+ return self._get("/calendar/economic-calendar/history", params)
31
+ def ipo(self, **params: Any) -> Any:
32
+ """IPO Calendar"""
33
+ return self._get("/calendar/ipo", params)
34
+ def ipo_pipeline(self, **params: Any) -> Any:
35
+ """IPO Pipeline"""
36
+ return self._get("/calendar/ipo-pipeline", params)
37
+ def ma_deals(self, **params: Any) -> Any:
38
+ """M&A Deal Tracker"""
39
+ return self._get("/calendar/ma-deals", params)
40
+ def spac(self, **params: Any) -> Any:
41
+ """SPAC Tracker"""
42
+ return self._get("/calendar/spac", params)
43
+
44
+
45
+ class AsyncCalendar(AsyncResource):
46
+ async def dividends(self, year: str, **params: Any) -> Any:
47
+ """Dividend Calendar"""
48
+ return await self._get(f"/calendar/dividends/{quote(str(year))}", params)
49
+ async def dividends_forward(self, **params: Any) -> Any:
50
+ """Forward Dividend Calendar"""
51
+ return await self._get("/calendar/dividends-forward", params)
52
+ async def earnings(self, date: str, **params: Any) -> Any:
53
+ """Earnings Calendar (Weekly)"""
54
+ return await self._get(f"/calendar/earnings/{quote(str(date))}", params)
55
+ async def earnings_by_symbol(self, symbol: str, **params: Any) -> Any:
56
+ """Earnings Calendar by Symbol"""
57
+ return await self._get(f"/calendar/earnings-by-symbol/{quote(str(symbol))}", params)
58
+ async def earnings_surprises(self, symbol: str, **params: Any) -> Any:
59
+ """Earnings Surprises"""
60
+ return await self._get(f"/calendar/earnings-surprises/{quote(str(symbol))}", params)
61
+ async def economic_calendar(self, **params: Any) -> Any:
62
+ """Economic Calendar"""
63
+ return await self._get("/calendar/economic-calendar", params)
64
+ async def economic_calendar_history(self, **params: Any) -> Any:
65
+ """Economic Calendar History"""
66
+ return await self._get("/calendar/economic-calendar/history", params)
67
+ async def ipo(self, **params: Any) -> Any:
68
+ """IPO Calendar"""
69
+ return await self._get("/calendar/ipo", params)
70
+ async def ipo_pipeline(self, **params: Any) -> Any:
71
+ """IPO Pipeline"""
72
+ return await self._get("/calendar/ipo-pipeline", params)
73
+ async def ma_deals(self, **params: Any) -> Any:
74
+ """M&A Deal Tracker"""
75
+ return await self._get("/calendar/ma-deals", params)
76
+ async def spac(self, **params: Any) -> Any:
77
+ """SPAC Tracker"""
78
+ return await self._get("/calendar/spac", params)
@@ -0,0 +1,30 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Optional
4
+ from urllib.parse import quote
5
+
6
+ from ._base import AsyncResource, SyncResource
7
+
8
+
9
+ class Certificates(SyncResource):
10
+ def list(self, **params: Any) -> Any:
11
+ """Certificate List API"""
12
+ return self._get("/certificates/list", params)
13
+ def profile(self, identifier: str, **params: Any) -> Any:
14
+ """Certificate Profile API"""
15
+ return self._get(f"/certificates/profile/{quote(str(identifier))}", params)
16
+ def quotes(self, identifier: str, **params: Any) -> Any:
17
+ """Certificate Quotes API"""
18
+ return self._get(f"/certificates/quotes/{quote(str(identifier))}", params)
19
+
20
+
21
+ class AsyncCertificates(AsyncResource):
22
+ async def list(self, **params: Any) -> Any:
23
+ """Certificate List API"""
24
+ return await self._get("/certificates/list", params)
25
+ async def profile(self, identifier: str, **params: Any) -> Any:
26
+ """Certificate Profile API"""
27
+ return await self._get(f"/certificates/profile/{quote(str(identifier))}", params)
28
+ async def quotes(self, identifier: str, **params: Any) -> Any:
29
+ """Certificate Quotes API"""
30
+ return await self._get(f"/certificates/quotes/{quote(str(identifier))}", params)
@@ -0,0 +1,42 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Optional
4
+ from urllib.parse import quote
5
+
6
+ from ._base import AsyncResource, SyncResource
7
+
8
+
9
+ class Charting(SyncResource):
10
+ def compare(self, **params: Any) -> Any:
11
+ """Multi-Symbol Compare"""
12
+ return self._get("/charting/compare", params)
13
+ def indicators(self, identifier: str, **params: Any) -> Any:
14
+ """Technical Indicators"""
15
+ return self._get(f"/charting/indicators/{quote(str(identifier))}", params)
16
+ def ohlcv(self, identifier: str, **params: Any) -> Any:
17
+ """OHLCV Candles"""
18
+ return self._get(f"/charting/ohlcv/{quote(str(identifier))}", params)
19
+ def overlay(self, identifier: str, **params: Any) -> Any:
20
+ """Chart Overlays"""
21
+ return self._get(f"/charting/overlay/{quote(str(identifier))}", params)
22
+ def patterns(self, identifier: str, **params: Any) -> Any:
23
+ """Candlestick Patterns"""
24
+ return self._get(f"/charting/patterns/{quote(str(identifier))}", params)
25
+
26
+
27
+ class AsyncCharting(AsyncResource):
28
+ async def compare(self, **params: Any) -> Any:
29
+ """Multi-Symbol Compare"""
30
+ return await self._get("/charting/compare", params)
31
+ async def indicators(self, identifier: str, **params: Any) -> Any:
32
+ """Technical Indicators"""
33
+ return await self._get(f"/charting/indicators/{quote(str(identifier))}", params)
34
+ async def ohlcv(self, identifier: str, **params: Any) -> Any:
35
+ """OHLCV Candles"""
36
+ return await self._get(f"/charting/ohlcv/{quote(str(identifier))}", params)
37
+ async def overlay(self, identifier: str, **params: Any) -> Any:
38
+ """Chart Overlays"""
39
+ return await self._get(f"/charting/overlay/{quote(str(identifier))}", params)
40
+ async def patterns(self, identifier: str, **params: Any) -> Any:
41
+ """Candlestick Patterns"""
42
+ return await self._get(f"/charting/patterns/{quote(str(identifier))}", params)
@@ -0,0 +1,64 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Optional
4
+ from urllib.parse import quote
5
+
6
+ from ._base import AsyncResource, SyncResource
7
+
8
+
9
+ class Commodity(SyncResource):
10
+ def crack_spreads(self, **params: Any) -> Any:
11
+ """Crack Spreads API"""
12
+ return self._get("/commodity/crack-spreads", params)
13
+ def futures_curve(self, product: str, **params: Any) -> Any:
14
+ """Futures Term Structure API"""
15
+ return self._get(f"/commodity/futures-curve/{quote(str(product))}", params)
16
+ def futures_curve_history(self, product: str, **params: Any) -> Any:
17
+ """Futures Curve History API"""
18
+ return self._get(f"/commodity/futures-curve/{quote(str(product))}/history", params)
19
+ def futures_settlements(self, **params: Any) -> Any:
20
+ """Futures Settlements API"""
21
+ return self._get("/commodity/futures-settlements", params)
22
+ def list(self, **params: Any) -> Any:
23
+ """Commodities List API"""
24
+ return self._get("/commodity/list", params)
25
+ def prices(self, symbol: Optional[str] = None, **params: Any) -> Any:
26
+ """Commodity Prices API"""
27
+ if symbol is not None:
28
+ return self._get(f"/commodity/prices/{quote(str(symbol))}", params)
29
+ return self._get("/commodity/prices", params)
30
+ def profile(self, ticker: str, **params: Any) -> Any:
31
+ """Commodity Profile API"""
32
+ return self._get(f"/commodity/profile/{quote(str(ticker))}", params)
33
+ def quotes(self, ticker: str, **params: Any) -> Any:
34
+ """Commodity Quotes API"""
35
+ return self._get(f"/commodity/quotes/{quote(str(ticker))}", params)
36
+
37
+
38
+ class AsyncCommodity(AsyncResource):
39
+ async def crack_spreads(self, **params: Any) -> Any:
40
+ """Crack Spreads API"""
41
+ return await self._get("/commodity/crack-spreads", params)
42
+ async def futures_curve(self, product: str, **params: Any) -> Any:
43
+ """Futures Term Structure API"""
44
+ return await self._get(f"/commodity/futures-curve/{quote(str(product))}", params)
45
+ async def futures_curve_history(self, product: str, **params: Any) -> Any:
46
+ """Futures Curve History API"""
47
+ return await self._get(f"/commodity/futures-curve/{quote(str(product))}/history", params)
48
+ async def futures_settlements(self, **params: Any) -> Any:
49
+ """Futures Settlements API"""
50
+ return await self._get("/commodity/futures-settlements", params)
51
+ async def list(self, **params: Any) -> Any:
52
+ """Commodities List API"""
53
+ return await self._get("/commodity/list", params)
54
+ async def prices(self, symbol: Optional[str] = None, **params: Any) -> Any:
55
+ """Commodity Prices API"""
56
+ if symbol is not None:
57
+ return await self._get(f"/commodity/prices/{quote(str(symbol))}", params)
58
+ return await self._get("/commodity/prices", params)
59
+ async def profile(self, ticker: str, **params: Any) -> Any:
60
+ """Commodity Profile API"""
61
+ return await self._get(f"/commodity/profile/{quote(str(ticker))}", params)
62
+ async def quotes(self, ticker: str, **params: Any) -> Any:
63
+ """Commodity Quotes API"""
64
+ return await self._get(f"/commodity/quotes/{quote(str(ticker))}", params)
@@ -0,0 +1,30 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Optional
4
+ from urllib.parse import quote
5
+
6
+ from ._base import AsyncResource, SyncResource
7
+
8
+
9
+ class Crypto(SyncResource):
10
+ def list(self, start: str, end: str, **params: Any) -> Any:
11
+ """Crypto List (Paginated) API"""
12
+ return self._get(f"/crypto/list/{quote(str(start))}/{quote(str(end))}", params)
13
+ def profile(self, symbol: str, **params: Any) -> Any:
14
+ """Crypto Profile API"""
15
+ return self._get(f"/crypto/profile/{quote(str(symbol))}", params)
16
+ def quotes(self, identifier: str, **params: Any) -> Any:
17
+ """Crypto Quotes API"""
18
+ return self._get(f"/crypto/quotes/{quote(str(identifier))}", params)
19
+
20
+
21
+ class AsyncCrypto(AsyncResource):
22
+ async def list(self, start: str, end: str, **params: Any) -> Any:
23
+ """Crypto List (Paginated) API"""
24
+ return await self._get(f"/crypto/list/{quote(str(start))}/{quote(str(end))}", params)
25
+ async def profile(self, symbol: str, **params: Any) -> Any:
26
+ """Crypto Profile API"""
27
+ return await self._get(f"/crypto/profile/{quote(str(symbol))}", params)
28
+ async def quotes(self, identifier: str, **params: Any) -> Any:
29
+ """Crypto Quotes API"""
30
+ return await self._get(f"/crypto/quotes/{quote(str(identifier))}", params)