# requests-connection-manager
[](https://python.org)
[](https://github.com/charlesgude/requests-connection-manager/actions)
[](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[](https://python.org)\n[](https://github.com/charlesgude/requests-connection-manager/actions)\n[](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"
}