Internal Architecture#
Edgar-SEC is built to be modular, typed, and asynchronous-ready, designed for scalable, secure interaction with the SEC EDGAR® API.
This page outlines the internal client structure, core mechanisms, and the design philosophy guiding Edgar-SEC.
—
Class Hierarchy Overview#
Expand Class Hierarchy
edgar_sec.EdgarAPI
(main sync client)edgar_sec.AsyncAPI
(async client variant)
➤ Call EdgarAPI().Async to access async methods for each endpoint.➤ Use edgar_sec.EdgarHelpers for static utility helpers like CIK resolution.
See Edgar-SEC API Overview for endpoint-specific breakdowns.
—
Key Internal Mechanisms#
Enforces EDGAR’s safe usage limits using a timestamp-based limiter. Prevents accidental denial-of-service and burst requests.
Automatic retry on network failures via tenacity with exponential backoff. Applies to all sync and async endpoints.
File-based FIFO cache system stores successful responses. Enabled via cache_mode=True and configurable with cache_size.
Fully async using httpx.AsyncClient + asyncio.Lock. Supports concurrent SEC submission fetches with minimal blocking.
All endpoints return structured, type-safe objects like:
Enforces safe unpacking, IDE integration, and schema reliability.
Parameter conversion, type coercion, and validation handled through shared static methods. Ensures consistent behavior between sync and async clients.
—
Design Philosophy#
Principles Behind the Package
Type-Safe: Uses Python
dataclasses.dataclass
models for every response.Async-Ready: Fully asynchronous client with sync fallback.
Performant: Built-in caching, retry logic, and minimal overhead.
Robust: Validates inputs and ensures graceful failure modes.
Developer-Oriented: Concise naming, inline docs, static typing, and modern architecture.
—