|
@@ -17,6 +17,7 @@ from __future__ import absolute_import
|
|
|
|
|
|
|
|
import boto
|
|
import boto
|
|
|
import boto.s3
|
|
import boto.s3
|
|
|
|
|
+import boto.s3.connection
|
|
|
import boto.utils
|
|
import boto.utils
|
|
|
|
|
|
|
|
from aws.conf import get_default_region, has_iam_metadata
|
|
from aws.conf import get_default_region, has_iam_metadata
|
|
@@ -27,12 +28,17 @@ HTTP_SOCKET_TIMEOUT_S = 60
|
|
|
|
|
|
|
|
class Client(object):
|
|
class Client(object):
|
|
|
def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, aws_security_token=None, region=None,
|
|
def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, aws_security_token=None, region=None,
|
|
|
- timeout=HTTP_SOCKET_TIMEOUT_S):
|
|
|
|
|
|
|
+ timeout=HTTP_SOCKET_TIMEOUT_S, proxy_address=None,
|
|
|
|
|
+ proxy_port=None, calling_format=None, is_secure=True):
|
|
|
self._access_key_id = aws_access_key_id
|
|
self._access_key_id = aws_access_key_id
|
|
|
self._secret_access_key = aws_secret_access_key
|
|
self._secret_access_key = aws_secret_access_key
|
|
|
self._security_token = aws_security_token
|
|
self._security_token = aws_security_token
|
|
|
self._region = region.lower() if region else get_default_region()
|
|
self._region = region.lower() if region else get_default_region()
|
|
|
self._timeout = timeout
|
|
self._timeout = timeout
|
|
|
|
|
+ self._proxy_address = proxy_address
|
|
|
|
|
+ self._proxy_port = proxy_port
|
|
|
|
|
+ self._calling_format = conf.DEFAULT_CALLING_FORMAT if calling_format is None else calling_format
|
|
|
|
|
+ self._is_secure = is_secure
|
|
|
|
|
|
|
|
boto.config.add_section('Boto')
|
|
boto.config.add_section('Boto')
|
|
|
boto.config.set('Boto', 'http_socket_timeout', str(self._timeout))
|
|
boto.config.set('Boto', 'http_socket_timeout', str(self._timeout))
|
|
@@ -51,15 +57,27 @@ class Client(object):
|
|
|
aws_access_key_id=access_key_id,
|
|
aws_access_key_id=access_key_id,
|
|
|
aws_secret_access_key=secret_access_key,
|
|
aws_secret_access_key=secret_access_key,
|
|
|
aws_security_token=security_token,
|
|
aws_security_token=security_token,
|
|
|
- region=conf.REGION.get()
|
|
|
|
|
|
|
+ region=conf.REGION.get(),
|
|
|
|
|
+ proxy_address=conf.PROXY_ADDRESS.get(),
|
|
|
|
|
+ proxy_port=conf.PROXY_PORT.get(),
|
|
|
|
|
+ calling_format=conf.CALLING_FORMAT.get(),
|
|
|
|
|
+ is_secure=conf.IS_SECURE.get()
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
def get_s3_connection(self):
|
|
def get_s3_connection(self):
|
|
|
# First attempt to connect via specified credentials
|
|
# First attempt to connect via specified credentials
|
|
|
- connection = boto.s3.connect_to_region(self._region,
|
|
|
|
|
- aws_access_key_id=self._access_key_id,
|
|
|
|
|
- aws_secret_access_key=self._secret_access_key,
|
|
|
|
|
- security_token=self._security_token)
|
|
|
|
|
|
|
+ if self._proxy_address is not None and self._proxy_port is not None:
|
|
|
|
|
+ connection = boto.s3.connection.S3Connection(aws_access_key_id=self._access_key_id,
|
|
|
|
|
+ aws_secret_access_key=self._secret_access_key,
|
|
|
|
|
+ security_token=self._security_token,
|
|
|
|
|
+ is_secure=self._is_secure,
|
|
|
|
|
+ calling_format=self._calling_format,
|
|
|
|
|
+ proxy=self._proxy_address, proxy_port=self._proxy_port)
|
|
|
|
|
+ else:
|
|
|
|
|
+ connection = boto.s3.connect_to_region(self._region,
|
|
|
|
|
+ aws_access_key_id=self._access_key_id,
|
|
|
|
|
+ aws_secret_access_key=self._secret_access_key,
|
|
|
|
|
+ security_token=self._security_token)
|
|
|
|
|
|
|
|
if connection is None:
|
|
if connection is None:
|
|
|
# If no connection, attemt to fallback to IAM instance metadata
|
|
# If no connection, attemt to fallback to IAM instance metadata
|
|
@@ -68,4 +86,4 @@ class Client(object):
|
|
|
if connection is None:
|
|
if connection is None:
|
|
|
raise ValueError('Can not construct S3 Connection for region %s' % self._region)
|
|
raise ValueError('Can not construct S3 Connection for region %s' % self._region)
|
|
|
|
|
|
|
|
- return connection
|
|
|
|
|
|
|
+ return connection
|