.. _python: Python S3 Examples ================== Creating a Connection --------------------- This creates a connection so that you can interact with the server. .. code-block:: python import boto import boto.s3.connection access_key = 'put your access key here!' secret_key = 'put your secret key here!' conn = boto.connect_s3( aws_access_key_id = access_key, aws_secret_access_key = secret_key, host = 'objects.dreamhost.com', #is_secure=False, # uncomment if you are not using ssl calling_format = boto.s3.connection.OrdinaryCallingFormat(), ) Listing Owned Buckets --------------------- This gets a list of Buckets that you own. This also prints out the bucket name and creation date of each bucket. .. code-block:: python for bucket in conn.get_all_buckets(): print("{name}\t{created}".format( name = bucket.name, created = bucket.creation_date, )) The output will look something like this:: mahbuckat1 2011-04-21T18:05:39.000Z mahbuckat2 2011-04-21T18:05:48.000Z mahbuckat3 2011-04-21T18:07:18.000Z Creating a Bucket ----------------- This creates a new bucket called ``my-new-bucket`` .. code-block:: python bucket = conn.create_bucket('my-new-bucket') Listing a Bucket's Content -------------------------- This gets a list of objects in the bucket. This also prints out each object's name, the file size, and last modified date. .. code-block:: python for key in bucket.list(): print("{name}\t{size}\t{modified}".format( name = key.name, size = key.size, modified = key.last_modified, )) The output will look something like this:: myphoto1.jpg 251262 2011-08-08T21:35:48.000Z myphoto2.jpg 262518 2011-08-08T21:38:01.000Z Deleting a Bucket ----------------- .. note:: The Bucket must be empty! Otherwise it won't work! .. code-block:: python conn.delete_bucket(bucket.name) Forced Delete for Non-empty Buckets ----------------------------------- .. attention:: not available in python Creating an Object ------------------ This creates a file ``hello.txt`` with the string ``"Hello World!"`` .. code-block:: python key = bucket.new_key('hello.txt') key.set_contents_from_string('Hello World!') Uploading an Object or a File ----------------------------- This creates a file ``logo.png`` with the contents from the file ``"logo.png"`` .. code-block:: python key = bucket.new_key('logo.png') key.set_contents_from_filename('logo.png') Change an Object's ACL ---------------------- This makes the object ``hello.txt`` to be publicly readable, and ``secret_plans.txt`` to be private. .. code-block:: python hello_key = bucket.get_key('hello.txt') hello_key.set_canned_acl('public-read') plans_key = bucket.get_key('secret_plans.txt') plans_key.set_canned_acl('private') Download an Object (to a file) ------------------------------ This downloads the object ``perl_poetry.pdf`` and saves it in ``/home/larry/documents/`` .. code-block:: python key = bucket.get_key('perl_poetry.pdf') key.get_contents_to_filename('/home/larry/documents/perl_poetry.pdf') Delete an Object ---------------- This deletes the object ``goodbye.txt`` .. code-block:: python bucket.delete_key('goodbye.txt') Generate Object Download URLs (signed and unsigned) --------------------------------------------------- This generates an unsigned download URL for ``hello.txt``. This works because we made ``hello.txt`` public by setting the ACL above. This then generates a signed download URL for ``secret_plans.txt`` that will work for 1 hour. Signed download URLs will work for the time period even if the object is private (when the time period is up, the URL will stop working). .. code-block:: python hello_key = bucket.get_key('hello.txt') hello_url = hello_key.generate_url(0, query_auth=False, force_http=True) print(hello_url) plans_key = bucket.get_key('secret_plans.txt') plans_url = plans_key.generate_url(3600, query_auth=True, force_http=True) print(plans_url) The output of this will look something like:: http://objects.dreamhost.com/my-bucket-name/hello.txt http://objects.dreamhost.com/my-bucket-name/secret_plans.txt?Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX&Expires=1316027075&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXX Using S3 API Extensions ----------------------- To use the boto3 client to tests the RadosGW extensions to the S3 API, the `extensions file`_ should be placed under: ``~/.aws/models/s3/2006-03-01/`` directory. For example, unordered list of objects could be fetched using: .. code-block:: python print(conn.list_objects(Bucket='my-new-bucket', AllowUnordered=True)) Without the extensions file, in the above example, boto3 would complain that the ``AllowUnordered`` argument is invalid. .. _extensions file: https://github.com/ceph/ceph/blob/main/examples/rgw/boto3/service-2.sdk-extras.json