From 7a8adf6a011d64c05115a15aef7c84801a5c3f0f Mon Sep 17 00:00:00 2001 From: Eko Wibowo Date: Thu, 26 May 2016 20:18:10 -0700 Subject: [PATCH] Support equality filter in db.ListProperty --- python/src/mapreduce/input_readers.py | 5 +++++ python/test/mapreduce/input_readers_test.py | 6 ++++++ python/test/testlib/testutil.py | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/python/src/mapreduce/input_readers.py b/python/src/mapreduce/input_readers.py index 5150896d..418fe86e 100755 --- a/python/src/mapreduce/input_readers.py +++ b/python/src/mapreduce/input_readers.py @@ -670,6 +670,11 @@ def _validate_filters(cls, filters, model_class): "Property %s is not defined for entity type %s", prop, model_class.kind()) + if isinstance(properties[prop], db.ListProperty): + # for db.ListProperty validate expect a list, but filter expect + # a single value + val = [val] + # Validate the value of each filter. We need to know filters have # valid value to carry out splits. try: diff --git a/python/test/mapreduce/input_readers_test.py b/python/test/mapreduce/input_readers_test.py index 16700fcf..f47ca25d 100755 --- a/python/test/mapreduce/input_readers_test.py +++ b/python/test/mapreduce/input_readers_test.py @@ -810,6 +810,12 @@ def testValidate_Filters(self): self.reader_cls.validate, mapper_spec) + params["filters"] = [('mvp_str', '=', '1')] + self.reader_cls.validate(mapper_spec) + + params["filters"] = [('mvp_int', '=', 1)] + self.reader_cls.validate(mapper_spec) + def _set_vals(self, entities, a_vals, b_vals): """Set a, b values for entities.""" vals = [] diff --git a/python/test/testlib/testutil.py b/python/test/testlib/testutil.py index 5a7e231d..63a3ac6f 100755 --- a/python/test/testlib/testutil.py +++ b/python/test/testlib/testutil.py @@ -92,6 +92,8 @@ class TestEntity(db.Model): a = db.IntegerProperty() b = db.IntegerProperty() + mvp_str = db.StringListProperty() + mvp_int = db.ListProperty(int, required=True, indexed=True) class NdbTestEntity(ndb.Model): @@ -100,6 +102,9 @@ class NdbTestEntity(ndb.Model): a = ndb.IntegerProperty() b = ndb.IntegerProperty() + mvp_str = ndb.StringProperty(repeated=True) + mvp_int = ndb.IntegerProperty(repeated=True) + class TestEntityWithDot(db.Model): """Test entity class with dot in its kind."""