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.
- eulerpool/__init__.py +281 -0
- eulerpool/_client.py +250 -0
- eulerpool/_version.py +3 -0
- eulerpool/errors.py +46 -0
- eulerpool/py.typed +0 -0
- eulerpool/resources/__init__.py +0 -0
- eulerpool/resources/_base.py +34 -0
- eulerpool/resources/aaq.py +18 -0
- eulerpool/resources/alternative.py +116 -0
- eulerpool/resources/analytics.py +50 -0
- eulerpool/resources/backtest.py +66 -0
- eulerpool/resources/bonds.py +36 -0
- eulerpool/resources/calendar.py +78 -0
- eulerpool/resources/certificates.py +30 -0
- eulerpool/resources/charting.py +42 -0
- eulerpool/resources/commodity.py +64 -0
- eulerpool/resources/crypto.py +30 -0
- eulerpool/resources/crypto_extended.py +246 -0
- eulerpool/resources/data.py +24 -0
- eulerpool/resources/datasets.py +100 -0
- eulerpool/resources/deals.py +28 -0
- eulerpool/resources/derivatives.py +68 -0
- eulerpool/resources/dex.py +54 -0
- eulerpool/resources/earning_calls.py +24 -0
- eulerpool/resources/ecb.py +34 -0
- eulerpool/resources/economic_forecasts.py +28 -0
- eulerpool/resources/energy.py +94 -0
- eulerpool/resources/equity.py +420 -0
- eulerpool/resources/equity_extended.py +150 -0
- eulerpool/resources/etf.py +60 -0
- eulerpool/resources/fair_value.py +18 -0
- eulerpool/resources/fixed_income.py +46 -0
- eulerpool/resources/forex.py +24 -0
- eulerpool/resources/fundamentals.py +60 -0
- eulerpool/resources/funds.py +32 -0
- eulerpool/resources/government.py +42 -0
- eulerpool/resources/ice_swap.py +18 -0
- eulerpool/resources/index.py +34 -0
- eulerpool/resources/institutional.py +60 -0
- eulerpool/resources/interest_rates.py +34 -0
- eulerpool/resources/macro.py +156 -0
- eulerpool/resources/market.py +214 -0
- eulerpool/resources/mutual_fund.py +42 -0
- eulerpool/resources/news.py +18 -0
- eulerpool/resources/nft.py +42 -0
- eulerpool/resources/partner.py +18 -0
- eulerpool/resources/patents.py +24 -0
- eulerpool/resources/peer_comparison.py +58 -0
- eulerpool/resources/portfolio.py +96 -0
- eulerpool/resources/portfolio_risk.py +58 -0
- eulerpool/resources/private_markets.py +24 -0
- eulerpool/resources/research.py +30 -0
- eulerpool/resources/risk_models.py +52 -0
- eulerpool/resources/screener.py +46 -0
- eulerpool/resources/sentiment.py +60 -0
- eulerpool/resources/shipping.py +58 -0
- eulerpool/resources/singapore.py +82 -0
- eulerpool/resources/transcripts.py +40 -0
- eulerpool/resources/trends.py +18 -0
- eulerpool/resources/vendor.py +28 -0
- eulerpool-1.0.0.dist-info/METADATA +146 -0
- eulerpool-1.0.0.dist-info/RECORD +64 -0
- eulerpool-1.0.0.dist-info/WHEEL +4 -0
- eulerpool-1.0.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,96 @@
|
|
|
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 Portfolio(SyncResource):
|
|
10
|
+
def delete_portfolios(self, id: str, **params: Any) -> Any:
|
|
11
|
+
"""Delete portfolio"""
|
|
12
|
+
return self._delete(f"/portfolio/portfolios/{quote(str(id))}", params)
|
|
13
|
+
def portfolios(self, **params: Any) -> Any:
|
|
14
|
+
"""List portfolios"""
|
|
15
|
+
return self._get("/portfolio/portfolios", params)
|
|
16
|
+
def portfolios_alerts(self, id: str, **params: Any) -> Any:
|
|
17
|
+
"""Portfolio alerts"""
|
|
18
|
+
return self._get(f"/portfolio/portfolios/{quote(str(id))}/alerts", params)
|
|
19
|
+
def portfolios_alerts_id(self, id: str, body: Any = None, **params: Any) -> Any:
|
|
20
|
+
"""Create alert"""
|
|
21
|
+
if body is None and params:
|
|
22
|
+
body, params = params, None
|
|
23
|
+
elif isinstance(body, dict) and params:
|
|
24
|
+
body = {**body, **params}
|
|
25
|
+
params = None
|
|
26
|
+
return self._post(f"/portfolio/portfolios/{quote(str(id))}/alerts", body, params)
|
|
27
|
+
def portfolios_alt(self, body: Any = None, **params: Any) -> Any:
|
|
28
|
+
"""Create portfolio"""
|
|
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("/portfolio/portfolios", body, params)
|
|
35
|
+
def portfolios_analytics(self, id: str, **params: Any) -> Any:
|
|
36
|
+
"""Portfolio analytics"""
|
|
37
|
+
return self._get(f"/portfolio/portfolios/{quote(str(id))}/analytics", params)
|
|
38
|
+
def portfolios_positions(self, id: str, **params: Any) -> Any:
|
|
39
|
+
"""Portfolio positions"""
|
|
40
|
+
return self._get(f"/portfolio/portfolios/{quote(str(id))}/positions", params)
|
|
41
|
+
def portfolios_transactions(self, id: str, body: Any = None, **params: Any) -> Any:
|
|
42
|
+
"""Add transaction"""
|
|
43
|
+
if body is None and params:
|
|
44
|
+
body, params = params, None
|
|
45
|
+
elif isinstance(body, dict) and params:
|
|
46
|
+
body = {**body, **params}
|
|
47
|
+
params = None
|
|
48
|
+
return self._post(f"/portfolio/portfolios/{quote(str(id))}/transactions", body, params)
|
|
49
|
+
def portfolios_valuations(self, id: str, **params: Any) -> Any:
|
|
50
|
+
"""Portfolio daily valuations"""
|
|
51
|
+
return self._get(f"/portfolio/portfolios/{quote(str(id))}/valuations", params)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class AsyncPortfolio(AsyncResource):
|
|
55
|
+
async def delete_portfolios(self, id: str, **params: Any) -> Any:
|
|
56
|
+
"""Delete portfolio"""
|
|
57
|
+
return await self._delete(f"/portfolio/portfolios/{quote(str(id))}", params)
|
|
58
|
+
async def portfolios(self, **params: Any) -> Any:
|
|
59
|
+
"""List portfolios"""
|
|
60
|
+
return await self._get("/portfolio/portfolios", params)
|
|
61
|
+
async def portfolios_alerts(self, id: str, **params: Any) -> Any:
|
|
62
|
+
"""Portfolio alerts"""
|
|
63
|
+
return await self._get(f"/portfolio/portfolios/{quote(str(id))}/alerts", params)
|
|
64
|
+
async def portfolios_alerts_id(self, id: str, body: Any = None, **params: Any) -> Any:
|
|
65
|
+
"""Create alert"""
|
|
66
|
+
if body is None and params:
|
|
67
|
+
body, params = params, None
|
|
68
|
+
elif isinstance(body, dict) and params:
|
|
69
|
+
body = {**body, **params}
|
|
70
|
+
params = None
|
|
71
|
+
return await self._post(f"/portfolio/portfolios/{quote(str(id))}/alerts", body, params)
|
|
72
|
+
async def portfolios_alt(self, body: Any = None, **params: Any) -> Any:
|
|
73
|
+
"""Create portfolio"""
|
|
74
|
+
if body is None and params:
|
|
75
|
+
body, params = params, None
|
|
76
|
+
elif isinstance(body, dict) and params:
|
|
77
|
+
body = {**body, **params}
|
|
78
|
+
params = None
|
|
79
|
+
return await self._post("/portfolio/portfolios", body, params)
|
|
80
|
+
async def portfolios_analytics(self, id: str, **params: Any) -> Any:
|
|
81
|
+
"""Portfolio analytics"""
|
|
82
|
+
return await self._get(f"/portfolio/portfolios/{quote(str(id))}/analytics", params)
|
|
83
|
+
async def portfolios_positions(self, id: str, **params: Any) -> Any:
|
|
84
|
+
"""Portfolio positions"""
|
|
85
|
+
return await self._get(f"/portfolio/portfolios/{quote(str(id))}/positions", params)
|
|
86
|
+
async def portfolios_transactions(self, id: str, body: Any = None, **params: Any) -> Any:
|
|
87
|
+
"""Add transaction"""
|
|
88
|
+
if body is None and params:
|
|
89
|
+
body, params = params, None
|
|
90
|
+
elif isinstance(body, dict) and params:
|
|
91
|
+
body = {**body, **params}
|
|
92
|
+
params = None
|
|
93
|
+
return await self._post(f"/portfolio/portfolios/{quote(str(id))}/transactions", body, params)
|
|
94
|
+
async def portfolios_valuations(self, id: str, **params: Any) -> Any:
|
|
95
|
+
"""Portfolio daily valuations"""
|
|
96
|
+
return await self._get(f"/portfolio/portfolios/{quote(str(id))}/valuations", params)
|
|
@@ -0,0 +1,58 @@
|
|
|
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 PortfolioRisk(SyncResource):
|
|
10
|
+
def attribution(self, portfolioId: str, **params: Any) -> Any:
|
|
11
|
+
"""Brinson Attribution"""
|
|
12
|
+
return self._get(f"/portfolio-risk/attribution/{quote(str(portfolioId))}", params)
|
|
13
|
+
def correlation(self, portfolioId: str, **params: Any) -> Any:
|
|
14
|
+
"""Correlation Matrix"""
|
|
15
|
+
return self._get(f"/portfolio-risk/correlation/{quote(str(portfolioId))}", params)
|
|
16
|
+
def risk_metrics(self, portfolioId: str, **params: Any) -> Any:
|
|
17
|
+
"""Risk Metrics"""
|
|
18
|
+
return self._get(f"/portfolio-risk/risk-metrics/{quote(str(portfolioId))}", params)
|
|
19
|
+
def stress_test(self, portfolioId: str, body: Any = None, **params: Any) -> Any:
|
|
20
|
+
"""Stress Test"""
|
|
21
|
+
if body is None and params:
|
|
22
|
+
body, params = params, None
|
|
23
|
+
elif isinstance(body, dict) and params:
|
|
24
|
+
body = {**body, **params}
|
|
25
|
+
params = None
|
|
26
|
+
return self._post(f"/portfolio-risk/stress-test/{quote(str(portfolioId))}", body, params)
|
|
27
|
+
def tracking(self, portfolioId: str, **params: Any) -> Any:
|
|
28
|
+
"""Tracking Error"""
|
|
29
|
+
return self._get(f"/portfolio-risk/tracking/{quote(str(portfolioId))}", params)
|
|
30
|
+
def var(self, portfolioId: str, **params: Any) -> Any:
|
|
31
|
+
"""Value at Risk"""
|
|
32
|
+
return self._get(f"/portfolio-risk/var/{quote(str(portfolioId))}", params)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class AsyncPortfolioRisk(AsyncResource):
|
|
36
|
+
async def attribution(self, portfolioId: str, **params: Any) -> Any:
|
|
37
|
+
"""Brinson Attribution"""
|
|
38
|
+
return await self._get(f"/portfolio-risk/attribution/{quote(str(portfolioId))}", params)
|
|
39
|
+
async def correlation(self, portfolioId: str, **params: Any) -> Any:
|
|
40
|
+
"""Correlation Matrix"""
|
|
41
|
+
return await self._get(f"/portfolio-risk/correlation/{quote(str(portfolioId))}", params)
|
|
42
|
+
async def risk_metrics(self, portfolioId: str, **params: Any) -> Any:
|
|
43
|
+
"""Risk Metrics"""
|
|
44
|
+
return await self._get(f"/portfolio-risk/risk-metrics/{quote(str(portfolioId))}", params)
|
|
45
|
+
async def stress_test(self, portfolioId: str, body: Any = None, **params: Any) -> Any:
|
|
46
|
+
"""Stress Test"""
|
|
47
|
+
if body is None and params:
|
|
48
|
+
body, params = params, None
|
|
49
|
+
elif isinstance(body, dict) and params:
|
|
50
|
+
body = {**body, **params}
|
|
51
|
+
params = None
|
|
52
|
+
return await self._post(f"/portfolio-risk/stress-test/{quote(str(portfolioId))}", body, params)
|
|
53
|
+
async def tracking(self, portfolioId: str, **params: Any) -> Any:
|
|
54
|
+
"""Tracking Error"""
|
|
55
|
+
return await self._get(f"/portfolio-risk/tracking/{quote(str(portfolioId))}", params)
|
|
56
|
+
async def var(self, portfolioId: str, **params: Any) -> Any:
|
|
57
|
+
"""Value at Risk"""
|
|
58
|
+
return await self._get(f"/portfolio-risk/var/{quote(str(portfolioId))}", params)
|
|
@@ -0,0 +1,24 @@
|
|
|
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 PrivateMarkets(SyncResource):
|
|
10
|
+
def companies(self, **params: Any) -> Any:
|
|
11
|
+
"""Private Companies"""
|
|
12
|
+
return self._get("/private-markets/companies", params)
|
|
13
|
+
def funding(self, company: str, **params: Any) -> Any:
|
|
14
|
+
"""Funding Rounds"""
|
|
15
|
+
return self._get(f"/private-markets/funding/{quote(str(company))}", params)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class AsyncPrivateMarkets(AsyncResource):
|
|
19
|
+
async def companies(self, **params: Any) -> Any:
|
|
20
|
+
"""Private Companies"""
|
|
21
|
+
return await self._get("/private-markets/companies", params)
|
|
22
|
+
async def funding(self, company: str, **params: Any) -> Any:
|
|
23
|
+
"""Funding Rounds"""
|
|
24
|
+
return await self._get(f"/private-markets/funding/{quote(str(company))}", 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 Research(SyncResource):
|
|
10
|
+
def news(self, ticker: str, **params: Any) -> Any:
|
|
11
|
+
"""Company News"""
|
|
12
|
+
return self._get(f"/research/news/{quote(str(ticker))}", params)
|
|
13
|
+
def press_releases(self, ticker: str, **params: Any) -> Any:
|
|
14
|
+
"""Press Releases"""
|
|
15
|
+
return self._get(f"/research/press-releases/{quote(str(ticker))}", params)
|
|
16
|
+
def recommendations(self, ticker: str, **params: Any) -> Any:
|
|
17
|
+
"""Analyst Recommendations"""
|
|
18
|
+
return self._get(f"/research/recommendations/{quote(str(ticker))}", params)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class AsyncResearch(AsyncResource):
|
|
22
|
+
async def news(self, ticker: str, **params: Any) -> Any:
|
|
23
|
+
"""Company News"""
|
|
24
|
+
return await self._get(f"/research/news/{quote(str(ticker))}", params)
|
|
25
|
+
async def press_releases(self, ticker: str, **params: Any) -> Any:
|
|
26
|
+
"""Press Releases"""
|
|
27
|
+
return await self._get(f"/research/press-releases/{quote(str(ticker))}", params)
|
|
28
|
+
async def recommendations(self, ticker: str, **params: Any) -> Any:
|
|
29
|
+
"""Analyst Recommendations"""
|
|
30
|
+
return await self._get(f"/research/recommendations/{quote(str(ticker))}", params)
|
|
@@ -0,0 +1,52 @@
|
|
|
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 RiskModels(SyncResource):
|
|
10
|
+
def covariance(self, **params: Any) -> Any:
|
|
11
|
+
"""Factor Covariance Matrix"""
|
|
12
|
+
return self._get("/risk-models/covariance", params)
|
|
13
|
+
def exposure(self, identifier: str, **params: Any) -> Any:
|
|
14
|
+
"""Factor Exposure"""
|
|
15
|
+
return self._get(f"/risk-models/exposure/{quote(str(identifier))}", params)
|
|
16
|
+
def factor_returns(self, **params: Any) -> Any:
|
|
17
|
+
"""Factor Returns"""
|
|
18
|
+
return self._get("/risk-models/factor-returns", params)
|
|
19
|
+
def factors(self, **params: Any) -> Any:
|
|
20
|
+
"""Available Risk Factors"""
|
|
21
|
+
return self._get("/risk-models/factors", params)
|
|
22
|
+
def portfolio_risk(self, body: Any = None, **params: Any) -> Any:
|
|
23
|
+
"""Portfolio Risk Decomposition"""
|
|
24
|
+
if body is None and params:
|
|
25
|
+
body, params = params, None
|
|
26
|
+
elif isinstance(body, dict) and params:
|
|
27
|
+
body = {**body, **params}
|
|
28
|
+
params = None
|
|
29
|
+
return self._post("/risk-models/portfolio-risk", body, params)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class AsyncRiskModels(AsyncResource):
|
|
33
|
+
async def covariance(self, **params: Any) -> Any:
|
|
34
|
+
"""Factor Covariance Matrix"""
|
|
35
|
+
return await self._get("/risk-models/covariance", params)
|
|
36
|
+
async def exposure(self, identifier: str, **params: Any) -> Any:
|
|
37
|
+
"""Factor Exposure"""
|
|
38
|
+
return await self._get(f"/risk-models/exposure/{quote(str(identifier))}", params)
|
|
39
|
+
async def factor_returns(self, **params: Any) -> Any:
|
|
40
|
+
"""Factor Returns"""
|
|
41
|
+
return await self._get("/risk-models/factor-returns", params)
|
|
42
|
+
async def factors(self, **params: Any) -> Any:
|
|
43
|
+
"""Available Risk Factors"""
|
|
44
|
+
return await self._get("/risk-models/factors", params)
|
|
45
|
+
async def portfolio_risk(self, body: Any = None, **params: Any) -> Any:
|
|
46
|
+
"""Portfolio Risk Decomposition"""
|
|
47
|
+
if body is None and params:
|
|
48
|
+
body, params = params, None
|
|
49
|
+
elif isinstance(body, dict) and params:
|
|
50
|
+
body = {**body, **params}
|
|
51
|
+
params = None
|
|
52
|
+
return await self._post("/risk-models/portfolio-risk", body, params)
|
|
@@ -0,0 +1,46 @@
|
|
|
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 Screener(SyncResource):
|
|
10
|
+
def metadata(self, **params: Any) -> Any:
|
|
11
|
+
"""Screener Metadata"""
|
|
12
|
+
return self._get("/screener/metadata", params)
|
|
13
|
+
def screen(self, body: Any = None, **params: Any) -> Any:
|
|
14
|
+
"""Stock Screener"""
|
|
15
|
+
if body is None and params:
|
|
16
|
+
body, params = params, None
|
|
17
|
+
elif isinstance(body, dict) and params:
|
|
18
|
+
body = {**body, **params}
|
|
19
|
+
params = None
|
|
20
|
+
return self._post("/screener/screen", body, params)
|
|
21
|
+
def search(self, query: str, **params: Any) -> Any:
|
|
22
|
+
"""Symbol Search"""
|
|
23
|
+
return self._get(f"/screener/search/{quote(str(query))}", params)
|
|
24
|
+
def universe(self, **params: Any) -> Any:
|
|
25
|
+
"""Screener Universe"""
|
|
26
|
+
return self._get("/screener/universe", params)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class AsyncScreener(AsyncResource):
|
|
30
|
+
async def metadata(self, **params: Any) -> Any:
|
|
31
|
+
"""Screener Metadata"""
|
|
32
|
+
return await self._get("/screener/metadata", params)
|
|
33
|
+
async def screen(self, body: Any = None, **params: Any) -> Any:
|
|
34
|
+
"""Stock Screener"""
|
|
35
|
+
if body is None and params:
|
|
36
|
+
body, params = params, None
|
|
37
|
+
elif isinstance(body, dict) and params:
|
|
38
|
+
body = {**body, **params}
|
|
39
|
+
params = None
|
|
40
|
+
return await self._post("/screener/screen", body, params)
|
|
41
|
+
async def search(self, query: str, **params: Any) -> Any:
|
|
42
|
+
"""Symbol Search"""
|
|
43
|
+
return await self._get(f"/screener/search/{quote(str(query))}", params)
|
|
44
|
+
async def universe(self, **params: Any) -> Any:
|
|
45
|
+
"""Screener Universe"""
|
|
46
|
+
return await self._get("/screener/universe", params)
|
|
@@ -0,0 +1,60 @@
|
|
|
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 Sentiment(SyncResource):
|
|
10
|
+
def fund_ownership(self, identifier: str, **params: Any) -> Any:
|
|
11
|
+
"""Fund Ownership API"""
|
|
12
|
+
return self._get(f"/sentiment/fund-ownership/{quote(str(identifier))}", params)
|
|
13
|
+
def insider_sentiment(self, identifier: str, **params: Any) -> Any:
|
|
14
|
+
"""Insider Sentiment API"""
|
|
15
|
+
return self._get(f"/sentiment/insider-sentiment/{quote(str(identifier))}", params)
|
|
16
|
+
def institutional_ownership(self, identifier: str, **params: Any) -> Any:
|
|
17
|
+
"""Institutional Ownership API"""
|
|
18
|
+
return self._get(f"/sentiment/institutional-ownership/{quote(str(identifier))}", params)
|
|
19
|
+
def news_sentiment(self, identifier: str, **params: Any) -> Any:
|
|
20
|
+
"""News Sentiment API"""
|
|
21
|
+
return self._get(f"/sentiment/news-sentiment/{quote(str(identifier))}", params)
|
|
22
|
+
def price_metrics(self, identifier: str, **params: Any) -> Any:
|
|
23
|
+
"""Price Metrics API"""
|
|
24
|
+
return self._get(f"/sentiment/price-metrics/{quote(str(identifier))}", params)
|
|
25
|
+
def sector_metrics(self, **params: Any) -> Any:
|
|
26
|
+
"""Sector Metrics API"""
|
|
27
|
+
return self._get("/sentiment/sector-metrics", params)
|
|
28
|
+
def social(self, ticker: str, **params: Any) -> Any:
|
|
29
|
+
"""Reddit Social Sentiment API"""
|
|
30
|
+
return self._get(f"/sentiment/social/{quote(str(ticker))}", params)
|
|
31
|
+
def social_sentiment(self, identifier: str, **params: Any) -> Any:
|
|
32
|
+
"""Social Sentiment API"""
|
|
33
|
+
return self._get(f"/sentiment/social-sentiment/{quote(str(identifier))}", params)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class AsyncSentiment(AsyncResource):
|
|
37
|
+
async def fund_ownership(self, identifier: str, **params: Any) -> Any:
|
|
38
|
+
"""Fund Ownership API"""
|
|
39
|
+
return await self._get(f"/sentiment/fund-ownership/{quote(str(identifier))}", params)
|
|
40
|
+
async def insider_sentiment(self, identifier: str, **params: Any) -> Any:
|
|
41
|
+
"""Insider Sentiment API"""
|
|
42
|
+
return await self._get(f"/sentiment/insider-sentiment/{quote(str(identifier))}", params)
|
|
43
|
+
async def institutional_ownership(self, identifier: str, **params: Any) -> Any:
|
|
44
|
+
"""Institutional Ownership API"""
|
|
45
|
+
return await self._get(f"/sentiment/institutional-ownership/{quote(str(identifier))}", params)
|
|
46
|
+
async def news_sentiment(self, identifier: str, **params: Any) -> Any:
|
|
47
|
+
"""News Sentiment API"""
|
|
48
|
+
return await self._get(f"/sentiment/news-sentiment/{quote(str(identifier))}", params)
|
|
49
|
+
async def price_metrics(self, identifier: str, **params: Any) -> Any:
|
|
50
|
+
"""Price Metrics API"""
|
|
51
|
+
return await self._get(f"/sentiment/price-metrics/{quote(str(identifier))}", params)
|
|
52
|
+
async def sector_metrics(self, **params: Any) -> Any:
|
|
53
|
+
"""Sector Metrics API"""
|
|
54
|
+
return await self._get("/sentiment/sector-metrics", params)
|
|
55
|
+
async def social(self, ticker: str, **params: Any) -> Any:
|
|
56
|
+
"""Reddit Social Sentiment API"""
|
|
57
|
+
return await self._get(f"/sentiment/social/{quote(str(ticker))}", params)
|
|
58
|
+
async def social_sentiment(self, identifier: str, **params: Any) -> Any:
|
|
59
|
+
"""Social Sentiment API"""
|
|
60
|
+
return await self._get(f"/sentiment/social-sentiment/{quote(str(identifier))}", params)
|
|
@@ -0,0 +1,58 @@
|
|
|
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 Shipping(SyncResource):
|
|
10
|
+
def cargoes(self, **params: Any) -> Any:
|
|
11
|
+
"""Cargo Movements"""
|
|
12
|
+
return self._get("/shipping/cargoes", params)
|
|
13
|
+
def ports(self, **params: Any) -> Any:
|
|
14
|
+
"""Ports"""
|
|
15
|
+
return self._get("/shipping/ports", params)
|
|
16
|
+
def ports_activity(self, id: str, **params: Any) -> Any:
|
|
17
|
+
"""Port Activity"""
|
|
18
|
+
return self._get(f"/shipping/ports/{quote(str(id))}/activity", params)
|
|
19
|
+
def positions(self, **params: Any) -> Any:
|
|
20
|
+
"""Current Positions"""
|
|
21
|
+
return self._get("/shipping/positions", params)
|
|
22
|
+
def vessels(self, imo: Optional[str] = None, **params: Any) -> Any:
|
|
23
|
+
"""Vessel Details"""
|
|
24
|
+
if imo is not None:
|
|
25
|
+
return self._get(f"/shipping/vessels/{quote(str(imo))}", params)
|
|
26
|
+
return self._get("/shipping/vessels", params)
|
|
27
|
+
def vessels_track(self, imo: str, **params: Any) -> Any:
|
|
28
|
+
"""Vessel Track"""
|
|
29
|
+
return self._get(f"/shipping/vessels/{quote(str(imo))}/track", params)
|
|
30
|
+
def voyages(self, **params: Any) -> Any:
|
|
31
|
+
"""Active Voyages"""
|
|
32
|
+
return self._get("/shipping/voyages", params)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class AsyncShipping(AsyncResource):
|
|
36
|
+
async def cargoes(self, **params: Any) -> Any:
|
|
37
|
+
"""Cargo Movements"""
|
|
38
|
+
return await self._get("/shipping/cargoes", params)
|
|
39
|
+
async def ports(self, **params: Any) -> Any:
|
|
40
|
+
"""Ports"""
|
|
41
|
+
return await self._get("/shipping/ports", params)
|
|
42
|
+
async def ports_activity(self, id: str, **params: Any) -> Any:
|
|
43
|
+
"""Port Activity"""
|
|
44
|
+
return await self._get(f"/shipping/ports/{quote(str(id))}/activity", params)
|
|
45
|
+
async def positions(self, **params: Any) -> Any:
|
|
46
|
+
"""Current Positions"""
|
|
47
|
+
return await self._get("/shipping/positions", params)
|
|
48
|
+
async def vessels(self, imo: Optional[str] = None, **params: Any) -> Any:
|
|
49
|
+
"""Vessel Details"""
|
|
50
|
+
if imo is not None:
|
|
51
|
+
return await self._get(f"/shipping/vessels/{quote(str(imo))}", params)
|
|
52
|
+
return await self._get("/shipping/vessels", params)
|
|
53
|
+
async def vessels_track(self, imo: str, **params: Any) -> Any:
|
|
54
|
+
"""Vessel Track"""
|
|
55
|
+
return await self._get(f"/shipping/vessels/{quote(str(imo))}/track", params)
|
|
56
|
+
async def voyages(self, **params: Any) -> Any:
|
|
57
|
+
"""Active Voyages"""
|
|
58
|
+
return await self._get("/shipping/voyages", params)
|
|
@@ -0,0 +1,82 @@
|
|
|
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 Singapore(SyncResource):
|
|
10
|
+
def acra(self, uen: Optional[str] = None, **params: Any) -> Any:
|
|
11
|
+
"""ACRA Financials by UEN"""
|
|
12
|
+
if uen is not None:
|
|
13
|
+
return self._get(f"/singapore/acra/{quote(str(uen))}", params)
|
|
14
|
+
return self._get("/singapore/acra", params)
|
|
15
|
+
def announcements(self, **params: Any) -> Any:
|
|
16
|
+
"""SGX Announcements API"""
|
|
17
|
+
return self._get("/singapore/announcements", params)
|
|
18
|
+
def corporate_actions(self, **params: Any) -> Any:
|
|
19
|
+
"""SGX Corporate Actions API"""
|
|
20
|
+
return self._get("/singapore/corporate-actions", params)
|
|
21
|
+
def economic_stats(self, **params: Any) -> Any:
|
|
22
|
+
"""Singapore Economic Statistics API"""
|
|
23
|
+
return self._get("/singapore/economic-stats", params)
|
|
24
|
+
def economic_stats_series(self, **params: Any) -> Any:
|
|
25
|
+
"""Singapore Economic Stats Series List"""
|
|
26
|
+
return self._get("/singapore/economic-stats/series", params)
|
|
27
|
+
def insider_trades(self, **params: Any) -> Any:
|
|
28
|
+
"""SGX Insider Trades API"""
|
|
29
|
+
return self._get("/singapore/insider-trades", params)
|
|
30
|
+
def mas_exchange_rates(self, **params: Any) -> Any:
|
|
31
|
+
"""MAS Exchange Rates API"""
|
|
32
|
+
return self._get("/singapore/mas/exchange-rates", params)
|
|
33
|
+
def mas_interest_rates(self, **params: Any) -> Any:
|
|
34
|
+
"""MAS Interest Rates API"""
|
|
35
|
+
return self._get("/singapore/mas/interest-rates", params)
|
|
36
|
+
def mas_money_supply(self, **params: Any) -> Any:
|
|
37
|
+
"""MAS Money Supply API"""
|
|
38
|
+
return self._get("/singapore/mas/money-supply", params)
|
|
39
|
+
def reits(self, **params: Any) -> Any:
|
|
40
|
+
"""S-REIT Metrics API"""
|
|
41
|
+
return self._get("/singapore/reits", params)
|
|
42
|
+
def reits_list(self, **params: Any) -> Any:
|
|
43
|
+
"""S-REIT List API"""
|
|
44
|
+
return self._get("/singapore/reits/list", params)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class AsyncSingapore(AsyncResource):
|
|
48
|
+
async def acra(self, uen: Optional[str] = None, **params: Any) -> Any:
|
|
49
|
+
"""ACRA Financials by UEN"""
|
|
50
|
+
if uen is not None:
|
|
51
|
+
return await self._get(f"/singapore/acra/{quote(str(uen))}", params)
|
|
52
|
+
return await self._get("/singapore/acra", params)
|
|
53
|
+
async def announcements(self, **params: Any) -> Any:
|
|
54
|
+
"""SGX Announcements API"""
|
|
55
|
+
return await self._get("/singapore/announcements", params)
|
|
56
|
+
async def corporate_actions(self, **params: Any) -> Any:
|
|
57
|
+
"""SGX Corporate Actions API"""
|
|
58
|
+
return await self._get("/singapore/corporate-actions", params)
|
|
59
|
+
async def economic_stats(self, **params: Any) -> Any:
|
|
60
|
+
"""Singapore Economic Statistics API"""
|
|
61
|
+
return await self._get("/singapore/economic-stats", params)
|
|
62
|
+
async def economic_stats_series(self, **params: Any) -> Any:
|
|
63
|
+
"""Singapore Economic Stats Series List"""
|
|
64
|
+
return await self._get("/singapore/economic-stats/series", params)
|
|
65
|
+
async def insider_trades(self, **params: Any) -> Any:
|
|
66
|
+
"""SGX Insider Trades API"""
|
|
67
|
+
return await self._get("/singapore/insider-trades", params)
|
|
68
|
+
async def mas_exchange_rates(self, **params: Any) -> Any:
|
|
69
|
+
"""MAS Exchange Rates API"""
|
|
70
|
+
return await self._get("/singapore/mas/exchange-rates", params)
|
|
71
|
+
async def mas_interest_rates(self, **params: Any) -> Any:
|
|
72
|
+
"""MAS Interest Rates API"""
|
|
73
|
+
return await self._get("/singapore/mas/interest-rates", params)
|
|
74
|
+
async def mas_money_supply(self, **params: Any) -> Any:
|
|
75
|
+
"""MAS Money Supply API"""
|
|
76
|
+
return await self._get("/singapore/mas/money-supply", params)
|
|
77
|
+
async def reits(self, **params: Any) -> Any:
|
|
78
|
+
"""S-REIT Metrics API"""
|
|
79
|
+
return await self._get("/singapore/reits", params)
|
|
80
|
+
async def reits_list(self, **params: Any) -> Any:
|
|
81
|
+
"""S-REIT List API"""
|
|
82
|
+
return await self._get("/singapore/reits/list", params)
|
|
@@ -0,0 +1,40 @@
|
|
|
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 Transcripts(SyncResource):
|
|
10
|
+
def calls(self, identifier: str, callId: Optional[str] = None, **params: Any) -> Any:
|
|
11
|
+
"""Full Transcript"""
|
|
12
|
+
if callId is not None:
|
|
13
|
+
return self._get(f"/transcripts/calls/{quote(str(identifier))}/{quote(str(callId))}", params)
|
|
14
|
+
return self._get(f"/transcripts/calls/{quote(str(identifier))}", params)
|
|
15
|
+
def calls_nlp(self, identifier: str, callId: str, **params: Any) -> Any:
|
|
16
|
+
"""Transcript NLP Analysis"""
|
|
17
|
+
return self._get(f"/transcripts/calls/{quote(str(identifier))}/{quote(str(callId))}/nlp", params)
|
|
18
|
+
def search(self, **params: Any) -> Any:
|
|
19
|
+
"""Search Transcripts"""
|
|
20
|
+
return self._get("/transcripts/search", params)
|
|
21
|
+
def sentiment_trend(self, identifier: str, **params: Any) -> Any:
|
|
22
|
+
"""Sentiment Trend"""
|
|
23
|
+
return self._get(f"/transcripts/sentiment-trend/{quote(str(identifier))}", params)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AsyncTranscripts(AsyncResource):
|
|
27
|
+
async def calls(self, identifier: str, callId: Optional[str] = None, **params: Any) -> Any:
|
|
28
|
+
"""Full Transcript"""
|
|
29
|
+
if callId is not None:
|
|
30
|
+
return await self._get(f"/transcripts/calls/{quote(str(identifier))}/{quote(str(callId))}", params)
|
|
31
|
+
return await self._get(f"/transcripts/calls/{quote(str(identifier))}", params)
|
|
32
|
+
async def calls_nlp(self, identifier: str, callId: str, **params: Any) -> Any:
|
|
33
|
+
"""Transcript NLP Analysis"""
|
|
34
|
+
return await self._get(f"/transcripts/calls/{quote(str(identifier))}/{quote(str(callId))}/nlp", params)
|
|
35
|
+
async def search(self, **params: Any) -> Any:
|
|
36
|
+
"""Search Transcripts"""
|
|
37
|
+
return await self._get("/transcripts/search", params)
|
|
38
|
+
async def sentiment_trend(self, identifier: str, **params: Any) -> Any:
|
|
39
|
+
"""Sentiment Trend"""
|
|
40
|
+
return await self._get(f"/transcripts/sentiment-trend/{quote(str(identifier))}", params)
|
|
@@ -0,0 +1,18 @@
|
|
|
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 Trends(SyncResource):
|
|
10
|
+
def ticker_trends(self, symbol: str, **params: Any) -> Any:
|
|
11
|
+
"""Ticker and Trends API"""
|
|
12
|
+
return self._get(f"/trends/ticker-trends/{quote(str(symbol))}", params)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class AsyncTrends(AsyncResource):
|
|
16
|
+
async def ticker_trends(self, symbol: str, **params: Any) -> Any:
|
|
17
|
+
"""Ticker and Trends API"""
|
|
18
|
+
return await self._get(f"/trends/ticker-trends/{quote(str(symbol))}", params)
|
|
@@ -0,0 +1,28 @@
|
|
|
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 Vendor(SyncResource):
|
|
10
|
+
def catalog(self, **params: Any) -> Any:
|
|
11
|
+
"""Vendor Warehouse Catalog"""
|
|
12
|
+
return self._get("/vendor/catalog", params)
|
|
13
|
+
def get(self, vendor: str, dataset: str, key: Optional[str] = None, **params: Any) -> Any:
|
|
14
|
+
"""Vendor Keyed Snapshot"""
|
|
15
|
+
if key is not None:
|
|
16
|
+
return self._get(f"/vendor/{quote(str(vendor))}/{quote(str(dataset))}/{quote(str(key))}", params)
|
|
17
|
+
return self._get(f"/vendor/{quote(str(vendor))}/{quote(str(dataset))}", params)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class AsyncVendor(AsyncResource):
|
|
21
|
+
async def catalog(self, **params: Any) -> Any:
|
|
22
|
+
"""Vendor Warehouse Catalog"""
|
|
23
|
+
return await self._get("/vendor/catalog", params)
|
|
24
|
+
async def get(self, vendor: str, dataset: str, key: Optional[str] = None, **params: Any) -> Any:
|
|
25
|
+
"""Vendor Keyed Snapshot"""
|
|
26
|
+
if key is not None:
|
|
27
|
+
return await self._get(f"/vendor/{quote(str(vendor))}/{quote(str(dataset))}/{quote(str(key))}", params)
|
|
28
|
+
return await self._get(f"/vendor/{quote(str(vendor))}/{quote(str(dataset))}", params)
|