Skip to content

Commit 319963f

Browse files
committed
Merge pull request #918 from dhermes/fix-917
Removing datastore key query filter restriction.
2 parents 3e86aae + 3c1168c commit 319963f

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

gcloud/datastore/query.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ def __init__(self,
9090
self._kind = kind
9191
self._namespace = namespace
9292
self._ancestor = ancestor
93-
self._filters = list(filters)
93+
self._filters = []
94+
# Verify filters passed in.
95+
for property_name, operator, value in filters:
96+
self.add_filter(property_name, operator, value)
9497
self._projection = _ensure_tuple_or_list('projection', projection)
9598
self._order = _ensure_tuple_or_list('order', order)
9699
self._group_by = _ensure_tuple_or_list('group_by', group_by)
@@ -216,11 +219,8 @@ def add_filter(self, property_name, operator, value):
216219
choices_message = 'Please use one of: =, <, <=, >, >=.'
217220
raise ValueError(error_message, choices_message)
218221

219-
if property_name == '__key__':
220-
if not isinstance(value, Key):
221-
raise ValueError('Invalid key: "%s"' % value)
222-
if operator != '=':
223-
raise ValueError('Invalid operator for key: "%s"' % operator)
222+
if property_name == '__key__' and not isinstance(value, Key):
223+
raise ValueError('Invalid key: "%s"' % value)
224224

225225
self._filters.append((property_name, operator, value))
226226

gcloud/datastore/test_query.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ def test_ctor_bad_group_by(self):
100100
self.assertRaises(TypeError, self._makeOne, _KIND, _DATASET,
101101
group_by=BAD_GROUP_BY)
102102

103+
def test_ctor_bad_filters(self):
104+
_DATASET = 'DATASET'
105+
_KIND = 'KIND'
106+
FILTERS_CANT_UNPACK = [('one', 'two')]
107+
self.assertRaises(ValueError, self._makeOne, _KIND, _DATASET,
108+
filters=FILTERS_CANT_UNPACK)
109+
103110
def test_namespace_setter_w_non_string(self):
104111
_DATASET = 'DATASET'
105112
query = self._makeOne(dataset_id=_DATASET)
@@ -224,12 +231,13 @@ def test_add_filter___key__valid_key(self):
224231
query.add_filter('__key__', '=', key)
225232
self.assertEqual(query.filters, [('__key__', '=', key)])
226233

227-
def test_filter___key__invalid_operator(self):
234+
def test_filter___key__not_equal_operator(self):
228235
from gcloud.datastore.key import Key
229236
_DATASET = 'DATASET'
230237
key = Key('Foo', dataset_id='DATASET')
231238
query = self._makeOne(dataset_id=_DATASET)
232-
self.assertRaises(ValueError, query.add_filter, '__key__', '<', key)
239+
query.add_filter('__key__', '<', key)
240+
self.assertEqual(query.filters, [('__key__', '<', key)])
233241

234242
def test_filter___key__invalid_value(self):
235243
_DATASET = 'DATASET'

0 commit comments

Comments
 (0)