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

Unified Diff: third_party/gsutil/boto/boto/dynamodb/item.py

Issue 12042069: Scripts to download files from google storage based on sha1 sums (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Review fixes, updated gsutil 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/boto/dynamodb/item.py
diff --git a/third_party/gsutil/boto/boto/dynamodb/item.py b/third_party/gsutil/boto/boto/dynamodb/item.py
new file mode 100644
index 0000000000000000000000000000000000000000..b2b444d762e5f3fcc2c2f142d5fe29a2f96f55fa
--- /dev/null
+++ b/third_party/gsutil/boto/boto/dynamodb/item.py
@@ -0,0 +1,202 @@
+# Copyright (c) 2012 Mitch Garnaat http://garnaat.org/
+# Copyright (c) 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish, dis-
+# tribute, sublicense, and/or sell copies of the Software, and to permit
+# persons to whom the Software is furnished to do so, subject to the fol-
+# lowing conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
+# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+#
+
+from boto.dynamodb.exceptions import DynamoDBItemError
+
+
+class Item(dict):
+ """
+ An item in Amazon DynamoDB.
+
+ :ivar hash_key: The HashKey of this item.
+ :ivar range_key: The RangeKey of this item or None if no RangeKey
+ is defined.
+ :ivar hash_key_name: The name of the HashKey associated with this item.
+ :ivar range_key_name: The name of the RangeKey associated with this item.
+ :ivar table: The Table this item belongs to.
+ """
+
+ def __init__(self, table, hash_key=None, range_key=None, attrs=None):
+ self.table = table
+ self._updates = None
+ self._hash_key_name = self.table.schema.hash_key_name
+ self._range_key_name = self.table.schema.range_key_name
+ if attrs == None:
+ attrs = {}
+ if hash_key == None:
+ hash_key = attrs.get(self._hash_key_name, None)
+ self[self._hash_key_name] = hash_key
+ if self._range_key_name:
+ if range_key == None:
+ range_key = attrs.get(self._range_key_name, None)
+ self[self._range_key_name] = range_key
+ for key, value in attrs.items():
+ if key != self._hash_key_name and key != self._range_key_name:
+ self[key] = value
+ self.consumed_units = 0
+ self._updates = {}
+
+ @property
+ def hash_key(self):
+ return self[self._hash_key_name]
+
+ @property
+ def range_key(self):
+ return self.get(self._range_key_name)
+
+ @property
+ def hash_key_name(self):
+ return self._hash_key_name
+
+ @property
+ def range_key_name(self):
+ return self._range_key_name
+
+ def add_attribute(self, attr_name, attr_value):
+ """
+ Queue the addition of an attribute to an item in DynamoDB.
+ This will eventually result in an UpdateItem request being issued
+ with an update action of ADD when the save method is called.
+
+ :type attr_name: str
+ :param attr_name: Name of the attribute you want to alter.
+
+ :type attr_value: int|long|float|set
+ :param attr_value: Value which is to be added to the attribute.
+ """
+ self._updates[attr_name] = ("ADD", attr_value)
+
+ def delete_attribute(self, attr_name, attr_value=None):
+ """
+ Queue the deletion of an attribute from an item in DynamoDB.
+ This call will result in a UpdateItem request being issued
+ with update action of DELETE when the save method is called.
+
+ :type attr_name: str
+ :param attr_name: Name of the attribute you want to alter.
+
+ :type attr_value: set
+ :param attr_value: A set of values to be removed from the attribute.
+ This parameter is optional. If None, the whole attribute is
+ removed from the item.
+ """
+ self._updates[attr_name] = ("DELETE", attr_value)
+
+ def put_attribute(self, attr_name, attr_value):
+ """
+ Queue the putting of an attribute to an item in DynamoDB.
+ This call will result in an UpdateItem request being issued
+ with the update action of PUT when the save method is called.
+
+ :type attr_name: str
+ :param attr_name: Name of the attribute you want to alter.
+
+ :type attr_value: int|long|float|str|set
+ :param attr_value: New value of the attribute.
+ """
+ self._updates[attr_name] = ("PUT", attr_value)
+
+ def save(self, expected_value=None, return_values=None):
+ """
+ Commits pending updates to Amazon DynamoDB.
+
+ :type expected_value: dict
+ :param expected_value: A dictionary of name/value pairs that
+ you expect. This dictionary should have name/value pairs
+ where the name is the name of the attribute and the value is
+ either the value you are expecting or False if you expect
+ the attribute not to exist.
+
+ :type return_values: str
+ :param return_values: Controls the return of attribute name/value pairs
+ before they were updated. Possible values are: None, 'ALL_OLD',
+ 'UPDATED_OLD', 'ALL_NEW' or 'UPDATED_NEW'. If 'ALL_OLD' is
+ specified and the item is overwritten, the content of the old item
+ is returned. If 'ALL_NEW' is specified, then all the attributes of
+ the new version of the item are returned. If 'UPDATED_NEW' is
+ specified, the new versions of only the updated attributes are
+ returned.
+ """
+ return self.table.layer2.update_item(self, expected_value,
+ return_values)
+
+ def delete(self, expected_value=None, return_values=None):
+ """
+ Delete the item from DynamoDB.
+
+ :type expected_value: dict
+ :param expected_value: A dictionary of name/value pairs that
+ you expect. This dictionary should have name/value pairs
+ where the name is the name of the attribute and the value
+ is either the value you are expecting or False if you expect
+ the attribute not to exist.
+
+ :type return_values: str
+ :param return_values: Controls the return of attribute
+ name-value pairs before then were changed. Possible
+ values are: None or 'ALL_OLD'. If 'ALL_OLD' is
+ specified and the item is overwritten, the content
+ of the old item is returned.
+ """
+ return self.table.layer2.delete_item(self, expected_value,
+ return_values)
+
+ def put(self, expected_value=None, return_values=None):
+ """
+ Store a new item or completely replace an existing item
+ in Amazon DynamoDB.
+
+ :type expected_value: dict
+ :param expected_value: A dictionary of name/value pairs that
+ you expect. This dictionary should have name/value pairs
+ where the name is the name of the attribute and the value
+ is either the value you are expecting or False if you expect
+ the attribute not to exist.
+
+ :type return_values: str
+ :param return_values: Controls the return of attribute
+ name-value pairs before then were changed. Possible
+ values are: None or 'ALL_OLD'. If 'ALL_OLD' is
+ specified and the item is overwritten, the content
+ of the old item is returned.
+ """
+ return self.table.layer2.put_item(self, expected_value, return_values)
+
+ def __setitem__(self, key, value):
+ """Overrwrite the setter to instead update the _updates
+ method so this can act like a normal dict"""
+ if self._updates is not None:
+ self.put_attribute(key, value)
+ dict.__setitem__(self, key, value)
+
+ def __delitem__(self, key):
+ """Remove this key from the items"""
+ if self._updates is not None:
+ self.delete_attribute(key)
+ dict.__delitem__(self, key)
+
+ # Allow this item to still be pickled
+ def __getstate__(self):
+ return self.__dict__
+ def __setstate__(self, d):
+ self.__dict__.update(d)

Powered by Google App Engine
This is Rietveld 408576698