imednet.core package
- The
Client
emits JSON formatted logs and can record OpenTelemetry spans when a tracer is provided. See Logging and Tracing for details.
Submodules
imednet.core.client module
Core HTTP client for interacting with the iMednet REST API.
This module defines the Client class which handles: - Authentication headers (API key and security key). - Configuration of base URL, timeouts, and retry logic. - Making HTTP GET and POST requests. - Error mapping to custom exceptions. - Context-manager support for automatic cleanup.
- class imednet.core.client.Client(api_key=None, security_key=None, base_url=None, timeout=30.0, retries=3, backoff_factor=1.0, log_level=20, tracer=None, retry_policy=None)[source]
Bases:
HTTPClientBase
Core HTTP client for the iMednet API.
- Parameters:
api_key (Optional[str]) –
security_key (Optional[str]) –
base_url (Optional[str]) –
timeout (Union[float, httpx.Timeout]) –
retries (int) –
backoff_factor (float) –
log_level (Union[int, str]) –
tracer (Optional[Tracer]) –
retry_policy (RetryPolicy | None) –
- base_url
Base URL for API requests.
- timeout
Default timeout for requests.
- retries
Number of retry attempts for transient errors.
- backoff_factor
Multiplier for exponential backoff.
- HTTPX_CLIENT_CLS
alias of
Client
- IS_ASYNC: bool = False
imednet.core.base_client module
- class imednet.core.base_client.BaseClient(api_key=None, security_key=None, base_url=None, timeout=30.0, retries=3, backoff_factor=1.0, log_level=20, tracer=None)[source]
Bases:
object
Common initialization logic for HTTP clients.
- Parameters:
api_key (Optional[str]) –
security_key (Optional[str]) –
base_url (Optional[str]) –
timeout (Union[float, httpx.Timeout]) –
retries (int) –
backoff_factor (float) –
log_level (Union[int, str]) –
tracer (Optional[Tracer]) –
- DEFAULT_BASE_URL = 'https://edc.prod.imednetapi.com'
imednet.core.context module
Logging and tracing
The imednet.core.client.Client
can emit JSON formatted logs of each HTTP
request when you configure logging:
from imednet.utils import configure_json_logging
from imednet.core.client import Client
configure_json_logging()
client = Client(api_key="...", security_key="...", log_level="INFO")
If opentelemetry
is installed, pass a tracer instance or rely on the global
tracer provider. Each request is executed within a span and works with
opentelemetry-instrumentation-httpx
for automatic context propagation of the
HTTPX requests used by the SDK:
from opentelemetry import trace
from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor
HTTPXClientInstrumentor().instrument()
tracer = trace.get_tracer("my-app")
client = Client(api_key="...", security_key="...", tracer=tracer)
Manage mutable SDK context, like default study key.
- class imednet.core.context.Context(default_study_key=None)[source]
Bases:
object
Holds default values for SDK calls, such as default study key.
- Parameters:
default_study_key (str | None) –
- clear_default_study_key()[source]
Clear the default study key.
- Return type:
None
-
default_study_key:
Optional
[str
] = None Default study key for API calls. :noindex:
- set_default_study_key(study_key)[source]
Set the default study key to use for subsequent API calls.
- Parameters:
study_key (
str
) – The study key string.- Return type:
None
imednet.core.exceptions module
Custom exceptions for the iMednet SDK.
Defines a hierarchy of exceptions corresponding to HTTP and validation errors.
- exception imednet.core.exceptions.ApiError(response, status_code=None)[source]
Bases:
ImednetError
Raised for generic API errors (non-2xx HTTP status codes).
- Parameters:
response (Any) –
status_code (int | None) –
- Return type:
None
- status_code
HTTP status code returned by the API.
- response
Parsed JSON or raw text of the error response.
- exception imednet.core.exceptions.AuthenticationError(response, status_code=None)[source]
Bases:
ApiError
Raised when authentication to the API fails (HTTP 401).
- Parameters:
response (Any) –
status_code (int | None) –
- Return type:
None
- exception imednet.core.exceptions.AuthorizationError(response, status_code=None)[source]
Bases:
ApiError
Raised when access to the API is forbidden (HTTP 403).
- Parameters:
response (Any) –
status_code (int | None) –
- Return type:
None
- exception imednet.core.exceptions.BadRequestError(response, status_code=None)[source]
Bases:
ValidationError
Raised for HTTP 400 bad requests.
- Parameters:
response (Any) –
status_code (int | None) –
- Return type:
None
- exception imednet.core.exceptions.ConflictError(response, status_code=None)[source]
Bases:
ApiError
Raised for HTTP 409 conflict errors.
- Parameters:
response (Any) –
status_code (int | None) –
- Return type:
None
- exception imednet.core.exceptions.ForbiddenError(response, status_code=None)[source]
Bases:
AuthorizationError
Raised for HTTP 403 forbidden errors.
- Parameters:
response (Any) –
status_code (int | None) –
- Return type:
None
- exception imednet.core.exceptions.ImednetError[source]
Bases:
Exception
Base exception for all iMednet SDK errors.
- exception imednet.core.exceptions.NotFoundError(response, status_code=None)[source]
Bases:
ApiError
Raised when a requested resource is not found (HTTP 404).
- Parameters:
response (Any) –
status_code (int | None) –
- Return type:
None
- exception imednet.core.exceptions.RateLimitError(response, status_code=None)[source]
Bases:
ApiError
Raised when the API rate limit is exceeded (HTTP 429).
- Parameters:
response (Any) –
status_code (int | None) –
- Return type:
None
- exception imednet.core.exceptions.RequestError[source]
Bases:
ImednetError
Raised when a network request fails after retries.
- exception imednet.core.exceptions.ServerError(response, status_code=None)[source]
Bases:
ApiError
Raised when the API returns a server error (HTTP 5xx).
- Parameters:
response (Any) –
status_code (int | None) –
- Return type:
None
- exception imednet.core.exceptions.UnauthorizedError(response, status_code=None)[source]
Bases:
AuthenticationError
Raised for HTTP 401 unauthorized errors.
- Parameters:
response (Any) –
status_code (int | None) –
- Return type:
None
- exception imednet.core.exceptions.UnknownVariableTypeError(response, status_code=None)[source]
Bases:
ValidationError
Raised when an unrecognized variable type is encountered.
- Parameters:
response (Any) –
status_code (int | None) –
- Return type:
None
imednet.core.paginator module
Pagination helpers for iterating through API responses.
- class imednet.core.paginator.AsyncPaginator(client, path, params=None, page_size=100, page_param='page', size_param='size', data_key='data', metadata_key='metadata')[source]
Bases:
BasePaginator
Asynchronous variant of
Paginator
.- Parameters:
client (Any) –
path (str) –
params (Dict[str, Any] | None) –
page_size (int) –
page_param (str) –
size_param (str) –
data_key (str) –
metadata_key (str) –
- class imednet.core.paginator.BasePaginator(client, path, params=None, page_size=100, page_param='page', size_param='size', data_key='data', metadata_key='metadata')[source]
Bases:
object
Shared paginator implementation.
- Parameters:
client (Any) –
path (str) –
params (Dict[str, Any] | None) –
page_size (int) –
page_param (str) –
size_param (str) –
data_key (str) –
metadata_key (str) –
- class imednet.core.paginator.Paginator(client, path, params=None, page_size=100, page_param='page', size_param='size', data_key='data', metadata_key='metadata')[source]
Bases:
BasePaginator
Iterate synchronously over paginated API results.
- Parameters:
client (Any) –
path (str) –
params (Dict[str, Any] | None) –
page_size (int) –
page_param (str) –
size_param (str) –
data_key (str) –
metadata_key (str) –
Retry policy
The RetryPolicy
interface controls if failed
requests should be retried. The SDK uses
DefaultRetryPolicy
which retries when httpx
raises a
RequestError
. Provide your own policy to customize this behaviour.
from imednet.core.client import Client
from imednet.core.retry import RetryPolicy, RetryState
from imednet.core.exceptions import ServerError
class ServerRetry(RetryPolicy):
def should_retry(self, state: RetryState) -> bool:
return isinstance(state.exception, ServerError)
client = Client("A", "B", retry_policy=ServerRetry())