thirdparty/google_appengine/google/appengine/api/datastore.py
changeset 686 df109be0567c
parent 297 35211afcd563
child 828 f5fd65cc3bf3
--- a/thirdparty/google_appengine/google/appengine/api/datastore.py	Sat Dec 06 14:50:45 2008 +0000
+++ b/thirdparty/google_appengine/google/appengine/api/datastore.py	Sat Dec 06 16:52:21 2008 +0000
@@ -243,7 +243,7 @@
     keys: Key or string or list of Keys or strings
 
   Raises:
-    TransactionFailedError, if the Put could not be committed.
+    TransactionFailedError, if the Delete could not be committed.
   """
   keys, multiple = NormalizeAndTypeCheckKeys(keys)
 
@@ -882,7 +882,7 @@
         _ToDatastoreError(err)
       except datastore_errors.NeedIndexError, exc:
         yaml = datastore_index.IndexYamlForQuery(
-          *datastore_index.CompositeIndexForQuery(pb)[:-1])
+          *datastore_index.CompositeIndexForQuery(pb)[1:-1])
         raise datastore_errors.NeedIndexError(
           str(exc) + '\nThis query needs this index:\n' + yaml)
 
@@ -976,7 +976,7 @@
     if isinstance(value, tuple):
       value = list(value)
 
-    datastore_types.ValidateProperty(' ', value)
+    datastore_types.ValidateProperty(' ', value, read_only=True)
     match = self._CheckFilter(filter, value)
     property = match.group(1)
     operator = match.group(3)
@@ -1065,6 +1065,8 @@
 
     property = match.group(1)
     operator = match.group(3)
+    if operator is None:
+      operator = '='
 
     if isinstance(values, tuple):
       values = list(values)
@@ -1087,6 +1089,13 @@
           'Inequality operators (%s) must be on the same property as the '
           'first sort order, if any sort orders are supplied' %
           ', '.join(self.INEQUALITY_OPERATORS))
+    elif property in datastore_types._SPECIAL_PROPERTIES:
+      if property == datastore_types._KEY_SPECIAL_PROPERTY:
+        for value in values:
+          if not isinstance(value, Key):
+            raise datastore_errors.BadFilterError(
+              '%s filter value must be a Key; received %s (a %s)' %
+              (datastore_types._KEY_SPECIAL_PROPERTY, value, typename(value)))
 
     return match