Как удалить версию s3 из корзины, используя boto и python - PullRequest
11 голосов
/ 29 июня 2011

Когда я пытаюсь удалить корзину, используя строки:

conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

print conn.delete_Bucket('BucketNameHere').message

Она сообщает, что корзина, которую я пытался удалить, не пустая.

В корзине нет ключей.Но у него есть версии.

Как я могу удалить версии?

Я могу увидеть список версий, используя bucket.list_versions ()

В Java есть метод deleteVersion onего s3 соединение.Я нашел этот код здесь:

http://bytecoded.blogspot.com/2011/01/recursive-delete-utility-for-version.html

Он делает эту строку для удаления версии:

s3.deleteVersion(new DeleteVersionRequest(bucketName, keyName, versionId));

Есть ли что-нибудь сопоставимое в boto?

1 Ответ

20 голосов
/ 08 июля 2011

Boto поддерживает версионные корзины после версии 1.9c.Вот как это работает:

import boto

s3 = boto.connect_s3()

#Create a versioned bucket
bucket = s3.create_bucket("versioned.example.com")
bucket.configure_versioning(True)

#Create a new key and make a few versions
key = bucket.new_key("versioned_object")
key.set_contents_from_string("Version 1")
key.set_contents_from_string("Version 2")

#Try to delete bucket
bucket.delete()   ## FAILS with 409 Conflict

#Delete our key then try to delete our bucket again
bucket.delete_key("versioned_object")
bucket.delete()   ## STILL FAILS with 409 Conflict

#Let's see what's in there
list(bucket.list())   ## Returns empty list []

#What's in there including versions?
list(bucket.list_versions())   ## Returns list of keys and delete markers

#This time delete all versions including delete markers
for version in bucket.list_versions():
    #NOTE we're still using bucket.delete, we're just adding the version_id parameter
    bucket.delete_key(version.name, version_id = version.version_id)

#Now what's in there
list(bucket.list_versions())   ## Returns empty list []

#Ok, now delete the bucket
bucket.delete()   ## SUCCESS!!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...