Skip to main content

An enhanced wrapper for the requests library with retry, timeout, and logging capabilities

Project description

Requests Enhanced

CI PyPI version Python Versions License

An enhanced wrapper for the popular requests library with additional features for improved reliability and convenience in Python HTTP requests.

Features

  • HTTP/2 Support: Performance improvements with HTTP/2 protocol support
  • Automatic Retries: Built-in retry mechanism with configurable backoff strategy
  • Timeout Handling: Enhanced timeout configuration and error handling
  • Improved Logging: Customizable logging with formatted output
  • Utility Functions: Simplified JSON request handling

Installation

# Basic installation from PyPI
pip install requests-enhanced

# With HTTP/2 support
pip install requests-enhanced[http2]

# From source (development)
git clone https://github.com/khollingworth/requests-enhanced.git
cd requests-enhanced
pip install -e ".[dev]"

Quick Start

from requests_enhanced import Session

# Create a session with default retry and timeout settings
session = Session()

# Simple GET request
response = session.get("https://api.example.com/resources")
print(response.json())

HTTP/2 Support

The library provides robust HTTP/2 support with significant performance improvements:

Performance Benefits

  • 30-40% faster for multiple concurrent requests to the same host
  • Multiplexed connections: Multiple requests share a single connection
  • Header compression: Reduces overhead and improves load times
  • Binary framing: More efficient data transfer
  • Server push: Allows servers to preemptively send resources
  • Automatic fallback: Gracefully falls back to HTTP/1.1 when needed

Compatibility

  • Works with urllib3 versions 1.x and 2.x
  • Compatible with Python 3.7+
  • Requires TLS 1.2 or higher

See the HTTP/2 example for a performance comparison and the API Reference for configuration details.

Using HTTP/2

Enabling HTTP/2 is simple:

from requests_enhanced import Session, HTTP2_AVAILABLE

# Check if HTTP/2 support is available
if HTTP2_AVAILABLE:
    print("HTTP/2 support is enabled")
else:
    print("HTTP/2 dependencies not installed, install with: pip install requests-enhanced[http2]")

# Create a session with HTTP/2 support
session = Session(http_version="2")

# Make requests as usual - HTTP/2 will be used automatically for HTTPS connections
response = session.get("https://api.example.com/resources")

# HTTP/1.1 will still be used for HTTP connections or if server doesn't support HTTP/2

Manual Configuration

For advanced use cases, you can manually configure the HTTP/2 adapter:

from requests_enhanced import Session, HTTP2Adapter

session = Session()

# Mount HTTP/2 adapter for HTTPS URLs
http2_adapter = HTTP2Adapter()
session.mount("https://", http2_adapter)

# Keep standard adapter for HTTP URLs
from requests.adapters import HTTPAdapter
session.mount("http://", HTTPAdapter())

POST request with JSON data

data = {"name": "example", "value": 42} response = session.post("https://api.example.com/resources", json=data)


## Utility Functions

For quick, one-off requests:

```python
from requests_enhanced.utils import json_get, json_post

# GET request that automatically returns JSON
data = json_get("https://api.example.com/resources")

# POST request with automatic JSON handling
result = json_post("https://api.example.com/resources", data={"name": "example"})

Error Handling

from requests_enhanced import Session
from requests_enhanced.exceptions import RequestTimeoutError, RequestRetryError

try:
    session = Session()
    response = session.get("https://api.example.com/resources")
except RequestTimeoutError as e:
    print(f"Request timed out: {e}")
    print(f"Original exception: {e.original_exception}")
except RequestRetryError as e:
    print(f"Retry failed: {e}")

Documentation

Detailed documentation is available in the docs directory:

Development

Setup Development Environment

# Clone the repository
git clone https://github.com/khollingworth/requests-enhanced.git
cd requests-enhanced

# Create a virtual environment (recommended)
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install development dependencies
pip install -e ".[dev]"

Running Tests

# Run all tests
pytest

# Run with coverage report
pytest --cov=src/requests_enhanced --cov-report=term-missing

# Run specific test file
pytest tests/test_sessions.py

Code Style

This project uses black for code formatting and flake8 for linting:

# Format code
black src tests examples

# Check code style
flake8 src tests examples

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

requests_enhanced-0.1.10.tar.gz (19.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

requests_enhanced-0.1.10-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file requests_enhanced-0.1.10.tar.gz.

File metadata

  • Download URL: requests_enhanced-0.1.10.tar.gz
  • Upload date:
  • Size: 19.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for requests_enhanced-0.1.10.tar.gz
Algorithm Hash digest
SHA256 26806d0956b0d6a99100d6835ac417820d2870a8bb36f097c464cdc877488f80
MD5 ebdc83d0db5fb41d6b1479f692d91cf7
BLAKE2b-256 90adc676279c58f26a18cd4747f29b29c9185867f06edfdde1247ce9032ea2a0

See more details on using hashes here.

File details

Details for the file requests_enhanced-0.1.10-py3-none-any.whl.

File metadata

File hashes

Hashes for requests_enhanced-0.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 9d24950178f0b1e1fb4d6409c75c4d86d9bbb856ea54644ff23416e97a02f1fb
MD5 1e63ce7cb3f39dee255271df35e4fd52
BLAKE2b-256 ce9afd63489e482d7a7305f63ac2b28a7abce13d16671db4214996db3e6a9e35

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page