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

Unified Diff: third_party/gsutil/boto/boto/sdb/db/manager/sdbmanager.py

Issue 10199002: Upgrade gsutil to 3.4 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed comments Created 8 years, 8 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/sdb/db/manager/sdbmanager.py
diff --git a/third_party/gsutil/20110627/boto/boto/sdb/db/manager/sdbmanager.py b/third_party/gsutil/boto/boto/sdb/db/manager/sdbmanager.py
similarity index 94%
rename from third_party/gsutil/20110627/boto/boto/sdb/db/manager/sdbmanager.py
rename to third_party/gsutil/boto/boto/sdb/db/manager/sdbmanager.py
index b68365afb72690e4c294614dc06142b065c9f4b1..7f20350edc282aca65a3dbc9d4e34d65859f0786 100644
--- a/third_party/gsutil/20110627/boto/boto/sdb/db/manager/sdbmanager.py
+++ b/third_party/gsutil/boto/boto/sdb/db/manager/sdbmanager.py
@@ -28,7 +28,7 @@ from boto.sdb.db.model import Model
from boto.sdb.db.blob import Blob
from boto.sdb.db.property import ListProperty, MapProperty
from datetime import datetime, date, time
-from boto.exception import SDBPersistenceError
+from boto.exception import SDBPersistenceError, S3ResponseError
ISO8601 = '%Y-%m-%dT%H:%M:%SZ'
@@ -257,12 +257,26 @@ class SDBConverter(object):
def encode_datetime(self, value):
if isinstance(value, str) or isinstance(value, unicode):
return value
- return value.strftime(ISO8601)
+ if isinstance(value, datetime):
+ return value.strftime(ISO8601)
+ else:
+ return value.isoformat()
def decode_datetime(self, value):
+ """Handles both Dates and DateTime objects"""
+ if value is None:
+ return value
try:
- return datetime.strptime(value, ISO8601)
- except:
+ if "T" in value:
+ if "." in value:
+ # Handle true "isoformat()" dates, which may have a microsecond on at the end of them
+ return datetime.strptime(value.split(".")[0], "%Y-%m-%dT%H:%M:%S")
+ else:
+ return datetime.strptime(value, ISO8601)
+ else:
+ value = value.split("-")
+ return date(int(value[0]), int(value[1]), int(value[2]))
+ except Exception, e:
return None
def encode_date(self, value):
@@ -340,7 +354,12 @@ class SDBConverter(object):
if match:
s3 = self.manager.get_s3_connection()
bucket = s3.get_bucket(match.group(1), validate=False)
- key = bucket.get_key(match.group(2))
+ try:
+ key = bucket.get_key(match.group(2))
+ except S3ResponseError, e:
+ if e.reason != "Forbidden":
+ raise
+ return None
else:
return None
if key:
@@ -536,16 +555,26 @@ class SDBManager(object):
"""
import types
query_parts = []
+
order_by_filtered = False
+
if order_by:
if order_by[0] == "-":
order_by_method = "DESC";
order_by = order_by[1:]
else:
order_by_method = "ASC";
+
+ if select:
+ if order_by and order_by in select:
+ order_by_filtered = True
+ query_parts.append("(%s)" % select)
+
if isinstance(filters, str) or isinstance(filters, unicode):
query = "WHERE %s AND `__type__` = '%s'" % (filters, cls.__name__)
- if order_by != None:
+ if order_by in ["__id__", "itemName()"]:
+ query += " ORDER BY itemName() %s" % order_by_method
+ elif order_by != None:
query += " ORDER BY `%s` %s" % (order_by, order_by_method)
return query
@@ -587,13 +616,14 @@ class SDBManager(object):
query_parts.append(type_query)
order_by_query = ""
+
if order_by:
if not order_by_filtered:
query_parts.append("`%s` LIKE '%%'" % order_by)
- order_by_query = " ORDER BY `%s` %s" % (order_by, order_by_method)
-
- if select:
- query_parts.append("(%s)" % select)
+ if order_by in ["__id__", "itemName()"]:
+ order_by_query = " ORDER BY itemName() %s" % order_by_method
+ else:
+ order_by_query = " ORDER BY `%s` %s" % (order_by, order_by_method)
if len(query_parts) > 0:
return "WHERE %s %s" % (" AND ".join(query_parts), order_by_query)
@@ -654,6 +684,7 @@ class SDBManager(object):
self.domain.delete_attributes(obj.id)
def set_property(self, prop, obj, name, value):
+ setattr(obj, name, value)
value = prop.get_value_for_datastore(obj)
value = self.encode_value(prop, value)
if prop.unique:
« no previous file with comments | « third_party/gsutil/boto/boto/sdb/db/manager/pgmanager.py ('k') | third_party/gsutil/boto/boto/sdb/db/manager/xmlmanager.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698