Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: third_party/gsutil/boto/docs/source/simpledb_tut.rst

Issue 12317103: Added gsutil to depot tools (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: added readme Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/gsutil/boto/docs/source/simpledb_tut.rst
diff --git a/third_party/gsutil/boto/docs/source/simpledb_tut.rst b/third_party/gsutil/boto/docs/source/simpledb_tut.rst
new file mode 100644
index 0000000000000000000000000000000000000000..396072607f68a66d688e521341ebb2aaaa43cd8e
--- /dev/null
+++ b/third_party/gsutil/boto/docs/source/simpledb_tut.rst
@@ -0,0 +1,188 @@
+.. simpledb_tut:
+
+============================================
+An Introduction to boto's SimpleDB interface
+============================================
+This tutorial focuses on the boto interface to AWS' SimpleDB_. This tutorial
+assumes that you have boto already downloaded and installed.
+
+.. _SimpleDB: http://aws.amazon.com/simpledb/
+
+Creating a Connection
+---------------------
+The first step in accessing SimpleDB is to create a connection to the service.
+To do so, the most straight forward way is the following::
+
+ >>> import boto
+ >>> conn = boto.connect_sdb(aws_access_key_id='<YOUR_AWS_KEY_ID>',aws_secret_access_key='<YOUR_AWS_SECRET_KEY>')
+ >>> conn
+ SDBConnection:sdb.amazonaws.com
+ >>>
+
+Bear in mind that if you have your credentials in boto config in your home
+directory, the two keyword arguments in the call above are not needed. Also
+important to note is that just as any other AWS service, SimpleDB is
+region-specific and as such you might want to specify which region to connect
+to, by default, it'll connect to the US-EAST-1 region.
+
+Creating Domains
+----------------
+Arguably, once you have your connection established, you'll want to create one or more dmains.
+Creating new domains is a fairly straight forward operation. To do so, you can proceed as follows::
+
+ >>> conn.create_domain('test-domain')
+ Domain:test-domain
+ >>>
+ >>> conn.create_domain('test-domain-2')
+ Domain:test-domain
+ >>>
+
+Please note that SimpleDB, unlike its newest sibling DynamoDB, is truly and completely schema-less.
+Thus, there's no need specify domain keys or ranges.
+
+Listing All Domains
+-------------------
+Unlike DynamoDB or other database systems, SimpleDB uses the concept of 'domains' instead of tables.
+So, to list all your domains for your account in a region, you can simply do as follows::
+
+ >>> domains = conn.get_all_domains()
+ >>> domains
+ [Domain:test-domain, Domain:test-domain-2]
+ >>>
+
+The get_all_domains() method returns a :py:class:`boto.resultset.ResultSet` containing
+all :py:class:`boto.sdb.domain.Domain` objects associated with
+this connection's Access Key ID for that region.
+
+Retrieving a Domain (by name)
+-----------------------------
+If you wish to retrieve a specific domain whose name is known, you can do so as follows::
+
+ >>> dom = conn.get_domain('test-domain')
+ >>> dom
+ Domain:test-domain
+ >>>
+
+The get_domain call has an optional validate parameter, which defaults to True. This will make sure to raise
+an exception if the domain you are looking for doesn't exist. If you set it to false, it will return a
+:py:class:`Domain <boto.sdb.domain.Domain>` object blindly regardless of its existence.
+
+Getting Domain Metadata
+------------------------
+There are times when you might want to know your domains' machine usage, aprox. item count and other such data.
+To this end, boto offers a simple and convenient way to do so as shown below::
+
+ >>> domain_meta = conn.domain_metadata(dom)
+ >>> domain_meta
+ <boto.sdb.domain.DomainMetaData instance at 0x23cd440>
+ >>> dir(domain_meta)
+ ['BoxUsage', 'DomainMetadataResponse', 'DomainMetadataResult', 'RequestId', 'ResponseMetadata',
+ '__doc__', '__init__', '__module__', 'attr_name_count', 'attr_names_size', 'attr_value_count', 'attr_values_size',
+ 'domain', 'endElement', 'item_count', 'item_names_size', 'startElement', 'timestamp']
+ >>> domain_meta.item_count
+ 0
+ >>>
+
+Please bear in mind that while in the example above we used a previously retrieved domain object as the parameter, you
+can retrieve the domain metadata via its name (string).
+
+Adding Items (and attributes)
+-----------------------------
+Once you have your domain setup, presumably, you'll want to start adding items to it.
+In its most straight forward form, you need to provide a name for the item -- think of it
+as a record id -- and a collection of the attributes you want to store in the item (often a Dictionary-like object).
+So, adding an item to a domain looks as follows::
+
+ >>> item_name = 'ABC_123'
+ >>> item_attrs = {'Artist': 'The Jackson 5', 'Genera':'Pop'}
+ >>> dom.put_attributes(item_name, item_attrs)
+ True
+ >>>
+
+Now let's check if it worked::
+
+ >>> domain_meta = conn.domain_metadata(dom)
+ >>> domain_meta.item_count
+ 1
+ >>>
+
+
+Batch Adding Items (and attributes)
+-----------------------------------
+You can also add a number of items at the same time in a similar fashion. All you have to provide to the batch_put_attributes() method
+is a Dictionary-like object with your items and their respective attributes, as follows::
+
+ >>> items = {'item1':{'attr1':'val1'},'item2':{'attr2':'val2'}}
+ >>> dom.batch_put_attributes(items)
+ True
+ >>>
+
+Now, let's check the item count once again::
+
+ >>> domain_meta = conn.domain_metadata(dom)
+ >>> domain_meta.item_count
+ 3
+ >>>
+
+A few words of warning: both batch_put_attributes() and put_item(), by default, will overwrite the values of the attributes if both
+the item and attribute already exist. If the item exists, but not the attributes, it will append the new attributes to the
+attribute list of that item. If you do not wish these methods to behave in that manner, simply supply them with a 'replace=False'
+parameter.
+
+
+Retrieving Items
+-----------------
+To retrieve an item along with its attributes is a fairly straight forward operation and can be accomplished as follows::
+
+ >>> dom.get_item('item1')
+ {u'attr1': u'val1'}
+ >>>
+
+Since SimpleDB works in an "eventual consistency" manner, we can also request a forced consistent read (though this will
+invariably adversely affect read performance). The way to accomplish that is as shown below::
+
+ >>> dom.get_item('item1', consistent_read=True)
+ {u'attr1': u'val1'}
+ >>>
+
+Retrieving One or More Items
+----------------------------
+Another way to retrieve items is through boto's select() method. This method, at the bare minimum, requires a standard SQL select query string
+and you would do something along the lines of::
+
+ >>> query = 'select * from `test-domain` where attr1="val1"'
+ >>> rs = dom.select(query)
+ >>> for j in rs:
+ ... print 'o hai'
+ ...
+ o hai
+ >>>
+
+This method returns a ResultSet collection you can iterate over.
+
+Updating Item Attributes
+------------------------
+The easiest way to modify an item's attributes is by manipulating the item's attributes and then saving those changes. For example::
+
+ >>> item = dom.get_item('item1')
+ >>> item['attr1'] = 'val_changed'
+ >>> item.save()
+
+
+Deleting Items (and its attributes)
+-----------------------------------
+Deleting an item is a very simple operation. All you are required to provide is either the name of the item or an item object to the
+delete_item() method, boto will take care of the rest::
+
+ >>>dom.delete_item(item)
+ >>>True
+
+
+
+Deleting Domains
+-----------------------------------
+To delete a domain and all items under it (i.e. be very careful), you can do it as follows::
+
+ >>> conn.delete_domain('test-domain')
+ True
+ >>>

Powered by Google App Engine
This is Rietveld 408576698