Low-level, data-driven core of boto 3 providing foundational AWS service access.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Advanced configuration system for customizing client behavior, timeouts, retry logic, and AWS-specific settings. The Config class provides fine-grained control over how botocore clients interact with AWS services.
Primary configuration class for customizing client behavior.
class Config:
def __init__(
self,
region_name: str = None,
signature_version: str = None,
user_agent: str = None,
user_agent_extra: str = None,
user_agent_appid: str = None,
connect_timeout: Union[int, float] = 60,
read_timeout: Union[int, float] = 60,
parameter_validation: bool = True,
max_pool_connections: int = 10,
proxies: dict = None,
proxies_config: dict = None,
s3: dict = None,
retries: dict = None,
tcp_keepalive: bool = False,
inject_host_prefix: bool = True,
disable_request_compression: bool = False,
request_min_compression_size_bytes: int = 10240,
**kwargs
):
"""
Initialize client configuration.
Args:
region_name: AWS region name override
signature_version: AWS signature version ('v2', 'v4', 's3v4')
user_agent: Custom user agent string
user_agent_extra: Additional user agent information
user_agent_appid: Application ID for user agent
connect_timeout: Connection timeout in seconds (default: 60)
read_timeout: Read timeout in seconds (default: 60)
parameter_validation: Enable parameter validation (default: True)
max_pool_connections: Maximum HTTP connection pool size (default: 10)
proxies: Proxy configuration dictionary
proxies_config: Advanced proxy configuration
s3: S3-specific configuration options
retries: Retry configuration dictionary
tcp_keepalive: Enable TCP keepalive (default: False)
inject_host_prefix: Enable host prefix injection (default: True)
disable_request_compression: Disable request compression
request_min_compression_size_bytes: Minimum size for compression
"""Access configuration values after initialization.
class Config:
@property
def region_name(self) -> str:
"""AWS region name."""
@property
def signature_version(self) -> str:
"""AWS signature version."""
@property
def user_agent(self) -> str:
"""User agent string."""
@property
def connect_timeout(self) -> Union[int, float]:
"""Connection timeout in seconds."""
@property
def read_timeout(self) -> Union[int, float]:
"""Read timeout in seconds."""
@property
def max_pool_connections(self) -> int:
"""Maximum connection pool size."""
@property
def parameter_validation(self) -> bool:
"""Parameter validation enabled status."""Merge configuration objects for inheritance and override behavior.
class Config:
def merge(self, other_config: 'Config') -> 'Config':
"""
Merge with another configuration.
Args:
other_config: Configuration to merge with
Returns:
Config: New merged configuration
"""Configure network-related settings for HTTP requests.
# Connection and read timeouts
config = Config(
connect_timeout=30, # 30 seconds to connect
read_timeout=60, # 60 seconds to read response
)
# Connection pooling
config = Config(
max_pool_connections=20, # Allow up to 20 concurrent connections
tcp_keepalive=True # Enable TCP keepalive
)Configure proxy settings for HTTP requests.
# Basic proxy configuration
config = Config(
proxies={
'http': 'http://proxy.example.com:8080',
'https': 'https://proxy.example.com:8080'
}
)
# Advanced proxy configuration with authentication
config = Config(
proxies={
'http': 'http://user:pass@proxy.example.com:8080',
'https': 'https://user:pass@proxy.example.com:8080'
},
proxies_config={
'proxy_ca_bundle': '/path/to/ca-bundle.pem',
'proxy_client_cert': '/path/to/client.pem',
'proxy_use_forwarding_for_https': True
}
)Configure automatic retry behavior for failed requests.
# Standard retry configuration
config = Config(
retries={
'max_attempts': 5, # Maximum retry attempts
'mode': 'standard' # Use standard retry mode
}
)
# Adaptive retry configuration
config = Config(
retries={
'max_attempts': 10,
'mode': 'adaptive' # Use adaptive retry mode
}
)
# Legacy retry configuration
config = Config(
retries={
'max_attempts': 3,
'mode': 'legacy'
}
)Configure S3-specific client behavior.
config = Config(
s3={
'addressing_style': 'virtual', # Use virtual-hosted-style URLs
'signature_version': 's3v4', # Use S3 Signature Version 4
'use_accelerate_endpoint': True, # Use S3 Transfer Acceleration
'use_dualstack_endpoint': True, # Use dual-stack endpoints
'payload_signing_enabled': False, # Disable payload signing
'chunked_encoding': True, # Enable chunked encoding
'us_east_1_regional_endpoint': 'regional' # Use regional endpoint
}
)Customize user agent strings for request identification.
# Custom user agent
config = Config(
user_agent='MyApplication/1.0',
user_agent_extra='Additional/Info',
user_agent_appid='my-app-id'
)Configure parameter validation and request compression.
config = Config(
parameter_validation=False, # Disable parameter validation
disable_request_compression=True, # Disable compression
request_min_compression_size_bytes=5120 # Set compression threshold
)Configure authentication and signature settings.
# Signature version configuration
config = Config(
signature_version='v4' # Use AWS Signature Version 4
)
# Service-specific signature configuration
config = Config(
signature_version='s3v4' # Use S3-specific signature version
)from botocore.config import Config
from botocore.session import get_session
# Create configuration
config = Config(
region_name='us-west-2',
connect_timeout=30,
read_timeout=30,
max_pool_connections=20
)
# Apply to client
session = get_session()
client = session.create_client('s3', config=config)# Production-ready configuration
production_config = Config(
# Network settings
connect_timeout=10,
read_timeout=60,
max_pool_connections=50,
tcp_keepalive=True,
# Retry settings
retries={
'max_attempts': 5,
'mode': 'adaptive'
},
# User agent
user_agent_appid='myapp-production',
# Validation
parameter_validation=True
)# S3-optimized configuration
s3_config = Config(
s3={
'addressing_style': 'virtual',
'signature_version': 's3v4',
'use_accelerate_endpoint': True,
'payload_signing_enabled': False
},
connect_timeout=60,
read_timeout=300, # Longer timeout for large uploads
max_pool_connections=25
)
s3_client = session.create_client('s3', config=s3_config)# Development configuration with debugging
dev_config = Config(
# Shorter timeouts for faster feedback
connect_timeout=5,
read_timeout=30,
# More aggressive retries
retries={
'max_attempts': 2,
'mode': 'standard'
},
# Enable validation for development
parameter_validation=True,
# Custom user agent for development
user_agent_extra='Development/Testing'
)# Base configuration
base_config = Config(
connect_timeout=30,
read_timeout=60,
parameter_validation=True
)
# Service-specific overrides
s3_overrides = Config(
read_timeout=300, # Longer timeout for S3
s3={'addressing_style': 'virtual'}
)
# Merge configurations
final_config = base_config.merge(s3_overrides)import os
# Configuration based on environment
def get_config():
if os.environ.get('ENVIRONMENT') == 'production':
return Config(
retries={'max_attempts': 5, 'mode': 'adaptive'},
connect_timeout=10,
max_pool_connections=50
)
else:
return Config(
retries={'max_attempts': 2, 'mode': 'standard'},
connect_timeout=5,
max_pool_connections=10
)
config = get_config()
client = session.create_client('dynamodb', config=config)Install with Tessl CLI
npx tessl i tessl/pypi-botocore