@@ -168,6 +168,8 @@ class S3Uri:
168
168
def __init__ (self , request , raw_uri ):
169
169
self .request = request
170
170
self .uri = urlparse .urlparse (raw_uri )
171
+ match = re .match ('(.+\.|)?s3(?:-([^.]*))?.amazonaws.com' , self .uri .hostname )
172
+ self .virtual_host_bucket , self .region = (match .groups () if match else (None , None ))
171
173
172
174
def user_host (self ):
173
175
parts = self .uri .netloc .split ('@' , 1 )
@@ -186,13 +188,8 @@ def credentials(self):
186
188
raise Exception ('Access key and secret are specified improperly in the URL' )
187
189
return None , None
188
190
189
- def virtual_host_bucket (self ):
190
- virtual_host_match = re .match ('(?:(.*).|)s3(?:-[^.]*)?.amazonaws.com' , self .uri .hostname )
191
- return virtual_host_match and virtual_host_match .group (1 )
192
-
193
191
def bucket_key (self ):
194
- bucket = self .virtual_host_bucket ()
195
- if bucket :
192
+ if self .virtual_host_bucket :
196
193
key = self .uri .path [1 :]
197
194
else :
198
195
_ , bucket , key = map (urllib .unquote , self .uri .path .split ('/' , 2 ))
@@ -201,7 +198,7 @@ def bucket_key(self):
201
198
def signature_version (self ):
202
199
if self .request .signature_version :
203
200
return self .request .signature_version
204
- elif self .virtual_host_bucket () == '' :
201
+ elif self .virtual_host_bucket == '' :
205
202
return 's3v4'
206
203
207
204
def _handle_message (self , message ):
@@ -222,6 +219,7 @@ def _handle_message(self, message):
222
219
session = boto3 .session .Session (
223
220
aws_access_key_id = s3_access_key ,
224
221
aws_secret_access_key = s3_access_secret ,
222
+ region_name = s3_uri .region ,
225
223
)
226
224
s3 = session .resource ('s3' ,
227
225
config = botocore .client .Config (signature_version = s3_uri .signature_version ()),
0 commit comments