Source code for etoropy.rest.rest_client
from __future__ import annotations
from typing import Any
from ..config.settings import EToroConfig
from ..http.client import HttpClient
from .discovery import DiscoveryClient
from .feeds import FeedsClient
from .market_data import MarketDataClient
from .pi_data import PiDataClient
from .reactions import ReactionsClient
from .trading_execution import TradingExecutionClient
from .trading_info import TradingInfoClient
from .users_info import UsersInfoClient
from .watchlists import WatchlistsClient
[docs]
class RestClient:
"""Facade that composes all eToro REST sub-clients.
:ivar market_data: Instruments, rates, candles, exchanges (8 endpoints).
:ivar execution: Open/close/cancel orders (7 endpoints, demo/real routing).
:ivar info: Portfolio, PnL, order status, trade history (4 endpoints).
:ivar watchlists: CRUD for watchlists (14 endpoints).
:ivar feeds: Social feed posts per instrument/user (3 endpoints).
:ivar reactions: Comment on posts (1 endpoint).
:ivar discovery: Curated lists and recommendations (2 endpoints).
:ivar pi_data: Copier public info (1 endpoint).
:ivar users_info: User profiles, portfolios, performance (6 endpoints).
"""
def __init__(self, config: EToroConfig, http: HttpClient | None = None) -> None:
self._http = http or HttpClient(config)
mode = config.mode
self.market_data = MarketDataClient(self._http)
self.execution = TradingExecutionClient(self._http, mode)
self.info = TradingInfoClient(self._http, mode)
self.feeds = FeedsClient(self._http)
self.reactions = ReactionsClient(self._http)
self.discovery = DiscoveryClient(self._http)
self.pi_data = PiDataClient(self._http)
self.watchlists = WatchlistsClient(self._http)
self.users_info = UsersInfoClient(self._http)
[docs]
async def aclose(self) -> None:
await self._http.aclose()
async def __aenter__(self) -> RestClient:
return self
async def __aexit__(self, *args: Any) -> None:
await self.aclose()