Releases: ronaldvdmeer/python-eveonline
Releases · ronaldvdmeer/python-eveonline
v0.4.0
What's new
New endpoint
async_get_killmails()— fetch a character's recent killmails (requiresesi-killmails.read_killmails.v1scope)
Automatic pagination
async_get_wallet_journal(),async_get_contacts(), andasync_get_killmails()now automatically fetch all pages and return a single combined list- No API changes required — callers always receive the complete dataset
TTL/Expires caching
- The client now respects the ESI
Expiresheader: if a cached response has not yet expired, the HTTP request is skipped entirely and the cached data is returned immediately - Combined with existing ETag/304 caching, this gives two layers of cache protection
Integration tests
- Integration test suite expanded to 27 tests covering all major endpoints
- New tests:
test_corporation_public_live,test_killmails_live,test_etag_caching_round_trip_live,test_etag_cache_populated_after_request_live,test_expires_header_sets_ttl_in_cache_live
Documentation
- Endpoint count corrected to 23
- Authentication scope table completed (all scopes listed)
- New pagination and request caching reference sections in
docs/endpoints.mdanddocs/quickstart.md
Stats
- 172 tests, 98.04% coverage
- pylint 10.00/10, ruff clean, mypy clean
v0.3.0
What's new
ETag/conditional-request caching
- All ESI GET endpoints now send
If-None-Matchon repeated calls within the same client instance - HTTP 304 returns cached data without parsing a response body, reducing bandwidth and ESI rate-limit pressure
- Public and authenticated endpoints use separate cache keys
- New
clear_etag_cache()public method to reset the in-memory cache
Bug fixes
response.release()is now called correctly (synchronous in aiohttp ≥3.9) before returning on 304- Response body is now drained before raising
EveOnlineNotFoundError(404) andEveOnlineRateLimitError(420/429), preventing connection pool exhaustion under repeated errors
Stats
- 159 tests, 98.21% coverage
- pylint 10.00/10, ruff clean, mypy clean
v0.2.2
Bug Fixes
- Export
EveOnlineNotFoundErrorfrom package root - previously only accessible viaeveonline.exceptions - Handle non-numeric
Retry-Afterheader - HTTP date values no longer crash withValueError
Improvements
- Remove redundant
.replace("Z", "+00:00")- Python >=3.11 handles Z suffix natively - Use
_parse_datetimeconsistently for all optional datetime fields - Change
DEFAULT_SCOPESfrom mutablelistto immutabletuple - Add
from __future__ import annotationsto all modules - Add
slots=Trueto all 15 frozen dataclasses for reduced memory usage - Single-source version via
importlib.metadata(no more hardcoded version string) - Add
Attributes:sections to all model docstrings (Google style) - Document
EveOnlineRateLimitError.retry_afterparameter
Tests
Expanded from 91 to 115 tests (99.35% coverage):
- Non-numeric and missing
Retry-Afterheader handling - HTTP 400 generic error
_parse_datetimeedge cases (None, Z suffix, +00:00 offset, invalid input)- HTTP 404 on authenticated endpoint
EveOnlineNotFoundErrortop-level export verification- Parametrized
__slots__verification for all 15 models
v0.2.1
Initial public release of python-eveonline — an async Python client for the Eve Online ESI API.
Features
- Async client built on aiohttp
- Full support for Tranquility server status (public endpoint)
- Authenticated endpoints for character data: online status, location, ship, wallet, skills, skill queue, mail labels, industry jobs, market orders, jump fatigue
- Batch ID-to-name resolution via universe/names endpoint
- Abstract auth class for flexible token management (e.g. Home Assistant OAuth2)
- Typed dataclass models for all API responses
- Comprehensive exception hierarchy (auth, connection, rate limit, not found)
- Fully type-hinted with py.typed marker