requests-connection-manager


Namerequests-connection-manager JSON
Version 1.0.0 PyPI version JSON
download
home_pageNone
SummaryA Python package that extends requests with connection pooling, retries, rate limiting, and circuit breaker functionality
upload_time2025-07-08 15:58:31
maintainerNone
docs_urlNone
authorCharles Gude
requires_python<4.0,>=3.9
licenseMIT
keywords requests http connection pooling retry rate-limiting circuit-breaker
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # requests-connection-manager

[![Python Version](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://python.org)
[![Tests](https://img.shields.io/badge/tests-31%20passing-green.svg)](https://github.com/charlesgude/requests-connection-manager/actions)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)

A robust Python package that extends the popular `requests` library with advanced connection management features including connection pooling, automatic retries, rate limiting, and circuit breaker functionality. Built for production use with comprehensive testing and thread-safe operations.

## Features

- **Connection Pooling**: Efficient connection reuse with configurable pool sizes
- **Automatic Retries**: Smart retry logic with exponential backoff for failed requests
- **Rate Limiting**: Built-in request throttling to prevent API abuse
- **Circuit Breaker**: Fail-fast pattern to handle service failures gracefully
- **Thread Safety**: Safe for use in multi-threaded applications
- **Drop-in Replacement**: Compatible with existing `requests` code

## Installation

```bash
pip install requests-connection-manager
```

### Requirements

- Python 3.9 or higher
- See [Dependencies](#dependencies) section for package requirements

## Quick Start

```python
from requests_connection_manager import ConnectionManager

# Create a connection manager with default settings
manager = ConnectionManager()

# Make requests just like with the requests library
response = manager.get('https://api.example.com/data')
print(response.json())

# Use as a context manager for automatic cleanup
with ConnectionManager() as manager:
    response = manager.get('https://httpbin.org/get')
    print(f"Status: {response.status_code}")
```

## Configuration

Customize the connection manager with various options:

```python
manager = ConnectionManager(
    pool_connections=20,          # Number of connection pools
    pool_maxsize=20,             # Max connections per pool
    max_retries=5,               # Retry attempts
    backoff_factor=0.5,          # Retry delay multiplier
    rate_limit_requests=100,     # Requests per period
    rate_limit_period=60,        # Rate limit period (seconds)
    circuit_breaker_failure_threshold=10,  # Failures before opening circuit
    circuit_breaker_recovery_timeout=30,   # Recovery timeout (seconds)
    timeout=30                   # Default request timeout
)
```

### Per-Endpoint Configuration

Configure different settings for specific endpoints or URL patterns:

```python
# Define endpoint-specific configurations
endpoint_configs = {
    'api.example.com': {
        'timeout': 60,
        'rate_limit_requests': 50,
        'rate_limit_period': 60,
        'max_retries': 5,
        'circuit_breaker_failure_threshold': 10
    },
    'slow-service.com': {
        'timeout': 120,
        'rate_limit_requests': 10,
        'rate_limit_period': 60,
        'backoff_factor': 1.0
    }
}

manager = ConnectionManager(
    timeout=30,  # Default timeout
    endpoint_configs=endpoint_configs
)

# Requests to api.example.com will use 60s timeout and 50 req/min limit
response = manager.get('https://api.example.com/data')

# Requests to other URLs will use default 30s timeout
response = manager.get('https://other-service.com/data')

# Endpoint-specific advanced connection options
endpoint_configs = {
    'secure-api.company.com': {
        'verify': '/path/to/company-ca.pem',
        'cert': ('/path/to/company-client.crt', '/path/to/company-client.key'),
        'connect_timeout': 2.0,
        'read_timeout': 45.0,
        'bearer_token': 'company-specific-token'
    },
    'public-api.example.com': {
        'verify': True,  # Use system CA bundle
        'connect_timeout': 5.0,
        'read_timeout': 15.0
    }
}

manager = ConnectionManager(endpoint_configs=endpoint_configs)
```

### Dynamic Endpoint Configuration

Add or modify endpoint configurations at runtime:

```python
manager = ConnectionManager()

# Add new endpoint configuration
manager.add_endpoint_config('new-api.com', {
    'timeout': 45,
    'rate_limit_requests': 75,
    'max_retries': 3
})

# Remove endpoint configuration
manager.remove_endpoint_config('old-api.com')

# View all endpoint configurations
configs = manager.get_endpoint_configs()
```

### Advanced Connection Options

ConnectionManager provides advanced SSL and connection configuration options:

```python
import ssl

# Custom SSL context
ssl_context = ssl.create_default_context()
ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2

manager = ConnectionManager(
    # SSL certificate verification
    verify="/path/to/custom-ca-bundle.pem",  # Custom CA bundle
    # verify=False,  # Disable SSL verification (not recommended)
    
    # Client certificates for mutual TLS
    cert="/path/to/client.pem",  # Single file with cert and key
    # cert=("/path/to/client.crt", "/path/to/client.key"),  # Separate files
    
    # Fine-grained timeouts
    connect_timeout=5.0,  # Connection timeout
    read_timeout=30.0,    # Read timeout
    
    # Custom SSL context
    ssl_context=ssl_context
)

# Update options after initialization
manager.set_ssl_verification("/path/to/new-ca-bundle.pem")
manager.set_client_certificate(("/path/to/cert.crt", "/path/to/key.key"))
manager.set_timeouts(connect_timeout=3.0, read_timeout=25.0)
manager.set_ssl_context(ssl_context)
```

### Authentication

ConnectionManager supports various authentication methods that can be applied globally or per-endpoint:

```python
# API Key authentication
manager = ConnectionManager(
    api_key="your-api-key",
    api_key_header="X-API-Key"  # Custom header name
)

# Bearer token authentication
manager = ConnectionManager(bearer_token="your-bearer-token")

# OAuth2 token authentication
manager = ConnectionManager(oauth2_token="your-oauth2-token")

# Basic authentication
manager = ConnectionManager(basic_auth=("username", "password"))

# Set authentication after initialization
manager.set_api_key("new-api-key", "Authorization")
manager.set_bearer_token("new-bearer-token")
manager.set_oauth2_token("new-oauth2-token")
manager.set_basic_auth("user", "pass")

# Endpoint-specific authentication
manager.set_endpoint_auth('api.service1.com', 'bearer', token='service1-token')
manager.set_endpoint_auth('api.service2.com', 'api_key', api_key='service2-key', header_name='X-Service2-Key')

# Clear authentication
manager.clear_auth()  # Global
manager.clear_auth('api.service1.com')  # Endpoint-specific
```

### Batch Requests

Perform multiple HTTP requests concurrently with controlled parallelism:

```python
# Define multiple requests
requests_data = [
    ('GET', 'https://api.example.com/users', {}),
    ('POST', 'https://api.example.com/data', {'json': {'key': 'value'}}),
    ('GET', 'https://api.example.com/status', {'timeout': 10})
]

# Execute concurrently with max 5 workers
results = manager.batch_request(requests_data, max_workers=5)

# Process results
for i, result in enumerate(results):
    if hasattr(result, 'status_code'):
        print(f"Request {i}: Success - {result.status_code}")
    else:
        print(f"Request {i}: Error - {result}")
```

## Usage Examples

### Basic HTTP Methods

```python
from requests_connection_manager import ConnectionManager

manager = ConnectionManager()

# GET request
response = manager.get('https://httpbin.org/get')

# POST request with JSON data
data = {'key': 'value'}
response = manager.post('https://httpbin.org/post', json=data)

# Custom headers
headers = {'Authorization': 'Bearer token'}
response = manager.get('https://api.example.com/protected', headers=headers)

manager.close()
```

### Advanced Features

```python
# Rate limiting automatically prevents excessive requests
manager = ConnectionManager(rate_limit_requests=10, rate_limit_period=60)

# Circuit breaker protects against failing services
manager = ConnectionManager(
    circuit_breaker_failure_threshold=5,
    circuit_breaker_recovery_timeout=60
)

# Automatic retries with exponential backoff
manager = ConnectionManager(max_retries=3, backoff_factor=0.3)
```

### Error Handling

```python
from requests_connection_manager import ConnectionManager
from requests_connection_manager.exceptions import (
    RateLimitExceeded,
    CircuitBreakerOpen,
    MaxRetriesExceeded
)

manager = ConnectionManager()

try:
    response = manager.get('https://api.example.com/data')
except RateLimitExceeded:
    print("Rate limit exceeded, please wait")
except CircuitBreakerOpen:
    print("Service is currently unavailable")
except MaxRetriesExceeded:
    print("Request failed after maximum retries")
```

### Thread Safety

```python
import threading
from requests_connection_manager import ConnectionManager

# Safe to use across multiple threads
manager = ConnectionManager()

def make_request(url):
    response = manager.get(url)
    return response.status_code

# Create multiple threads
threads = []
for i in range(10):
    thread = threading.Thread(target=make_request, args=(f'https://httpbin.org/get?id={i}',))
    threads.append(thread)
    thread.start()

# Wait for all threads to complete
for thread in threads:
    thread.join()

manager.close()
```



## API Reference

### ConnectionManager

The main class that provides enhanced HTTP functionality.

#### Methods

- `get(url, **kwargs)` - Make GET request
- `post(url, **kwargs)` - Make POST request  
- `put(url, **kwargs)` - Make PUT request
- `delete(url, **kwargs)` - Make DELETE request
- `patch(url, **kwargs)` - Make PATCH request
- `head(url, **kwargs)` - Make HEAD request
- `options(url, **kwargs)` - Make OPTIONS request
- `request(method, url, **kwargs)` - Make request with specified method
- `close()` - Close session and clean up resources
- `get_stats()` - Get current connection statistics

#### Configuration Parameters

- `pool_connections` (int): Number of connection pools to cache (default: 10)
- `pool_maxsize` (int): Maximum number of connections in each pool (default: 10)
- `max_retries` (int): Maximum number of retry attempts (default: 3)
- `backoff_factor` (float): Backoff factor for retries (default: 0.3)
- `rate_limit_requests` (int): Number of requests allowed per period (default: 100)
- `rate_limit_period` (int): Time period for rate limiting in seconds (default: 60)
- `circuit_breaker_failure_threshold` (int): Failures before opening circuit (default: 5)
- `circuit_breaker_recovery_timeout` (float): Recovery timeout for circuit breaker (default: 60)
- `timeout` (int): Default request timeout in seconds (default: 30)

## Dependencies

- `requests` >= 2.25.0
- `urllib3` >= 1.26.0
- `ratelimit` >= 2.2.1
- `pybreaker` >= 1.2.0

## License

MIT License

## Development

### Running Tests

The project includes a comprehensive test suite with 31 passing tests covering all major functionality:

```bash
# Install development dependencies
pip install pytest pytest-cov pytest-mock responses requests-mock

# Run tests
pytest tests/ -v

# Run tests with coverage
pytest tests/ --cov=requests_connection_manager --cov-report=html
```

### Documentation

Documentation is built using MkDocs and automatically deployed to GitHub Pages:

```bash
# Install documentation dependencies
pip install mkdocs mkdocs-material

# Serve documentation locally
mkdocs serve

# Deploy to GitHub Pages
mkdocs gh-deploy --force
```

View the live documentation at: [https://charlesgude.github.io/requests-connection-manager/](https://charlesgude.github.io/requests-connection-manager/)

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

### Development Setup

1. Clone the repository
2. Install Python 3.9 or higher
3. Install dependencies: `pip install -e .`
4. Run tests to verify setup: `pytest tests/`

## Changelog

See the [GitHub releases](https://github.com/charlesgude/requests-connection-manager/releases) for version history and changes.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "requests-connection-manager",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.9",
    "maintainer_email": null,
    "keywords": "requests, http, connection, pooling, retry, rate-limiting, circuit-breaker",
    "author": "Charles Gude",
    "author_email": "charles@example.com",
    "download_url": "https://files.pythonhosted.org/packages/a1/36/4c2e624f1abf83ad4883ff5e69b9c94bdc76554925d26dbb20711e9d1e8f/requests_connection_manager-1.0.0.tar.gz",
    "platform": null,
    "description": "# requests-connection-manager\n\n[![Python Version](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://python.org)\n[![Tests](https://img.shields.io/badge/tests-31%20passing-green.svg)](https://github.com/charlesgude/requests-connection-manager/actions)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\nA robust Python package that extends the popular `requests` library with advanced connection management features including connection pooling, automatic retries, rate limiting, and circuit breaker functionality. Built for production use with comprehensive testing and thread-safe operations.\n\n## Features\n\n- **Connection Pooling**: Efficient connection reuse with configurable pool sizes\n- **Automatic Retries**: Smart retry logic with exponential backoff for failed requests\n- **Rate Limiting**: Built-in request throttling to prevent API abuse\n- **Circuit Breaker**: Fail-fast pattern to handle service failures gracefully\n- **Thread Safety**: Safe for use in multi-threaded applications\n- **Drop-in Replacement**: Compatible with existing `requests` code\n\n## Installation\n\n```bash\npip install requests-connection-manager\n```\n\n### Requirements\n\n- Python 3.9 or higher\n- See [Dependencies](#dependencies) section for package requirements\n\n## Quick Start\n\n```python\nfrom requests_connection_manager import ConnectionManager\n\n# Create a connection manager with default settings\nmanager = ConnectionManager()\n\n# Make requests just like with the requests library\nresponse = manager.get('https://api.example.com/data')\nprint(response.json())\n\n# Use as a context manager for automatic cleanup\nwith ConnectionManager() as manager:\n    response = manager.get('https://httpbin.org/get')\n    print(f\"Status: {response.status_code}\")\n```\n\n## Configuration\n\nCustomize the connection manager with various options:\n\n```python\nmanager = ConnectionManager(\n    pool_connections=20,          # Number of connection pools\n    pool_maxsize=20,             # Max connections per pool\n    max_retries=5,               # Retry attempts\n    backoff_factor=0.5,          # Retry delay multiplier\n    rate_limit_requests=100,     # Requests per period\n    rate_limit_period=60,        # Rate limit period (seconds)\n    circuit_breaker_failure_threshold=10,  # Failures before opening circuit\n    circuit_breaker_recovery_timeout=30,   # Recovery timeout (seconds)\n    timeout=30                   # Default request timeout\n)\n```\n\n### Per-Endpoint Configuration\n\nConfigure different settings for specific endpoints or URL patterns:\n\n```python\n# Define endpoint-specific configurations\nendpoint_configs = {\n    'api.example.com': {\n        'timeout': 60,\n        'rate_limit_requests': 50,\n        'rate_limit_period': 60,\n        'max_retries': 5,\n        'circuit_breaker_failure_threshold': 10\n    },\n    'slow-service.com': {\n        'timeout': 120,\n        'rate_limit_requests': 10,\n        'rate_limit_period': 60,\n        'backoff_factor': 1.0\n    }\n}\n\nmanager = ConnectionManager(\n    timeout=30,  # Default timeout\n    endpoint_configs=endpoint_configs\n)\n\n# Requests to api.example.com will use 60s timeout and 50 req/min limit\nresponse = manager.get('https://api.example.com/data')\n\n# Requests to other URLs will use default 30s timeout\nresponse = manager.get('https://other-service.com/data')\n\n# Endpoint-specific advanced connection options\nendpoint_configs = {\n    'secure-api.company.com': {\n        'verify': '/path/to/company-ca.pem',\n        'cert': ('/path/to/company-client.crt', '/path/to/company-client.key'),\n        'connect_timeout': 2.0,\n        'read_timeout': 45.0,\n        'bearer_token': 'company-specific-token'\n    },\n    'public-api.example.com': {\n        'verify': True,  # Use system CA bundle\n        'connect_timeout': 5.0,\n        'read_timeout': 15.0\n    }\n}\n\nmanager = ConnectionManager(endpoint_configs=endpoint_configs)\n```\n\n### Dynamic Endpoint Configuration\n\nAdd or modify endpoint configurations at runtime:\n\n```python\nmanager = ConnectionManager()\n\n# Add new endpoint configuration\nmanager.add_endpoint_config('new-api.com', {\n    'timeout': 45,\n    'rate_limit_requests': 75,\n    'max_retries': 3\n})\n\n# Remove endpoint configuration\nmanager.remove_endpoint_config('old-api.com')\n\n# View all endpoint configurations\nconfigs = manager.get_endpoint_configs()\n```\n\n### Advanced Connection Options\n\nConnectionManager provides advanced SSL and connection configuration options:\n\n```python\nimport ssl\n\n# Custom SSL context\nssl_context = ssl.create_default_context()\nssl_context.minimum_version = ssl.TLSVersion.TLSv1_2\n\nmanager = ConnectionManager(\n    # SSL certificate verification\n    verify=\"/path/to/custom-ca-bundle.pem\",  # Custom CA bundle\n    # verify=False,  # Disable SSL verification (not recommended)\n    \n    # Client certificates for mutual TLS\n    cert=\"/path/to/client.pem\",  # Single file with cert and key\n    # cert=(\"/path/to/client.crt\", \"/path/to/client.key\"),  # Separate files\n    \n    # Fine-grained timeouts\n    connect_timeout=5.0,  # Connection timeout\n    read_timeout=30.0,    # Read timeout\n    \n    # Custom SSL context\n    ssl_context=ssl_context\n)\n\n# Update options after initialization\nmanager.set_ssl_verification(\"/path/to/new-ca-bundle.pem\")\nmanager.set_client_certificate((\"/path/to/cert.crt\", \"/path/to/key.key\"))\nmanager.set_timeouts(connect_timeout=3.0, read_timeout=25.0)\nmanager.set_ssl_context(ssl_context)\n```\n\n### Authentication\n\nConnectionManager supports various authentication methods that can be applied globally or per-endpoint:\n\n```python\n# API Key authentication\nmanager = ConnectionManager(\n    api_key=\"your-api-key\",\n    api_key_header=\"X-API-Key\"  # Custom header name\n)\n\n# Bearer token authentication\nmanager = ConnectionManager(bearer_token=\"your-bearer-token\")\n\n# OAuth2 token authentication\nmanager = ConnectionManager(oauth2_token=\"your-oauth2-token\")\n\n# Basic authentication\nmanager = ConnectionManager(basic_auth=(\"username\", \"password\"))\n\n# Set authentication after initialization\nmanager.set_api_key(\"new-api-key\", \"Authorization\")\nmanager.set_bearer_token(\"new-bearer-token\")\nmanager.set_oauth2_token(\"new-oauth2-token\")\nmanager.set_basic_auth(\"user\", \"pass\")\n\n# Endpoint-specific authentication\nmanager.set_endpoint_auth('api.service1.com', 'bearer', token='service1-token')\nmanager.set_endpoint_auth('api.service2.com', 'api_key', api_key='service2-key', header_name='X-Service2-Key')\n\n# Clear authentication\nmanager.clear_auth()  # Global\nmanager.clear_auth('api.service1.com')  # Endpoint-specific\n```\n\n### Batch Requests\n\nPerform multiple HTTP requests concurrently with controlled parallelism:\n\n```python\n# Define multiple requests\nrequests_data = [\n    ('GET', 'https://api.example.com/users', {}),\n    ('POST', 'https://api.example.com/data', {'json': {'key': 'value'}}),\n    ('GET', 'https://api.example.com/status', {'timeout': 10})\n]\n\n# Execute concurrently with max 5 workers\nresults = manager.batch_request(requests_data, max_workers=5)\n\n# Process results\nfor i, result in enumerate(results):\n    if hasattr(result, 'status_code'):\n        print(f\"Request {i}: Success - {result.status_code}\")\n    else:\n        print(f\"Request {i}: Error - {result}\")\n```\n\n## Usage Examples\n\n### Basic HTTP Methods\n\n```python\nfrom requests_connection_manager import ConnectionManager\n\nmanager = ConnectionManager()\n\n# GET request\nresponse = manager.get('https://httpbin.org/get')\n\n# POST request with JSON data\ndata = {'key': 'value'}\nresponse = manager.post('https://httpbin.org/post', json=data)\n\n# Custom headers\nheaders = {'Authorization': 'Bearer token'}\nresponse = manager.get('https://api.example.com/protected', headers=headers)\n\nmanager.close()\n```\n\n### Advanced Features\n\n```python\n# Rate limiting automatically prevents excessive requests\nmanager = ConnectionManager(rate_limit_requests=10, rate_limit_period=60)\n\n# Circuit breaker protects against failing services\nmanager = ConnectionManager(\n    circuit_breaker_failure_threshold=5,\n    circuit_breaker_recovery_timeout=60\n)\n\n# Automatic retries with exponential backoff\nmanager = ConnectionManager(max_retries=3, backoff_factor=0.3)\n```\n\n### Error Handling\n\n```python\nfrom requests_connection_manager import ConnectionManager\nfrom requests_connection_manager.exceptions import (\n    RateLimitExceeded,\n    CircuitBreakerOpen,\n    MaxRetriesExceeded\n)\n\nmanager = ConnectionManager()\n\ntry:\n    response = manager.get('https://api.example.com/data')\nexcept RateLimitExceeded:\n    print(\"Rate limit exceeded, please wait\")\nexcept CircuitBreakerOpen:\n    print(\"Service is currently unavailable\")\nexcept MaxRetriesExceeded:\n    print(\"Request failed after maximum retries\")\n```\n\n### Thread Safety\n\n```python\nimport threading\nfrom requests_connection_manager import ConnectionManager\n\n# Safe to use across multiple threads\nmanager = ConnectionManager()\n\ndef make_request(url):\n    response = manager.get(url)\n    return response.status_code\n\n# Create multiple threads\nthreads = []\nfor i in range(10):\n    thread = threading.Thread(target=make_request, args=(f'https://httpbin.org/get?id={i}',))\n    threads.append(thread)\n    thread.start()\n\n# Wait for all threads to complete\nfor thread in threads:\n    thread.join()\n\nmanager.close()\n```\n\n\n\n## API Reference\n\n### ConnectionManager\n\nThe main class that provides enhanced HTTP functionality.\n\n#### Methods\n\n- `get(url, **kwargs)` - Make GET request\n- `post(url, **kwargs)` - Make POST request  \n- `put(url, **kwargs)` - Make PUT request\n- `delete(url, **kwargs)` - Make DELETE request\n- `patch(url, **kwargs)` - Make PATCH request\n- `head(url, **kwargs)` - Make HEAD request\n- `options(url, **kwargs)` - Make OPTIONS request\n- `request(method, url, **kwargs)` - Make request with specified method\n- `close()` - Close session and clean up resources\n- `get_stats()` - Get current connection statistics\n\n#### Configuration Parameters\n\n- `pool_connections` (int): Number of connection pools to cache (default: 10)\n- `pool_maxsize` (int): Maximum number of connections in each pool (default: 10)\n- `max_retries` (int): Maximum number of retry attempts (default: 3)\n- `backoff_factor` (float): Backoff factor for retries (default: 0.3)\n- `rate_limit_requests` (int): Number of requests allowed per period (default: 100)\n- `rate_limit_period` (int): Time period for rate limiting in seconds (default: 60)\n- `circuit_breaker_failure_threshold` (int): Failures before opening circuit (default: 5)\n- `circuit_breaker_recovery_timeout` (float): Recovery timeout for circuit breaker (default: 60)\n- `timeout` (int): Default request timeout in seconds (default: 30)\n\n## Dependencies\n\n- `requests` >= 2.25.0\n- `urllib3` >= 1.26.0\n- `ratelimit` >= 2.2.1\n- `pybreaker` >= 1.2.0\n\n## License\n\nMIT License\n\n## Development\n\n### Running Tests\n\nThe project includes a comprehensive test suite with 31 passing tests covering all major functionality:\n\n```bash\n# Install development dependencies\npip install pytest pytest-cov pytest-mock responses requests-mock\n\n# Run tests\npytest tests/ -v\n\n# Run tests with coverage\npytest tests/ --cov=requests_connection_manager --cov-report=html\n```\n\n### Documentation\n\nDocumentation is built using MkDocs and automatically deployed to GitHub Pages:\n\n```bash\n# Install documentation dependencies\npip install mkdocs mkdocs-material\n\n# Serve documentation locally\nmkdocs serve\n\n# Deploy to GitHub Pages\nmkdocs gh-deploy --force\n```\n\nView the live documentation at: [https://charlesgude.github.io/requests-connection-manager/](https://charlesgude.github.io/requests-connection-manager/)\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n### Development Setup\n\n1. Clone the repository\n2. Install Python 3.9 or higher\n3. Install dependencies: `pip install -e .`\n4. Run tests to verify setup: `pytest tests/`\n\n## Changelog\n\nSee the [GitHub releases](https://github.com/charlesgude/requests-connection-manager/releases) for version history and changes.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A Python package that extends requests with connection pooling, retries, rate limiting, and circuit breaker functionality",
    "version": "1.0.0",
    "project_urls": {
        "Homepage": "https://github.com/charlesgude/requests-api-manager",
        "Repository": "https://github.com/charlesgude/requests-api-manager"
    },
    "split_keywords": [
        "requests",
        " http",
        " connection",
        " pooling",
        " retry",
        " rate-limiting",
        " circuit-breaker"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f4a549f462f5b7a09bb408c4e9e86e08368ec00dccdb54cf5d21a29a70e8eeb1",
                "md5": "869d0b47c232e510d24db43189132725",
                "sha256": "2caca0773bcbade5cb8019d3a7c80676c6e0d865e205d7e4bcfb838a6301c22f"
            },
            "downloads": -1,
            "filename": "requests_connection_manager-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "869d0b47c232e510d24db43189132725",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.9",
            "size": 17305,
            "upload_time": "2025-07-08T15:58:29",
            "upload_time_iso_8601": "2025-07-08T15:58:29.905964Z",
            "url": "https://files.pythonhosted.org/packages/f4/a5/49f462f5b7a09bb408c4e9e86e08368ec00dccdb54cf5d21a29a70e8eeb1/requests_connection_manager-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a1364c2e624f1abf83ad4883ff5e69b9c94bdc76554925d26dbb20711e9d1e8f",
                "md5": "b98eb3cd5c98727337e29732de331109",
                "sha256": "4b37dde18a70019d59125634e04334f719fd16745f13dd153724e76c90c9c69c"
            },
            "downloads": -1,
            "filename": "requests_connection_manager-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "b98eb3cd5c98727337e29732de331109",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.9",
            "size": 18174,
            "upload_time": "2025-07-08T15:58:31",
            "upload_time_iso_8601": "2025-07-08T15:58:31.332040Z",
            "url": "https://files.pythonhosted.org/packages/a1/36/4c2e624f1abf83ad4883ff5e69b9c94bdc76554925d26dbb20711e9d1e8f/requests_connection_manager-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-08 15:58:31",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "charlesgude",
    "github_project": "requests-api-manager",
    "github_not_found": true,
    "lcname": "requests-connection-manager"
}
        
Elapsed time: 2.16897s