comparison env/lib/python3.9/site-packages/boto/__init__.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 # Copyright (c) 2006-2012 Mitch Garnaat http://garnaat.org/
2 # Copyright (c) 2010-2011, Eucalyptus Systems, Inc.
3 # Copyright (c) 2011, Nexenta Systems Inc.
4 # Copyright (c) 2012 Amazon.com, Inc. or its affiliates.
5 # Copyright (c) 2010, Google, Inc.
6 # All rights reserved.
7 #
8 # Permission is hereby granted, free of charge, to any person obtaining a
9 # copy of this software and associated documentation files (the
10 # "Software"), to deal in the Software without restriction, including
11 # without limitation the rights to use, copy, modify, merge, publish, dis-
12 # tribute, sublicense, and/or sell copies of the Software, and to permit
13 # persons to whom the Software is furnished to do so, subject to the fol-
14 # lowing conditions:
15 #
16 # The above copyright notice and this permission notice shall be included
17 # in all copies or substantial portions of the Software.
18 #
19 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
21 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
22 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
25 # IN THE SOFTWARE.
26 #
27 from boto.pyami.config import Config, BotoConfigLocations
28 from boto.storage_uri import BucketStorageUri, FileStorageUri
29 import boto.plugin
30 import datetime
31 import os
32 import platform
33 import re
34 import sys
35 import logging
36 import logging.config
37
38 from boto.compat import urlparse
39 from boto.exception import InvalidUriError
40
41 __version__ = '2.49.0'
42 Version = __version__ # for backware compatibility
43
44 # http://bugs.python.org/issue7980
45 datetime.datetime.strptime('', '')
46
47 UserAgent = 'Boto/%s Python/%s %s/%s' % (
48 __version__,
49 platform.python_version(),
50 platform.system(),
51 platform.release()
52 )
53 config = Config()
54
55 # Regex to disallow buckets violating charset or not [3..255] chars total.
56 BUCKET_NAME_RE = re.compile(r'^[a-zA-Z0-9][a-zA-Z0-9\._-]{1,253}[a-zA-Z0-9]$')
57 # Regex to disallow buckets with individual DNS labels longer than 63.
58 TOO_LONG_DNS_NAME_COMP = re.compile(r'[-_a-z0-9]{64}')
59 GENERATION_RE = re.compile(r'(?P<versionless_uri_str>.+)'
60 r'#(?P<generation>[0-9]+)$')
61 VERSION_RE = re.compile('(?P<versionless_uri_str>.+)#(?P<version_id>.+)$')
62 ENDPOINTS_PATH = os.path.join(os.path.dirname(__file__), 'endpoints.json')
63
64
65 def init_logging():
66 for file in BotoConfigLocations:
67 try:
68 logging.config.fileConfig(os.path.expanduser(file))
69 except:
70 pass
71
72
73 class NullHandler(logging.Handler):
74 def emit(self, record):
75 pass
76
77 log = logging.getLogger('boto')
78 perflog = logging.getLogger('boto.perf')
79 log.addHandler(NullHandler())
80 perflog.addHandler(NullHandler())
81 init_logging()
82
83 # convenience function to set logging to a particular file
84
85
86 def set_file_logger(name, filepath, level=logging.INFO, format_string=None):
87 global log
88 if not format_string:
89 format_string = "%(asctime)s %(name)s [%(levelname)s]:%(message)s"
90 logger = logging.getLogger(name)
91 logger.setLevel(level)
92 fh = logging.FileHandler(filepath)
93 fh.setLevel(level)
94 formatter = logging.Formatter(format_string)
95 fh.setFormatter(formatter)
96 logger.addHandler(fh)
97 log = logger
98
99
100 def set_stream_logger(name, level=logging.DEBUG, format_string=None):
101 global log
102 if not format_string:
103 format_string = "%(asctime)s %(name)s [%(levelname)s]:%(message)s"
104 logger = logging.getLogger(name)
105 logger.setLevel(level)
106 fh = logging.StreamHandler()
107 fh.setLevel(level)
108 formatter = logging.Formatter(format_string)
109 fh.setFormatter(formatter)
110 logger.addHandler(fh)
111 log = logger
112
113
114 def connect_sqs(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
115 """
116 :type aws_access_key_id: string
117 :param aws_access_key_id: Your AWS Access Key ID
118
119 :type aws_secret_access_key: string
120 :param aws_secret_access_key: Your AWS Secret Access Key
121
122 :rtype: :class:`boto.sqs.connection.SQSConnection`
123 :return: A connection to Amazon's SQS
124 """
125 from boto.sqs.connection import SQSConnection
126 return SQSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
127
128
129 def connect_s3(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
130 """
131 :type aws_access_key_id: string
132 :param aws_access_key_id: Your AWS Access Key ID
133
134 :type aws_secret_access_key: string
135 :param aws_secret_access_key: Your AWS Secret Access Key
136
137 :rtype: :class:`boto.s3.connection.S3Connection`
138 :return: A connection to Amazon's S3
139 """
140 from boto.s3.connection import S3Connection
141 return S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs)
142
143
144 def connect_gs(gs_access_key_id=None, gs_secret_access_key=None, **kwargs):
145 """
146 @type gs_access_key_id: string
147 @param gs_access_key_id: Your Google Cloud Storage Access Key ID
148
149 @type gs_secret_access_key: string
150 @param gs_secret_access_key: Your Google Cloud Storage Secret Access Key
151
152 @rtype: L{GSConnection<boto.gs.connection.GSConnection>}
153 @return: A connection to Google's Storage service
154 """
155 from boto.gs.connection import GSConnection
156 return GSConnection(gs_access_key_id, gs_secret_access_key, **kwargs)
157
158
159 def connect_ec2(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
160 """
161 :type aws_access_key_id: string
162 :param aws_access_key_id: Your AWS Access Key ID
163
164 :type aws_secret_access_key: string
165 :param aws_secret_access_key: Your AWS Secret Access Key
166
167 :rtype: :class:`boto.ec2.connection.EC2Connection`
168 :return: A connection to Amazon's EC2
169 """
170 from boto.ec2.connection import EC2Connection
171 return EC2Connection(aws_access_key_id, aws_secret_access_key, **kwargs)
172
173
174 def connect_elb(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
175 """
176 :type aws_access_key_id: string
177 :param aws_access_key_id: Your AWS Access Key ID
178
179 :type aws_secret_access_key: string
180 :param aws_secret_access_key: Your AWS Secret Access Key
181
182 :rtype: :class:`boto.ec2.elb.ELBConnection`
183 :return: A connection to Amazon's Load Balancing Service
184 """
185 from boto.ec2.elb import ELBConnection
186 return ELBConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
187
188
189 def connect_autoscale(aws_access_key_id=None, aws_secret_access_key=None,
190 **kwargs):
191 """
192 :type aws_access_key_id: string
193 :param aws_access_key_id: Your AWS Access Key ID
194
195 :type aws_secret_access_key: string
196 :param aws_secret_access_key: Your AWS Secret Access Key
197
198 :rtype: :class:`boto.ec2.autoscale.AutoScaleConnection`
199 :return: A connection to Amazon's Auto Scaling Service
200
201 :type use_block_device_types bool
202 :param use_block_device_types: Specifies whether to return described Launch Configs with block device mappings containing
203 block device types, or a list of old style block device mappings (deprecated). This defaults to false for compatability
204 with the old incorrect style.
205 """
206 from boto.ec2.autoscale import AutoScaleConnection
207 return AutoScaleConnection(aws_access_key_id, aws_secret_access_key,
208 **kwargs)
209
210
211 def connect_cloudwatch(aws_access_key_id=None, aws_secret_access_key=None,
212 **kwargs):
213 """
214 :type aws_access_key_id: string
215 :param aws_access_key_id: Your AWS Access Key ID
216
217 :type aws_secret_access_key: string
218 :param aws_secret_access_key: Your AWS Secret Access Key
219
220 :rtype: :class:`boto.ec2.cloudwatch.CloudWatchConnection`
221 :return: A connection to Amazon's EC2 Monitoring service
222 """
223 from boto.ec2.cloudwatch import CloudWatchConnection
224 return CloudWatchConnection(aws_access_key_id, aws_secret_access_key,
225 **kwargs)
226
227
228 def connect_sdb(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
229 """
230 :type aws_access_key_id: string
231 :param aws_access_key_id: Your AWS Access Key ID
232
233 :type aws_secret_access_key: string
234 :param aws_secret_access_key: Your AWS Secret Access Key
235
236 :rtype: :class:`boto.sdb.connection.SDBConnection`
237 :return: A connection to Amazon's SDB
238 """
239 from boto.sdb.connection import SDBConnection
240 return SDBConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
241
242
243 def connect_fps(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
244 """
245 :type aws_access_key_id: string
246 :param aws_access_key_id: Your AWS Access Key ID
247
248 :type aws_secret_access_key: string
249 :param aws_secret_access_key: Your AWS Secret Access Key
250
251 :rtype: :class:`boto.fps.connection.FPSConnection`
252 :return: A connection to FPS
253 """
254 from boto.fps.connection import FPSConnection
255 return FPSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
256
257
258 def connect_mturk(aws_access_key_id=None, aws_secret_access_key=None,
259 **kwargs):
260 """
261 :type aws_access_key_id: string
262 :param aws_access_key_id: Your AWS Access Key ID
263
264 :type aws_secret_access_key: string
265 :param aws_secret_access_key: Your AWS Secret Access Key
266
267 :rtype: :class:`boto.mturk.connection.MTurkConnection`
268 :return: A connection to MTurk
269 """
270 from boto.mturk.connection import MTurkConnection
271 return MTurkConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
272
273
274 def connect_cloudfront(aws_access_key_id=None, aws_secret_access_key=None,
275 **kwargs):
276 """
277 :type aws_access_key_id: string
278 :param aws_access_key_id: Your AWS Access Key ID
279
280 :type aws_secret_access_key: string
281 :param aws_secret_access_key: Your AWS Secret Access Key
282
283 :rtype: :class:`boto.fps.connection.FPSConnection`
284 :return: A connection to FPS
285 """
286 from boto.cloudfront import CloudFrontConnection
287 return CloudFrontConnection(aws_access_key_id, aws_secret_access_key,
288 **kwargs)
289
290
291 def connect_vpc(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
292 """
293 :type aws_access_key_id: string
294 :param aws_access_key_id: Your AWS Access Key ID
295
296 :type aws_secret_access_key: string
297 :param aws_secret_access_key: Your AWS Secret Access Key
298
299 :rtype: :class:`boto.vpc.VPCConnection`
300 :return: A connection to VPC
301 """
302 from boto.vpc import VPCConnection
303 return VPCConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
304
305
306 def connect_rds(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
307 """
308 :type aws_access_key_id: string
309 :param aws_access_key_id: Your AWS Access Key ID
310
311 :type aws_secret_access_key: string
312 :param aws_secret_access_key: Your AWS Secret Access Key
313
314 :rtype: :class:`boto.rds.RDSConnection`
315 :return: A connection to RDS
316 """
317 from boto.rds import RDSConnection
318 return RDSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
319
320
321 def connect_rds2(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
322 """
323 :type aws_access_key_id: string
324 :param aws_access_key_id: Your AWS Access Key ID
325
326 :type aws_secret_access_key: string
327 :param aws_secret_access_key: Your AWS Secret Access Key
328
329 :rtype: :class:`boto.rds2.layer1.RDSConnection`
330 :return: A connection to RDS
331 """
332 from boto.rds2.layer1 import RDSConnection
333 return RDSConnection(
334 aws_access_key_id=aws_access_key_id,
335 aws_secret_access_key=aws_secret_access_key,
336 **kwargs
337 )
338
339
340 def connect_emr(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
341 """
342 :type aws_access_key_id: string
343 :param aws_access_key_id: Your AWS Access Key ID
344
345 :type aws_secret_access_key: string
346 :param aws_secret_access_key: Your AWS Secret Access Key
347
348 :rtype: :class:`boto.emr.EmrConnection`
349 :return: A connection to Elastic mapreduce
350 """
351 from boto.emr import EmrConnection
352 return EmrConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
353
354
355 def connect_sns(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
356 """
357 :type aws_access_key_id: string
358 :param aws_access_key_id: Your AWS Access Key ID
359
360 :type aws_secret_access_key: string
361 :param aws_secret_access_key: Your AWS Secret Access Key
362
363 :rtype: :class:`boto.sns.SNSConnection`
364 :return: A connection to Amazon's SNS
365 """
366 from boto.sns import SNSConnection
367 return SNSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
368
369
370 def connect_iam(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
371 """
372 :type aws_access_key_id: string
373 :param aws_access_key_id: Your AWS Access Key ID
374
375 :type aws_secret_access_key: string
376 :param aws_secret_access_key: Your AWS Secret Access Key
377
378 :rtype: :class:`boto.iam.IAMConnection`
379 :return: A connection to Amazon's IAM
380 """
381 from boto.iam import IAMConnection
382 return IAMConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
383
384
385 def connect_route53(aws_access_key_id=None, aws_secret_access_key=None,
386 **kwargs):
387 """
388 :type aws_access_key_id: string
389 :param aws_access_key_id: Your AWS Access Key ID
390
391 :type aws_secret_access_key: string
392 :param aws_secret_access_key: Your AWS Secret Access Key
393
394 :rtype: :class:`boto.dns.Route53Connection`
395 :return: A connection to Amazon's Route53 DNS Service
396 """
397 from boto.route53 import Route53Connection
398 return Route53Connection(aws_access_key_id, aws_secret_access_key,
399 **kwargs)
400
401
402 def connect_cloudformation(aws_access_key_id=None, aws_secret_access_key=None,
403 **kwargs):
404 """
405 :type aws_access_key_id: string
406 :param aws_access_key_id: Your AWS Access Key ID
407
408 :type aws_secret_access_key: string
409 :param aws_secret_access_key: Your AWS Secret Access Key
410
411 :rtype: :class:`boto.cloudformation.CloudFormationConnection`
412 :return: A connection to Amazon's CloudFormation Service
413 """
414 from boto.cloudformation import CloudFormationConnection
415 return CloudFormationConnection(aws_access_key_id, aws_secret_access_key,
416 **kwargs)
417
418
419 def connect_euca(host=None, aws_access_key_id=None, aws_secret_access_key=None,
420 port=8773, path='/services/Eucalyptus', is_secure=False,
421 **kwargs):
422 """
423 Connect to a Eucalyptus service.
424
425 :type host: string
426 :param host: the host name or ip address of the Eucalyptus server
427
428 :type aws_access_key_id: string
429 :param aws_access_key_id: Your AWS Access Key ID
430
431 :type aws_secret_access_key: string
432 :param aws_secret_access_key: Your AWS Secret Access Key
433
434 :rtype: :class:`boto.ec2.connection.EC2Connection`
435 :return: A connection to Eucalyptus server
436 """
437 from boto.ec2 import EC2Connection
438 from boto.ec2.regioninfo import RegionInfo
439
440 # Check for values in boto config, if not supplied as args
441 if not aws_access_key_id:
442 aws_access_key_id = config.get('Credentials',
443 'euca_access_key_id',
444 None)
445 if not aws_secret_access_key:
446 aws_secret_access_key = config.get('Credentials',
447 'euca_secret_access_key',
448 None)
449 if not host:
450 host = config.get('Boto', 'eucalyptus_host', None)
451
452 reg = RegionInfo(name='eucalyptus', endpoint=host)
453 return EC2Connection(aws_access_key_id, aws_secret_access_key,
454 region=reg, port=port, path=path,
455 is_secure=is_secure, **kwargs)
456
457
458 def connect_glacier(aws_access_key_id=None, aws_secret_access_key=None,
459 **kwargs):
460 """
461 :type aws_access_key_id: string
462 :param aws_access_key_id: Your AWS Access Key ID
463
464 :type aws_secret_access_key: string
465 :param aws_secret_access_key: Your AWS Secret Access Key
466
467 :rtype: :class:`boto.glacier.layer2.Layer2`
468 :return: A connection to Amazon's Glacier Service
469 """
470 from boto.glacier.layer2 import Layer2
471 return Layer2(aws_access_key_id, aws_secret_access_key,
472 **kwargs)
473
474
475 def connect_ec2_endpoint(url, aws_access_key_id=None,
476 aws_secret_access_key=None,
477 **kwargs):
478 """
479 Connect to an EC2 Api endpoint. Additional arguments are passed
480 through to connect_ec2.
481
482 :type url: string
483 :param url: A url for the ec2 api endpoint to connect to
484
485 :type aws_access_key_id: string
486 :param aws_access_key_id: Your AWS Access Key ID
487
488 :type aws_secret_access_key: string
489 :param aws_secret_access_key: Your AWS Secret Access Key
490
491 :rtype: :class:`boto.ec2.connection.EC2Connection`
492 :return: A connection to Eucalyptus server
493 """
494 from boto.ec2.regioninfo import RegionInfo
495
496 purl = urlparse(url)
497 kwargs['port'] = purl.port
498 kwargs['host'] = purl.hostname
499 kwargs['path'] = purl.path
500 if not 'is_secure' in kwargs:
501 kwargs['is_secure'] = (purl.scheme == "https")
502
503 kwargs['region'] = RegionInfo(name=purl.hostname,
504 endpoint=purl.hostname)
505 kwargs['aws_access_key_id'] = aws_access_key_id
506 kwargs['aws_secret_access_key'] = aws_secret_access_key
507
508 return(connect_ec2(**kwargs))
509
510
511 def connect_walrus(host=None, aws_access_key_id=None,
512 aws_secret_access_key=None,
513 port=8773, path='/services/Walrus', is_secure=False,
514 **kwargs):
515 """
516 Connect to a Walrus service.
517
518 :type host: string
519 :param host: the host name or ip address of the Walrus server
520
521 :type aws_access_key_id: string
522 :param aws_access_key_id: Your AWS Access Key ID
523
524 :type aws_secret_access_key: string
525 :param aws_secret_access_key: Your AWS Secret Access Key
526
527 :rtype: :class:`boto.s3.connection.S3Connection`
528 :return: A connection to Walrus
529 """
530 from boto.s3.connection import S3Connection
531 from boto.s3.connection import OrdinaryCallingFormat
532
533 # Check for values in boto config, if not supplied as args
534 if not aws_access_key_id:
535 aws_access_key_id = config.get('Credentials',
536 'euca_access_key_id',
537 None)
538 if not aws_secret_access_key:
539 aws_secret_access_key = config.get('Credentials',
540 'euca_secret_access_key',
541 None)
542 if not host:
543 host = config.get('Boto', 'walrus_host', None)
544
545 return S3Connection(aws_access_key_id, aws_secret_access_key,
546 host=host, port=port, path=path,
547 calling_format=OrdinaryCallingFormat(),
548 is_secure=is_secure, **kwargs)
549
550
551 def connect_ses(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
552 """
553 :type aws_access_key_id: string
554 :param aws_access_key_id: Your AWS Access Key ID
555
556 :type aws_secret_access_key: string
557 :param aws_secret_access_key: Your AWS Secret Access Key
558
559 :rtype: :class:`boto.ses.SESConnection`
560 :return: A connection to Amazon's SES
561 """
562 from boto.ses import SESConnection
563 return SESConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
564
565
566 def connect_sts(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
567 """
568 :type aws_access_key_id: string
569 :param aws_access_key_id: Your AWS Access Key ID
570
571 :type aws_secret_access_key: string
572 :param aws_secret_access_key: Your AWS Secret Access Key
573
574 :rtype: :class:`boto.sts.STSConnection`
575 :return: A connection to Amazon's STS
576 """
577 from boto.sts import STSConnection
578 return STSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
579
580
581 def connect_ia(ia_access_key_id=None, ia_secret_access_key=None,
582 is_secure=False, **kwargs):
583 """
584 Connect to the Internet Archive via their S3-like API.
585
586 :type ia_access_key_id: string
587 :param ia_access_key_id: Your IA Access Key ID. This will also look
588 in your boto config file for an entry in the Credentials
589 section called "ia_access_key_id"
590
591 :type ia_secret_access_key: string
592 :param ia_secret_access_key: Your IA Secret Access Key. This will also
593 look in your boto config file for an entry in the Credentials
594 section called "ia_secret_access_key"
595
596 :rtype: :class:`boto.s3.connection.S3Connection`
597 :return: A connection to the Internet Archive
598 """
599 from boto.s3.connection import S3Connection
600 from boto.s3.connection import OrdinaryCallingFormat
601
602 access_key = config.get('Credentials', 'ia_access_key_id',
603 ia_access_key_id)
604 secret_key = config.get('Credentials', 'ia_secret_access_key',
605 ia_secret_access_key)
606
607 return S3Connection(access_key, secret_key,
608 host='s3.us.archive.org',
609 calling_format=OrdinaryCallingFormat(),
610 is_secure=is_secure, **kwargs)
611
612
613 def connect_dynamodb(aws_access_key_id=None,
614 aws_secret_access_key=None,
615 **kwargs):
616 """
617 :type aws_access_key_id: string
618 :param aws_access_key_id: Your AWS Access Key ID
619
620 :type aws_secret_access_key: string
621 :param aws_secret_access_key: Your AWS Secret Access Key
622
623 :rtype: :class:`boto.dynamodb.layer2.Layer2`
624 :return: A connection to the Layer2 interface for DynamoDB.
625 """
626 from boto.dynamodb.layer2 import Layer2
627 return Layer2(aws_access_key_id, aws_secret_access_key, **kwargs)
628
629
630 def connect_swf(aws_access_key_id=None,
631 aws_secret_access_key=None,
632 **kwargs):
633 """
634 :type aws_access_key_id: string
635 :param aws_access_key_id: Your AWS Access Key ID
636
637 :type aws_secret_access_key: string
638 :param aws_secret_access_key: Your AWS Secret Access Key
639
640 :rtype: :class:`boto.swf.layer1.Layer1`
641 :return: A connection to the Layer1 interface for SWF.
642 """
643 from boto.swf.layer1 import Layer1
644 return Layer1(aws_access_key_id, aws_secret_access_key, **kwargs)
645
646
647 def connect_cloudsearch(aws_access_key_id=None,
648 aws_secret_access_key=None,
649 **kwargs):
650 """
651 :type aws_access_key_id: string
652 :param aws_access_key_id: Your AWS Access Key ID
653
654 :type aws_secret_access_key: string
655 :param aws_secret_access_key: Your AWS Secret Access Key
656
657 :rtype: :class:`boto.cloudsearch.layer2.Layer2`
658 :return: A connection to Amazon's CloudSearch service
659 """
660 from boto.cloudsearch.layer2 import Layer2
661 return Layer2(aws_access_key_id, aws_secret_access_key,
662 **kwargs)
663
664
665 def connect_cloudsearch2(aws_access_key_id=None,
666 aws_secret_access_key=None,
667 sign_request=False,
668 **kwargs):
669 """
670 :type aws_access_key_id: string
671 :param aws_access_key_id: Your AWS Access Key ID
672
673 :type aws_secret_access_key: string
674 :param aws_secret_access_key: Your AWS Secret Access Key
675
676 :type sign_request: bool
677 :param sign_request: whether or not to sign search and
678 upload requests
679
680 :rtype: :class:`boto.cloudsearch2.layer2.Layer2`
681 :return: A connection to Amazon's CloudSearch2 service
682 """
683 from boto.cloudsearch2.layer2 import Layer2
684 return Layer2(aws_access_key_id, aws_secret_access_key,
685 sign_request=sign_request,
686 **kwargs)
687
688
689 def connect_cloudsearchdomain(aws_access_key_id=None,
690 aws_secret_access_key=None,
691 **kwargs):
692 """
693 :type aws_access_key_id: string
694 :param aws_access_key_id: Your AWS Access Key ID
695
696 :type aws_secret_access_key: string
697 :param aws_secret_access_key: Your AWS Secret Access Key
698
699 :rtype: :class:`boto.cloudsearchdomain.layer1.CloudSearchDomainConnection`
700 :return: A connection to Amazon's CloudSearch Domain service
701 """
702 from boto.cloudsearchdomain.layer1 import CloudSearchDomainConnection
703 return CloudSearchDomainConnection(aws_access_key_id,
704 aws_secret_access_key, **kwargs)
705
706
707 def connect_beanstalk(aws_access_key_id=None,
708 aws_secret_access_key=None,
709 **kwargs):
710 """
711 :type aws_access_key_id: string
712 :param aws_access_key_id: Your AWS Access Key ID
713
714 :type aws_secret_access_key: string
715 :param aws_secret_access_key: Your AWS Secret Access Key
716
717 :rtype: :class:`boto.beanstalk.layer1.Layer1`
718 :return: A connection to Amazon's Elastic Beanstalk service
719 """
720 from boto.beanstalk.layer1 import Layer1
721 return Layer1(aws_access_key_id, aws_secret_access_key, **kwargs)
722
723
724 def connect_elastictranscoder(aws_access_key_id=None,
725 aws_secret_access_key=None,
726 **kwargs):
727 """
728 :type aws_access_key_id: string
729 :param aws_access_key_id: Your AWS Access Key ID
730
731 :type aws_secret_access_key: string
732 :param aws_secret_access_key: Your AWS Secret Access Key
733
734 :rtype: :class:`boto.ets.layer1.ElasticTranscoderConnection`
735 :return: A connection to Amazon's Elastic Transcoder service
736 """
737 from boto.elastictranscoder.layer1 import ElasticTranscoderConnection
738 return ElasticTranscoderConnection(
739 aws_access_key_id=aws_access_key_id,
740 aws_secret_access_key=aws_secret_access_key,
741 **kwargs)
742
743
744 def connect_opsworks(aws_access_key_id=None,
745 aws_secret_access_key=None,
746 **kwargs):
747 from boto.opsworks.layer1 import OpsWorksConnection
748 return OpsWorksConnection(
749 aws_access_key_id=aws_access_key_id,
750 aws_secret_access_key=aws_secret_access_key,
751 **kwargs)
752
753
754 def connect_redshift(aws_access_key_id=None,
755 aws_secret_access_key=None,
756 **kwargs):
757 """
758 :type aws_access_key_id: string
759 :param aws_access_key_id: Your AWS Access Key ID
760
761 :type aws_secret_access_key: string
762 :param aws_secret_access_key: Your AWS Secret Access Key
763
764 :rtype: :class:`boto.redshift.layer1.RedshiftConnection`
765 :return: A connection to Amazon's Redshift service
766 """
767 from boto.redshift.layer1 import RedshiftConnection
768 return RedshiftConnection(
769 aws_access_key_id=aws_access_key_id,
770 aws_secret_access_key=aws_secret_access_key,
771 **kwargs
772 )
773
774
775 def connect_support(aws_access_key_id=None,
776 aws_secret_access_key=None,
777 **kwargs):
778 """
779 :type aws_access_key_id: string
780 :param aws_access_key_id: Your AWS Access Key ID
781
782 :type aws_secret_access_key: string
783 :param aws_secret_access_key: Your AWS Secret Access Key
784
785 :rtype: :class:`boto.support.layer1.SupportConnection`
786 :return: A connection to Amazon's Support service
787 """
788 from boto.support.layer1 import SupportConnection
789 return SupportConnection(
790 aws_access_key_id=aws_access_key_id,
791 aws_secret_access_key=aws_secret_access_key,
792 **kwargs
793 )
794
795
796 def connect_cloudtrail(aws_access_key_id=None,
797 aws_secret_access_key=None,
798 **kwargs):
799 """
800 Connect to AWS CloudTrail
801
802 :type aws_access_key_id: string
803 :param aws_access_key_id: Your AWS Access Key ID
804
805 :type aws_secret_access_key: string
806 :param aws_secret_access_key: Your AWS Secret Access Key
807
808 :rtype: :class:`boto.cloudtrail.layer1.CloudtrailConnection`
809 :return: A connection to the AWS Cloudtrail service
810 """
811 from boto.cloudtrail.layer1 import CloudTrailConnection
812 return CloudTrailConnection(
813 aws_access_key_id=aws_access_key_id,
814 aws_secret_access_key=aws_secret_access_key,
815 **kwargs
816 )
817
818
819 def connect_directconnect(aws_access_key_id=None,
820 aws_secret_access_key=None,
821 **kwargs):
822 """
823 Connect to AWS DirectConnect
824
825 :type aws_access_key_id: string
826 :param aws_access_key_id: Your AWS Access Key ID
827
828 :type aws_secret_access_key: string
829 :param aws_secret_access_key: Your AWS Secret Access Key
830
831 :rtype: :class:`boto.directconnect.layer1.DirectConnectConnection`
832 :return: A connection to the AWS DirectConnect service
833 """
834 from boto.directconnect.layer1 import DirectConnectConnection
835 return DirectConnectConnection(
836 aws_access_key_id=aws_access_key_id,
837 aws_secret_access_key=aws_secret_access_key,
838 **kwargs
839 )
840
841 def connect_kinesis(aws_access_key_id=None,
842 aws_secret_access_key=None,
843 **kwargs):
844 """
845 Connect to Amazon Kinesis
846
847 :type aws_access_key_id: string
848 :param aws_access_key_id: Your AWS Access Key ID
849
850 :type aws_secret_access_key: string
851 :param aws_secret_access_key: Your AWS Secret Access Key
852
853 rtype: :class:`boto.kinesis.layer1.KinesisConnection`
854 :return: A connection to the Amazon Kinesis service
855 """
856 from boto.kinesis.layer1 import KinesisConnection
857 return KinesisConnection(
858 aws_access_key_id=aws_access_key_id,
859 aws_secret_access_key=aws_secret_access_key,
860 **kwargs
861 )
862
863 def connect_logs(aws_access_key_id=None,
864 aws_secret_access_key=None,
865 **kwargs):
866 """
867 Connect to Amazon CloudWatch Logs
868
869 :type aws_access_key_id: string
870 :param aws_access_key_id: Your AWS Access Key ID
871
872 :type aws_secret_access_key: string
873 :param aws_secret_access_key: Your AWS Secret Access Key
874
875 rtype: :class:`boto.kinesis.layer1.CloudWatchLogsConnection`
876 :return: A connection to the Amazon CloudWatch Logs service
877 """
878 from boto.logs.layer1 import CloudWatchLogsConnection
879 return CloudWatchLogsConnection(
880 aws_access_key_id=aws_access_key_id,
881 aws_secret_access_key=aws_secret_access_key,
882 **kwargs
883 )
884
885
886 def connect_route53domains(aws_access_key_id=None,
887 aws_secret_access_key=None,
888 **kwargs):
889 """
890 Connect to Amazon Route 53 Domains
891
892 :type aws_access_key_id: string
893 :param aws_access_key_id: Your AWS Access Key ID
894
895 :type aws_secret_access_key: string
896 :param aws_secret_access_key: Your AWS Secret Access Key
897
898 rtype: :class:`boto.route53.domains.layer1.Route53DomainsConnection`
899 :return: A connection to the Amazon Route 53 Domains service
900 """
901 from boto.route53.domains.layer1 import Route53DomainsConnection
902 return Route53DomainsConnection(
903 aws_access_key_id=aws_access_key_id,
904 aws_secret_access_key=aws_secret_access_key,
905 **kwargs
906 )
907
908
909 def connect_cognito_identity(aws_access_key_id=None,
910 aws_secret_access_key=None,
911 **kwargs):
912 """
913 Connect to Amazon Cognito Identity
914
915 :type aws_access_key_id: string
916 :param aws_access_key_id: Your AWS Access Key ID
917
918 :type aws_secret_access_key: string
919 :param aws_secret_access_key: Your AWS Secret Access Key
920
921 rtype: :class:`boto.cognito.identity.layer1.CognitoIdentityConnection`
922 :return: A connection to the Amazon Cognito Identity service
923 """
924 from boto.cognito.identity.layer1 import CognitoIdentityConnection
925 return CognitoIdentityConnection(
926 aws_access_key_id=aws_access_key_id,
927 aws_secret_access_key=aws_secret_access_key,
928 **kwargs
929 )
930
931
932 def connect_cognito_sync(aws_access_key_id=None,
933 aws_secret_access_key=None,
934 **kwargs):
935 """
936 Connect to Amazon Cognito Sync
937
938 :type aws_access_key_id: string
939 :param aws_access_key_id: Your AWS Access Key ID
940
941 :type aws_secret_access_key: string
942 :param aws_secret_access_key: Your AWS Secret Access Key
943
944 rtype: :class:`boto.cognito.sync.layer1.CognitoSyncConnection`
945 :return: A connection to the Amazon Cognito Sync service
946 """
947 from boto.cognito.sync.layer1 import CognitoSyncConnection
948 return CognitoSyncConnection(
949 aws_access_key_id=aws_access_key_id,
950 aws_secret_access_key=aws_secret_access_key,
951 **kwargs
952 )
953
954
955 def connect_kms(aws_access_key_id=None,
956 aws_secret_access_key=None,
957 **kwargs):
958 """
959 Connect to AWS Key Management Service
960
961 :type aws_access_key_id: string
962 :param aws_access_key_id: Your AWS Access Key ID
963
964 :type aws_secret_access_key: string
965 :param aws_secret_access_key: Your AWS Secret Access Key
966
967 rtype: :class:`boto.kms.layer1.KMSConnection`
968 :return: A connection to the AWS Key Management Service
969 """
970 from boto.kms.layer1 import KMSConnection
971 return KMSConnection(
972 aws_access_key_id=aws_access_key_id,
973 aws_secret_access_key=aws_secret_access_key,
974 **kwargs
975 )
976
977
978 def connect_awslambda(aws_access_key_id=None,
979 aws_secret_access_key=None,
980 **kwargs):
981 """
982 Connect to AWS Lambda
983
984 :type aws_access_key_id: string
985 :param aws_access_key_id: Your AWS Access Key ID
986
987 :type aws_secret_access_key: string
988 :param aws_secret_access_key: Your AWS Secret Access Key
989
990 rtype: :class:`boto.awslambda.layer1.AWSLambdaConnection`
991 :return: A connection to the AWS Lambda service
992 """
993 from boto.awslambda.layer1 import AWSLambdaConnection
994 return AWSLambdaConnection(
995 aws_access_key_id=aws_access_key_id,
996 aws_secret_access_key=aws_secret_access_key,
997 **kwargs
998 )
999
1000
1001 def connect_codedeploy(aws_access_key_id=None,
1002 aws_secret_access_key=None,
1003 **kwargs):
1004 """
1005 Connect to AWS CodeDeploy
1006
1007 :type aws_access_key_id: string
1008 :param aws_access_key_id: Your AWS Access Key ID
1009
1010 :type aws_secret_access_key: string
1011 :param aws_secret_access_key: Your AWS Secret Access Key
1012
1013 rtype: :class:`boto.cognito.sync.layer1.CodeDeployConnection`
1014 :return: A connection to the AWS CodeDeploy service
1015 """
1016 from boto.codedeploy.layer1 import CodeDeployConnection
1017 return CodeDeployConnection(
1018 aws_access_key_id=aws_access_key_id,
1019 aws_secret_access_key=aws_secret_access_key,
1020 **kwargs
1021 )
1022
1023
1024 def connect_configservice(aws_access_key_id=None,
1025 aws_secret_access_key=None,
1026 **kwargs):
1027 """
1028 Connect to AWS Config
1029
1030 :type aws_access_key_id: string
1031 :param aws_access_key_id: Your AWS Access Key ID
1032
1033 :type aws_secret_access_key: string
1034 :param aws_secret_access_key: Your AWS Secret Access Key
1035
1036 rtype: :class:`boto.kms.layer1.ConfigServiceConnection`
1037 :return: A connection to the AWS Config service
1038 """
1039 from boto.configservice.layer1 import ConfigServiceConnection
1040 return ConfigServiceConnection(
1041 aws_access_key_id=aws_access_key_id,
1042 aws_secret_access_key=aws_secret_access_key,
1043 **kwargs
1044 )
1045
1046
1047 def connect_cloudhsm(aws_access_key_id=None,
1048 aws_secret_access_key=None,
1049 **kwargs):
1050 """
1051 Connect to AWS CloudHSM
1052
1053 :type aws_access_key_id: string
1054 :param aws_access_key_id: Your AWS Access Key ID
1055
1056 :type aws_secret_access_key: string
1057 :param aws_secret_access_key: Your AWS Secret Access Key
1058
1059 rtype: :class:`boto.cloudhsm.layer1.CloudHSMConnection`
1060 :return: A connection to the AWS CloudHSM service
1061 """
1062 from boto.cloudhsm.layer1 import CloudHSMConnection
1063 return CloudHSMConnection(
1064 aws_access_key_id=aws_access_key_id,
1065 aws_secret_access_key=aws_secret_access_key,
1066 **kwargs
1067 )
1068
1069
1070 def connect_ec2containerservice(aws_access_key_id=None,
1071 aws_secret_access_key=None,
1072 **kwargs):
1073 """
1074 Connect to Amazon EC2 Container Service
1075 rtype: :class:`boto.ec2containerservice.layer1.EC2ContainerServiceConnection`
1076 :return: A connection to the Amazon EC2 Container Service
1077 """
1078 from boto.ec2containerservice.layer1 import EC2ContainerServiceConnection
1079 return EC2ContainerServiceConnection(
1080 aws_access_key_id=aws_access_key_id,
1081 aws_secret_access_key=aws_secret_access_key,
1082 **kwargs
1083 )
1084
1085
1086 def connect_machinelearning(aws_access_key_id=None,
1087 aws_secret_access_key=None,
1088 **kwargs):
1089 """
1090 Connect to Amazon Machine Learning service
1091 rtype: :class:`boto.machinelearning.layer1.MachineLearningConnection`
1092 :return: A connection to the Amazon Machine Learning service
1093 """
1094 from boto.machinelearning.layer1 import MachineLearningConnection
1095 return MachineLearningConnection(
1096 aws_access_key_id=aws_access_key_id,
1097 aws_secret_access_key=aws_secret_access_key,
1098 **kwargs
1099 )
1100
1101
1102 def storage_uri(uri_str, default_scheme='file', debug=0, validate=True,
1103 bucket_storage_uri_class=BucketStorageUri,
1104 suppress_consec_slashes=True, is_latest=False):
1105 """
1106 Instantiate a StorageUri from a URI string.
1107
1108 :type uri_str: string
1109 :param uri_str: URI naming bucket + optional object.
1110 :type default_scheme: string
1111 :param default_scheme: default scheme for scheme-less URIs.
1112 :type debug: int
1113 :param debug: debug level to pass in to boto connection (range 0..2).
1114 :type validate: bool
1115 :param validate: whether to check for bucket name validity.
1116 :type bucket_storage_uri_class: BucketStorageUri interface.
1117 :param bucket_storage_uri_class: Allows mocking for unit tests.
1118 :param suppress_consec_slashes: If provided, controls whether
1119 consecutive slashes will be suppressed in key paths.
1120 :type is_latest: bool
1121 :param is_latest: whether this versioned object represents the
1122 current version.
1123
1124 We allow validate to be disabled to allow caller
1125 to implement bucket-level wildcarding (outside the boto library;
1126 see gsutil).
1127
1128 :rtype: :class:`boto.StorageUri` subclass
1129 :return: StorageUri subclass for given URI.
1130
1131 ``uri_str`` must be one of the following formats:
1132
1133 * gs://bucket/name
1134 * gs://bucket/name#ver
1135 * s3://bucket/name
1136 * gs://bucket
1137 * s3://bucket
1138 * filename (which could be a Unix path like /a/b/c or a Windows path like
1139 C:\a\b\c)
1140
1141 The last example uses the default scheme ('file', unless overridden).
1142 """
1143 version_id = None
1144 generation = None
1145
1146 # Manually parse URI components instead of using urlparse because
1147 # what we're calling URIs don't really fit the standard syntax for URIs
1148 # (the latter includes an optional host/net location part).
1149 end_scheme_idx = uri_str.find('://')
1150 if end_scheme_idx == -1:
1151 scheme = default_scheme.lower()
1152 path = uri_str
1153 else:
1154 scheme = uri_str[0:end_scheme_idx].lower()
1155 path = uri_str[end_scheme_idx + 3:]
1156
1157 if scheme not in ['file', 's3', 'gs']:
1158 raise InvalidUriError('Unrecognized scheme "%s"' % scheme)
1159 if scheme == 'file':
1160 # For file URIs we have no bucket name, and use the complete path
1161 # (minus 'file://') as the object name.
1162 is_stream = False
1163 if path == '-':
1164 is_stream = True
1165 return FileStorageUri(path, debug, is_stream)
1166 else:
1167 path_parts = path.split('/', 1)
1168 bucket_name = path_parts[0]
1169 object_name = ''
1170 # If validate enabled, ensure the bucket name is valid, to avoid
1171 # possibly confusing other parts of the code. (For example if we didn't
1172 # catch bucket names containing ':', when a user tried to connect to
1173 # the server with that name they might get a confusing error about
1174 # non-integer port numbers.)
1175 if (validate and bucket_name and
1176 (not BUCKET_NAME_RE.match(bucket_name)
1177 or TOO_LONG_DNS_NAME_COMP.search(bucket_name))):
1178 raise InvalidUriError('Invalid bucket name in URI "%s"' % uri_str)
1179 if scheme == 'gs':
1180 match = GENERATION_RE.search(path)
1181 if match:
1182 md = match.groupdict()
1183 versionless_uri_str = md['versionless_uri_str']
1184 path_parts = versionless_uri_str.split('/', 1)
1185 generation = int(md['generation'])
1186 elif scheme == 's3':
1187 match = VERSION_RE.search(path)
1188 if match:
1189 md = match.groupdict()
1190 versionless_uri_str = md['versionless_uri_str']
1191 path_parts = versionless_uri_str.split('/', 1)
1192 version_id = md['version_id']
1193 else:
1194 raise InvalidUriError('Unrecognized scheme "%s"' % scheme)
1195 if len(path_parts) > 1:
1196 object_name = path_parts[1]
1197 return bucket_storage_uri_class(
1198 scheme, bucket_name, object_name, debug,
1199 suppress_consec_slashes=suppress_consec_slashes,
1200 version_id=version_id, generation=generation, is_latest=is_latest)
1201
1202
1203 def storage_uri_for_key(key):
1204 """Returns a StorageUri for the given key.
1205
1206 :type key: :class:`boto.s3.key.Key` or subclass
1207 :param key: URI naming bucket + optional object.
1208 """
1209 if not isinstance(key, boto.s3.key.Key):
1210 raise InvalidUriError('Requested key (%s) is not a subclass of '
1211 'boto.s3.key.Key' % str(type(key)))
1212 prov_name = key.bucket.connection.provider.get_provider_name()
1213 uri_str = '%s://%s/%s' % (prov_name, key.bucket.name, key.name)
1214 return storage_uri(uri_str)
1215
1216 boto.plugin.load_plugins(config)