request_executor
¶
API Request Executor module.
Handles HTTP request execution with retry logic, rate limiting, caching, and response processing for external API calls.
ApiRequestExecutor
¶
ApiRequestExecutor(
*,
cache_service,
rate_limiters,
console_logger,
error_logger,
user_agent,
discogs_token,
cache_ttl_days,
default_max_retries,
default_retry_delay
)
Executes HTTP requests with retry logic, rate limiting, and caching.
Handles all low-level HTTP communication including: - Request preparation (headers, timeouts) - Rate limiting coordination - Retry with exponential backoff - Response parsing and validation - Cache integration
Important
Session lifecycle is managed by ExternalApiOrchestrator, NOT here. This executor only holds a session reference set via set_session(). It may clear this reference on errors (e.g., event loop closed), but it will NEVER close the session. Closing is the owner's responsibility.
Initialize the API request executor.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cache_service
|
CacheServiceProtocol
|
Cache service for storing/retrieving API responses |
required |
rate_limiters
|
dict[str, ApiRateLimiter]
|
Dict mapping API names to rate limiters |
required |
console_logger
|
Logger
|
Logger for info/debug messages |
required |
error_logger
|
Logger
|
Logger for errors/warnings |
required |
user_agent
|
str
|
User-Agent header for requests |
required |
discogs_token
|
str | None
|
Discogs API authentication token |
required |
cache_ttl_days
|
int
|
How long to cache API responses (days) |
required |
default_max_retries
|
int
|
Default retry count for failed requests |
required |
default_retry_delay
|
float
|
Base delay between retries (seconds) |
required |
Source code in src/services/api/request_executor.py
set_session
¶
execute_request
async
¶
execute_request(
api_name,
url,
params=None,
headers_override=None,
max_retries=None,
base_delay=None,
timeout_override=None,
)
Execute an API request with rate limiting, caching, and retry logic.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
api_name
|
str
|
Name of the API (e.g., 'discogs', 'musicbrainz') |
required |
url
|
str
|
Request URL |
required |
params
|
dict[str, str] | None
|
Query parameters |
None
|
headers_override
|
dict[str, str] | None
|
Additional headers to merge |
None
|
max_retries
|
int | None
|
Override default retry count |
None
|
base_delay
|
float | None
|
Override default retry delay |
None
|
timeout_override
|
float | None
|
Override default timeout |
None
|
Returns:
| Type | Description |
|---|---|
dict[str, Any] | None
|
Parsed JSON response dict, or None if request failed |