Fix S3 to work with other regions.

This commit is contained in:
Steve Pulec 2014-07-08 20:35:48 -04:00
parent dc11f71ff0
commit be25a2ba99
2 changed files with 12 additions and 2 deletions

View File

@ -1,7 +1,7 @@
from .responses import S3ResponseInstance from .responses import S3ResponseInstance
url_bases = [ url_bases = [
"https?://(?P<bucket_name>[a-zA-Z0-9\-_.]*)\.?s3.amazonaws.com" "https?://(?P<bucket_name>[a-zA-Z0-9\-_.]*)\.?s3(.*).amazonaws.com"
] ]
url_paths = { url_paths = {

View File

@ -3,6 +3,7 @@ from io import BytesIO
import boto import boto
from boto.exception import S3CreateError, S3ResponseError from boto.exception import S3CreateError, S3ResponseError
from boto.s3.connection import S3Connection
from boto.s3.key import Key from boto.s3.key import Key
from freezegun import freeze_time from freezegun import freeze_time
import requests import requests
@ -277,6 +278,13 @@ def test_create_existing_bucket():
conn.create_bucket.when.called_with('foobar').should.throw(S3CreateError) conn.create_bucket.when.called_with('foobar').should.throw(S3CreateError)
@mock_s3
def test_other_region():
conn = S3Connection('key', 'secret', host='s3-website-ap-southeast-2.amazonaws.com')
conn.create_bucket("foobar")
list(conn.get_bucket("foobar").get_all_keys()).should.equal([])
@mock_s3 @mock_s3
def test_bucket_deletion(): def test_bucket_deletion():
conn = boto.connect_s3('the_key', 'the_secret') conn = boto.connect_s3('the_key', 'the_secret')
@ -335,6 +343,7 @@ def test_post_with_metadata_to_bucket():
bucket.get_key('the-key').get_metadata('test').should.equal('metadata') bucket.get_key('the-key').get_metadata('test').should.equal('metadata')
@mock_s3 @mock_s3
def test_delete_keys(): def test_delete_keys():
conn = boto.connect_s3('the_key', 'the_secret') conn = boto.connect_s3('the_key', 'the_secret')
@ -346,13 +355,13 @@ def test_delete_keys():
Key(bucket=bucket, name='file4').set_contents_from_string('abc') Key(bucket=bucket, name='file4').set_contents_from_string('abc')
result = bucket.delete_keys(['file2', 'file3']) result = bucket.delete_keys(['file2', 'file3'])
result.deleted.should.have.length_of(2) result.deleted.should.have.length_of(2)
result.errors.should.have.length_of(0) result.errors.should.have.length_of(0)
keys = bucket.get_all_keys() keys = bucket.get_all_keys()
keys.should.have.length_of(2) keys.should.have.length_of(2)
keys[0].name.should.equal('file1') keys[0].name.should.equal('file1')
@mock_s3 @mock_s3
def test_delete_keys_with_invalid(): def test_delete_keys_with_invalid():
conn = boto.connect_s3('the_key', 'the_secret') conn = boto.connect_s3('the_key', 'the_secret')
@ -371,6 +380,7 @@ def test_delete_keys_with_invalid():
keys.should.have.length_of(3) keys.should.have.length_of(3)
keys[0].name.should.equal('file1') keys[0].name.should.equal('file1')
@mock_s3 @mock_s3
def test_bucket_method_not_implemented(): def test_bucket_method_not_implemented():
requests.patch.when.called_with("https://foobar.s3.amazonaws.com/").should.throw(NotImplementedError) requests.patch.when.called_with("https://foobar.s3.amazonaws.com/").should.throw(NotImplementedError)