Changelog ========= v0.1.7 (2026-03-02) -------------------- - Fix ``search_instruments`` ``fields`` parameter: make it optional so omitting it lets the API return all available fields instead of forcing a broken projection - Add ``internal_symbol_full`` field to ``InstrumentSearchItem`` model — the key field used by the eToro API for exact symbol matching - Remove broken ``fields="instrumentId"`` projection from ``InstrumentResolver`` search calls - Document that the search endpoint is for ID resolution only; display metadata (``displayname``, ``exchangeID``) requires ``get_instruments()`` v0.1.6 (2026-03-01) -------------------- - Handle WebSocket instrument heartbeat messages that lack bid/ask data instead of logging parse errors - Add ``Makefile`` with ``make check`` to reproduce CI steps locally (lint, format, typecheck, test) - Add public observer demobot notebook example - Fix redundant cast in discovery client (mypy strict) - Fix line-too-long lint error in HTTP client error message v0.1.5 (2026-02-28) -------------------- - Fix SDK endpoint paths verified against real eToro API and add comprehensive integration test suite (41 tests covering all REST sub-clients) - Make ``InstrumentImage`` ``uri`` and ``color`` fields nullable to match actual API responses - Align ``InstrumentImage`` and ``ClosingPrice`` models with actual API response schemas - Add project badges to README v0.1.4 (2026-02-27) -------------------- - Fix ``ValidationError`` on candle volume: allow ``None`` from API responses where volume data is unavailable v0.1.3 (2026-02-27) -------------------- - Make rate limiter configurable via ``EToroConfig`` fields and environment variables (``ETORO_RATE_LIMIT``, ``ETORO_RATE_LIMIT_MAX_REQUESTS``, ``ETORO_RATE_LIMIT_WINDOW``) - Allow disabling rate limiting entirely by setting ``rate_limit=False`` - ``HttpClient`` now builds ``RateLimiterOptions`` from config when no explicit ``rate_limiter`` argument is provided v0.1.2 (2026-02-26) -------------------- - Fix WebSocket auth deadlock: start receive loop before ``_authenticate()`` - Fix binary frame handling: skip bytes messages, pass text directly without ``str()`` wrapping - Add 15 unit tests for ``WsClient`` (event emitter, auth flow, binary frames, disconnect, error paths) - Migrate ``.claude/commands/`` templates from npm/Node.js to Python tooling v0.1.1 (2026-02-26) -------------------- - Add Sphinx documentation site with Furo theme and autodoc API reference - Add quickstart, architecture, and examples guides - Add GitHub Actions workflow for automatic docs deploy to GitHub Pages v0.1.0 (2025) -------------- Initial release. - 42+ REST endpoints across 9 sub-clients (market data, trading execution, trading info, watchlists, feeds, reactions, discovery, user info, PI data) - Real-time WebSocket streaming with auto-reconnect and heartbeat - :class:`~etoropy.EToroTrading` high-level client with event emitter - :class:`~etoropy.InstrumentResolver` with bundled 5,200+ symbol CSV - Token-bucket rate limiter and exponential-backoff retry - Full type hints (mypy strict) and Pydantic v2 models - Demo and real trading mode support