Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1127)

Unified Diff: third_party/boto/boto/__init__.py

Issue 12755026: Added gsutil/boto to depot_tools/third_party (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Added readme Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/boto/README.rst ('k') | third_party/boto/boto/auth.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/boto/boto/__init__.py
diff --git a/third_party/boto/boto/__init__.py b/third_party/boto/boto/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..26f36dbcda0f4bbbaf6873140040d8b85987b854
--- /dev/null
+++ b/third_party/boto/boto/__init__.py
@@ -0,0 +1,793 @@
+# Copyright (c) 2006-2012 Mitch Garnaat http://garnaat.org/
+# Copyright (c) 2010-2011, Eucalyptus Systems, Inc.
+# Copyright (c) 2011, Nexenta Systems Inc.
+# Copyright (c) 2012 Amazon.com, Inc. or its affiliates.
+# Copyright (c) 2010, Google, Inc.
+# All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish, dis-
+# tribute, sublicense, and/or sell copies of the Software, and to permit
+# persons to whom the Software is furnished to do so, subject to the fol-
+# lowing conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
+# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+from boto.pyami.config import Config, BotoConfigLocations
+from boto.storage_uri import BucketStorageUri, FileStorageUri
+import boto.plugin
+import os
+import platform
+import re
+import sys
+import logging
+import logging.config
+import urlparse
+from boto.exception import InvalidUriError
+
+__version__ = '2.8.0-dev'
+Version = __version__ # for backware compatibility
+
+UserAgent = 'Boto/%s (%s)' % (__version__, sys.platform)
+config = Config()
+
+# Regex to disallow buckets violating charset or not [3..255] chars total.
+BUCKET_NAME_RE = re.compile(r'^[a-z0-9][a-z0-9\._-]{1,253}[a-z0-9]$')
+# Regex to disallow buckets with individual DNS labels longer than 63.
+TOO_LONG_DNS_NAME_COMP = re.compile(r'[-_a-z0-9]{64}')
+GENERATION_RE = re.compile(r'(?P<versionless_uri_str>.+)'
+ r'#(?P<generation>[0-9]+)$')
+VERSION_RE = re.compile('(?P<versionless_uri_str>.+)#(?P<version_id>.+)$')
+
+
+def init_logging():
+ for file in BotoConfigLocations:
+ try:
+ logging.config.fileConfig(os.path.expanduser(file))
+ except:
+ pass
+
+
+class NullHandler(logging.Handler):
+ def emit(self, record):
+ pass
+
+log = logging.getLogger('boto')
+perflog = logging.getLogger('boto.perf')
+log.addHandler(NullHandler())
+perflog.addHandler(NullHandler())
+init_logging()
+
+# convenience function to set logging to a particular file
+
+
+def set_file_logger(name, filepath, level=logging.INFO, format_string=None):
+ global log
+ if not format_string:
+ format_string = "%(asctime)s %(name)s [%(levelname)s]:%(message)s"
+ logger = logging.getLogger(name)
+ logger.setLevel(level)
+ fh = logging.FileHandler(filepath)
+ fh.setLevel(level)
+ formatter = logging.Formatter(format_string)
+ fh.setFormatter(formatter)
+ logger.addHandler(fh)
+ log = logger
+
+
+def set_stream_logger(name, level=logging.DEBUG, format_string=None):
+ global log
+ if not format_string:
+ format_string = "%(asctime)s %(name)s [%(levelname)s]:%(message)s"
+ logger = logging.getLogger(name)
+ logger.setLevel(level)
+ fh = logging.StreamHandler()
+ fh.setLevel(level)
+ formatter = logging.Formatter(format_string)
+ fh.setFormatter(formatter)
+ logger.addHandler(fh)
+ log = logger
+
+
+def connect_sqs(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.sqs.connection.SQSConnection`
+ :return: A connection to Amazon's SQS
+ """
+ from boto.sqs.connection import SQSConnection
+ return SQSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_s3(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.s3.connection.S3Connection`
+ :return: A connection to Amazon's S3
+ """
+ from boto.s3.connection import S3Connection
+ return S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_gs(gs_access_key_id=None, gs_secret_access_key=None, **kwargs):
+ """
+ @type gs_access_key_id: string
+ @param gs_access_key_id: Your Google Cloud Storage Access Key ID
+
+ @type gs_secret_access_key: string
+ @param gs_secret_access_key: Your Google Cloud Storage Secret Access Key
+
+ @rtype: L{GSConnection<boto.gs.connection.GSConnection>}
+ @return: A connection to Google's Storage service
+ """
+ from boto.gs.connection import GSConnection
+ return GSConnection(gs_access_key_id, gs_secret_access_key, **kwargs)
+
+
+def connect_ec2(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.ec2.connection.EC2Connection`
+ :return: A connection to Amazon's EC2
+ """
+ from boto.ec2.connection import EC2Connection
+ return EC2Connection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_elb(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.ec2.elb.ELBConnection`
+ :return: A connection to Amazon's Load Balancing Service
+ """
+ from boto.ec2.elb import ELBConnection
+ return ELBConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_autoscale(aws_access_key_id=None, aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.ec2.autoscale.AutoScaleConnection`
+ :return: A connection to Amazon's Auto Scaling Service
+ """
+ from boto.ec2.autoscale import AutoScaleConnection
+ return AutoScaleConnection(aws_access_key_id, aws_secret_access_key,
+ **kwargs)
+
+
+def connect_cloudwatch(aws_access_key_id=None, aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.ec2.cloudwatch.CloudWatchConnection`
+ :return: A connection to Amazon's EC2 Monitoring service
+ """
+ from boto.ec2.cloudwatch import CloudWatchConnection
+ return CloudWatchConnection(aws_access_key_id, aws_secret_access_key,
+ **kwargs)
+
+
+def connect_sdb(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.sdb.connection.SDBConnection`
+ :return: A connection to Amazon's SDB
+ """
+ from boto.sdb.connection import SDBConnection
+ return SDBConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_fps(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.fps.connection.FPSConnection`
+ :return: A connection to FPS
+ """
+ from boto.fps.connection import FPSConnection
+ return FPSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_mturk(aws_access_key_id=None, aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.mturk.connection.MTurkConnection`
+ :return: A connection to MTurk
+ """
+ from boto.mturk.connection import MTurkConnection
+ return MTurkConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_cloudfront(aws_access_key_id=None, aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.fps.connection.FPSConnection`
+ :return: A connection to FPS
+ """
+ from boto.cloudfront import CloudFrontConnection
+ return CloudFrontConnection(aws_access_key_id, aws_secret_access_key,
+ **kwargs)
+
+
+def connect_vpc(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.vpc.VPCConnection`
+ :return: A connection to VPC
+ """
+ from boto.vpc import VPCConnection
+ return VPCConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_rds(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.rds.RDSConnection`
+ :return: A connection to RDS
+ """
+ from boto.rds import RDSConnection
+ return RDSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_emr(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.emr.EmrConnection`
+ :return: A connection to Elastic mapreduce
+ """
+ from boto.emr import EmrConnection
+ return EmrConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_sns(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.sns.SNSConnection`
+ :return: A connection to Amazon's SNS
+ """
+ from boto.sns import SNSConnection
+ return SNSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_iam(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.iam.IAMConnection`
+ :return: A connection to Amazon's IAM
+ """
+ from boto.iam import IAMConnection
+ return IAMConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_route53(aws_access_key_id=None, aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.dns.Route53Connection`
+ :return: A connection to Amazon's Route53 DNS Service
+ """
+ from boto.route53 import Route53Connection
+ return Route53Connection(aws_access_key_id, aws_secret_access_key,
+ **kwargs)
+
+
+def connect_cloudformation(aws_access_key_id=None, aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.cloudformation.CloudFormationConnection`
+ :return: A connection to Amazon's CloudFormation Service
+ """
+ from boto.cloudformation import CloudFormationConnection
+ return CloudFormationConnection(aws_access_key_id, aws_secret_access_key,
+ **kwargs)
+
+
+def connect_euca(host=None, aws_access_key_id=None, aws_secret_access_key=None,
+ port=8773, path='/services/Eucalyptus', is_secure=False,
+ **kwargs):
+ """
+ Connect to a Eucalyptus service.
+
+ :type host: string
+ :param host: the host name or ip address of the Eucalyptus server
+
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.ec2.connection.EC2Connection`
+ :return: A connection to Eucalyptus server
+ """
+ from boto.ec2 import EC2Connection
+ from boto.ec2.regioninfo import RegionInfo
+
+ # Check for values in boto config, if not supplied as args
+ if not aws_access_key_id:
+ aws_access_key_id = config.get('Credentials',
+ 'euca_access_key_id',
+ None)
+ if not aws_secret_access_key:
+ aws_secret_access_key = config.get('Credentials',
+ 'euca_secret_access_key',
+ None)
+ if not host:
+ host = config.get('Boto', 'eucalyptus_host', None)
+
+ reg = RegionInfo(name='eucalyptus', endpoint=host)
+ return EC2Connection(aws_access_key_id, aws_secret_access_key,
+ region=reg, port=port, path=path,
+ is_secure=is_secure, **kwargs)
+
+
+def connect_glacier(aws_access_key_id=None, aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.glacier.layer2.Layer2`
+ :return: A connection to Amazon's Glacier Service
+ """
+ from boto.glacier.layer2 import Layer2
+ return Layer2(aws_access_key_id, aws_secret_access_key,
+ **kwargs)
+
+
+def connect_ec2_endpoint(url, aws_access_key_id=None,
+ aws_secret_access_key=None,
+ **kwargs):
+ """
+ Connect to an EC2 Api endpoint. Additional arguments are passed
+ through to connect_ec2.
+
+ :type url: string
+ :param url: A url for the ec2 api endpoint to connect to
+
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.ec2.connection.EC2Connection`
+ :return: A connection to Eucalyptus server
+ """
+ from boto.ec2.regioninfo import RegionInfo
+
+ purl = urlparse.urlparse(url)
+ kwargs['port'] = purl.port
+ kwargs['host'] = purl.hostname
+ kwargs['path'] = purl.path
+ if not 'is_secure' in kwargs:
+ kwargs['is_secure'] = (purl.scheme == "https")
+
+ kwargs['region'] = RegionInfo(name=purl.hostname,
+ endpoint=purl.hostname)
+ kwargs['aws_access_key_id'] = aws_access_key_id
+ kwargs['aws_secret_access_key'] = aws_secret_access_key
+
+ return(connect_ec2(**kwargs))
+
+
+def connect_walrus(host=None, aws_access_key_id=None,
+ aws_secret_access_key=None,
+ port=8773, path='/services/Walrus', is_secure=False,
+ **kwargs):
+ """
+ Connect to a Walrus service.
+
+ :type host: string
+ :param host: the host name or ip address of the Walrus server
+
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.s3.connection.S3Connection`
+ :return: A connection to Walrus
+ """
+ from boto.s3.connection import S3Connection
+ from boto.s3.connection import OrdinaryCallingFormat
+
+ # Check for values in boto config, if not supplied as args
+ if not aws_access_key_id:
+ aws_access_key_id = config.get('Credentials',
+ 'euca_access_key_id',
+ None)
+ if not aws_secret_access_key:
+ aws_secret_access_key = config.get('Credentials',
+ 'euca_secret_access_key',
+ None)
+ if not host:
+ host = config.get('Boto', 'walrus_host', None)
+
+ return S3Connection(aws_access_key_id, aws_secret_access_key,
+ host=host, port=port, path=path,
+ calling_format=OrdinaryCallingFormat(),
+ is_secure=is_secure, **kwargs)
+
+
+def connect_ses(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.ses.SESConnection`
+ :return: A connection to Amazon's SES
+ """
+ from boto.ses import SESConnection
+ return SESConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_sts(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.sts.STSConnection`
+ :return: A connection to Amazon's STS
+ """
+ from boto.sts import STSConnection
+ return STSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_ia(ia_access_key_id=None, ia_secret_access_key=None,
+ is_secure=False, **kwargs):
+ """
+ Connect to the Internet Archive via their S3-like API.
+
+ :type ia_access_key_id: string
+ :param ia_access_key_id: Your IA Access Key ID. This will also look
+ in your boto config file for an entry in the Credentials
+ section called "ia_access_key_id"
+
+ :type ia_secret_access_key: string
+ :param ia_secret_access_key: Your IA Secret Access Key. This will also
+ look in your boto config file for an entry in the Credentials
+ section called "ia_secret_access_key"
+
+ :rtype: :class:`boto.s3.connection.S3Connection`
+ :return: A connection to the Internet Archive
+ """
+ from boto.s3.connection import S3Connection
+ from boto.s3.connection import OrdinaryCallingFormat
+
+ access_key = config.get('Credentials', 'ia_access_key_id',
+ ia_access_key_id)
+ secret_key = config.get('Credentials', 'ia_secret_access_key',
+ ia_secret_access_key)
+
+ return S3Connection(access_key, secret_key,
+ host='s3.us.archive.org',
+ calling_format=OrdinaryCallingFormat(),
+ is_secure=is_secure, **kwargs)
+
+
+def connect_dynamodb(aws_access_key_id=None,
+ aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.dynamodb.layer2.Layer2`
+ :return: A connection to the Layer2 interface for DynamoDB.
+ """
+ from boto.dynamodb.layer2 import Layer2
+ return Layer2(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_swf(aws_access_key_id=None,
+ aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.swf.layer1.Layer1`
+ :return: A connection to the Layer1 interface for SWF.
+ """
+ from boto.swf.layer1 import Layer1
+ return Layer1(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_cloudsearch(aws_access_key_id=None,
+ aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.ec2.autoscale.CloudSearchConnection`
+ :return: A connection to Amazon's CloudSearch service
+ """
+ from boto.cloudsearch.layer2 import Layer2
+ return Layer2(aws_access_key_id, aws_secret_access_key,
+ **kwargs)
+
+
+def connect_beanstalk(aws_access_key_id=None,
+ aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.beanstalk.layer1.Layer1`
+ :return: A connection to Amazon's Elastic Beanstalk service
+ """
+ from boto.beanstalk.layer1 import Layer1
+ return Layer1(aws_access_key_id, aws_secret_access_key, **kwargs)
+
+
+def connect_elastictranscoder(aws_access_key_id=None,
+ aws_secret_access_key=None,
+ **kwargs):
+ """
+ :type aws_access_key_id: string
+ :param aws_access_key_id: Your AWS Access Key ID
+
+ :type aws_secret_access_key: string
+ :param aws_secret_access_key: Your AWS Secret Access Key
+
+ :rtype: :class:`boto.ets.layer1.ElasticTranscoderConnection`
+ :return: A connection to Amazon's Elastic Transcoder service
+ """
+ from boto.elastictranscoder.layer1 import ElasticTranscoderConnection
+ return ElasticTranscoderConnection(
+ aws_access_key_id=aws_access_key_id,
+ aws_secret_access_key=aws_secret_access_key,
+ **kwargs)
+
+
+def storage_uri(uri_str, default_scheme='file', debug=0, validate=True,
+ bucket_storage_uri_class=BucketStorageUri,
+ suppress_consec_slashes=True, is_latest=False):
+ """
+ Instantiate a StorageUri from a URI string.
+
+ :type uri_str: string
+ :param uri_str: URI naming bucket + optional object.
+ :type default_scheme: string
+ :param default_scheme: default scheme for scheme-less URIs.
+ :type debug: int
+ :param debug: debug level to pass in to boto connection (range 0..2).
+ :type validate: bool
+ :param validate: whether to check for bucket name validity.
+ :type bucket_storage_uri_class: BucketStorageUri interface.
+ :param bucket_storage_uri_class: Allows mocking for unit tests.
+ :param suppress_consec_slashes: If provided, controls whether
+ consecutive slashes will be suppressed in key paths.
+ :type is_latest: bool
+ :param is_latest: whether this versioned object represents the
+ current version.
+
+ We allow validate to be disabled to allow caller
+ to implement bucket-level wildcarding (outside the boto library;
+ see gsutil).
+
+ :rtype: :class:`boto.StorageUri` subclass
+ :return: StorageUri subclass for given URI.
+
+ ``uri_str`` must be one of the following formats:
+
+ * gs://bucket/name
+ * gs://bucket/name#ver
+ * s3://bucket/name
+ * gs://bucket
+ * s3://bucket
+ * filename (which could be a Unix path like /a/b/c or a Windows path like
+ C:\a\b\c)
+
+ The last example uses the default scheme ('file', unless overridden).
+ """
+ version_id = None
+ generation = None
+
+ # Manually parse URI components instead of using urlparse.urlparse because
+ # what we're calling URIs don't really fit the standard syntax for URIs
+ # (the latter includes an optional host/net location part).
+ end_scheme_idx = uri_str.find('://')
+ if end_scheme_idx == -1:
+ # Check for common error: user specifies gs:bucket instead
+ # of gs://bucket. Some URI parsers allow this, but it can cause
+ # confusion for callers, so we don't.
+ colon_pos = uri_str.find(':')
+ if colon_pos != -1:
+ # Allow Windows path names including drive letter (C: etc.)
+ drive_char = uri_str[0].lower()
+ if not (platform.system().lower().startswith('windows')
+ and colon_pos == 1
+ and drive_char >= 'a' and drive_char <= 'z'):
+ raise InvalidUriError('"%s" contains ":" instead of "://"' %
+ uri_str)
+ scheme = default_scheme.lower()
+ path = uri_str
+ else:
+ scheme = uri_str[0:end_scheme_idx].lower()
+ path = uri_str[end_scheme_idx + 3:]
+
+ if scheme not in ['file', 's3', 'gs']:
+ raise InvalidUriError('Unrecognized scheme "%s"' % scheme)
+ if scheme == 'file':
+ # For file URIs we have no bucket name, and use the complete path
+ # (minus 'file://') as the object name.
+ is_stream = False
+ if path == '-':
+ is_stream = True
+ return FileStorageUri(path, debug, is_stream)
+ else:
+ path_parts = path.split('/', 1)
+ bucket_name = path_parts[0]
+ object_name = ''
+ # If validate enabled, ensure the bucket name is valid, to avoid
+ # possibly confusing other parts of the code. (For example if we didn't
+ # catch bucket names containing ':', when a user tried to connect to
+ # the server with that name they might get a confusing error about
+ # non-integer port numbers.)
+ if (validate and bucket_name and
+ (not BUCKET_NAME_RE.match(bucket_name)
+ or TOO_LONG_DNS_NAME_COMP.search(bucket_name))):
+ raise InvalidUriError('Invalid bucket name in URI "%s"' % uri_str)
+ if scheme == 'gs':
+ match = GENERATION_RE.search(path)
+ if match:
+ md = match.groupdict()
+ versionless_uri_str = md['versionless_uri_str']
+ path_parts = versionless_uri_str.split('/', 1)
+ generation = int(md['generation'])
+ elif scheme == 's3':
+ match = VERSION_RE.search(path)
+ if match:
+ md = match.groupdict()
+ versionless_uri_str = md['versionless_uri_str']
+ path_parts = versionless_uri_str.split('/', 1)
+ version_id = md['version_id']
+ else:
+ raise InvalidUriError('Unrecognized scheme "%s"' % scheme)
+ if len(path_parts) > 1:
+ object_name = path_parts[1]
+ return bucket_storage_uri_class(
+ scheme, bucket_name, object_name, debug,
+ suppress_consec_slashes=suppress_consec_slashes,
+ version_id=version_id, generation=generation, is_latest=is_latest)
+
+
+def storage_uri_for_key(key):
+ """Returns a StorageUri for the given key.
+
+ :type key: :class:`boto.s3.key.Key` or subclass
+ :param key: URI naming bucket + optional object.
+ """
+ if not isinstance(key, boto.s3.key.Key):
+ raise InvalidUriError('Requested key (%s) is not a subclass of '
+ 'boto.s3.key.Key' % str(type(key)))
+ prov_name = key.bucket.connection.provider.get_provider_name()
+ uri_str = '%s://%s/%s' % (prov_name, key.bucket.name, key.name)
+ return storage_uri(uri_str)
+
+boto.plugin.load_plugins(config)
« no previous file with comments | « third_party/boto/README.rst ('k') | third_party/boto/boto/auth.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698