comparison env/lib/python3.7/site-packages/boto/roboto/awsqueryservice.py @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:26e78fe6e8c4
1 from __future__ import print_function
2 import os
3 import urlparse
4 import boto
5 import boto.connection
6 import boto.jsonresponse
7 import boto.exception
8 from boto.roboto import awsqueryrequest
9
10 class NoCredentialsError(boto.exception.BotoClientError):
11
12 def __init__(self):
13 s = 'Unable to find credentials'
14 super(NoCredentialsError, self).__init__(s)
15
16 class AWSQueryService(boto.connection.AWSQueryConnection):
17
18 Name = ''
19 Description = ''
20 APIVersion = ''
21 Authentication = 'sign-v2'
22 Path = '/'
23 Port = 443
24 Provider = 'aws'
25 EnvURL = 'AWS_URL'
26
27 Regions = []
28
29 def __init__(self, **args):
30 self.args = args
31 self.check_for_credential_file()
32 self.check_for_env_url()
33 if 'host' not in self.args:
34 if self.Regions:
35 region_name = self.args.get('region_name',
36 self.Regions[0]['name'])
37 for region in self.Regions:
38 if region['name'] == region_name:
39 self.args['host'] = region['endpoint']
40 if 'path' not in self.args:
41 self.args['path'] = self.Path
42 if 'port' not in self.args:
43 self.args['port'] = self.Port
44 try:
45 super(AWSQueryService, self).__init__(**self.args)
46 self.aws_response = None
47 except boto.exception.NoAuthHandlerFound:
48 raise NoCredentialsError()
49
50 def check_for_credential_file(self):
51 """
52 Checks for the existence of an AWS credential file.
53 If the environment variable AWS_CREDENTIAL_FILE is
54 set and points to a file, that file will be read and
55 will be searched credentials.
56 Note that if credentials have been explicitelypassed
57 into the class constructor, those values always take
58 precedence.
59 """
60 if 'AWS_CREDENTIAL_FILE' in os.environ:
61 path = os.environ['AWS_CREDENTIAL_FILE']
62 path = os.path.expanduser(path)
63 path = os.path.expandvars(path)
64 if os.path.isfile(path):
65 fp = open(path)
66 lines = fp.readlines()
67 fp.close()
68 for line in lines:
69 if line[0] != '#':
70 if '=' in line:
71 name, value = line.split('=', 1)
72 if name.strip() == 'AWSAccessKeyId':
73 if 'aws_access_key_id' not in self.args:
74 value = value.strip()
75 self.args['aws_access_key_id'] = value
76 elif name.strip() == 'AWSSecretKey':
77 if 'aws_secret_access_key' not in self.args:
78 value = value.strip()
79 self.args['aws_secret_access_key'] = value
80 else:
81 print('Warning: unable to read AWS_CREDENTIAL_FILE')
82
83 def check_for_env_url(self):
84 """
85 First checks to see if a url argument was explicitly passed
86 in. If so, that will be used. If not, it checks for the
87 existence of the environment variable specified in ENV_URL.
88 If this is set, it should contain a fully qualified URL to the
89 service you want to use.
90 Note that any values passed explicitly to the class constructor
91 will take precedence.
92 """
93 url = self.args.get('url', None)
94 if url:
95 del self.args['url']
96 if not url and self.EnvURL in os.environ:
97 url = os.environ[self.EnvURL]
98 if url:
99 rslt = urlparse.urlparse(url)
100 if 'is_secure' not in self.args:
101 if rslt.scheme == 'https':
102 self.args['is_secure'] = True
103 else:
104 self.args['is_secure'] = False
105
106 host = rslt.netloc
107 port = None
108 l = host.split(':')
109 if len(l) > 1:
110 host = l[0]
111 port = int(l[1])
112 if 'host' not in self.args:
113 self.args['host'] = host
114 if port and 'port' not in self.args:
115 self.args['port'] = port
116
117 if rslt.path and 'path' not in self.args:
118 self.args['path'] = rslt.path
119
120 def _required_auth_capability(self):
121 return [self.Authentication]
122