Thanks for the solution. Saved me a lot of time!
On May 11, 12:52 am, joshuacronemeyer
wrote:
> I recently noticed that the 'full text search' feature of my app was
> throwing a stacktrace like this:
>
> Traceback (most recent call last):
> File "/base/python_lib/versions/1/google/appengine/ext/webapp/
> __init__.py", line 503, in __call__
> handler.post(*groups)
> File "/base/data/home/apps/shell-sink/2.331785781902411868/
> shellsink.py", line 191, in post
> commands = full_text_search(sysadmin, query, paging_helper.page)
> File "/base/data/home/apps/shell-sink/2.331785781902411868/
> command.py", line 55, in full_text_search
> return query.fetch(Command.COMMANDS_PER_PAGE, (page - 1) *
> Command.COMMANDS_PER_PAGE)
> File "/base/python_lib/versions/1/google/appengine/ext/db/
> __init__.py", line 1426, in fetch
> raw = self._get_query().Get(limit, offset)
> File "/base/python_lib/versions/1/google/appengine/api/
> datastore.py", line 964, in Get
> return self._Run(limit, offset)._Next(limit)
> File "/base/python_lib/versions/1/google/appengine/api/
> datastore.py", line 905, in _Run
> apiproxy_stub_map.MakeSyncCall('datastore_v3', 'RunQuery', pb,
> result)
> File "/base/python_lib/versions/1/google/appengine/api/
> apiproxy_stub_map.py", line 68, in MakeSyncCall
> apiproxy.MakeSyncCall(service, call, request, response)
> File "/base/python_lib/versions/1/google/appengine/api/
> apiproxy_stub_map.py", line 240, in MakeSyncCall
> stub.MakeSyncCall(service, call, request, response)
> File "/base/python_lib/versions/1/google/appengine/runtime/
> apiproxy.py", line 181, in MakeSyncCall
> rpc.MakeCall(package, call, request, response)
> File "/base/python_lib/versions/1/google/appengine/api/
> apiproxy_rpc.py", line 92, in MakeCall
> self._MakeCallImpl()
> File "/base/python_lib/versions/1/google/appengine/runtime/
> apiproxy.py", line 124, in _MakeCallImpl
> self.request.Output(e)
> File "/base/python_lib/versions/1/google/net/proto/
> ProtocolBuffer.py", line 162, in Output
> raise ProtocolBufferEncodeError, '\n\t'.join(dbg)
> ProtocolBufferEncodeError: Required field: multiple not set.
>
> I am using a gently modified version of SearchableModel in my app so I
> immediately suspected some change in the db.Model super class. It
> looks like the following line was added to the _ToPb method of
> SearchableQuery: prop.set_multiple(len(keywords) > 1)
>
> I applied the following patch to my custom SearchableModel and it
> works fine again.
>
> 232a263> prop.set_multiple(len(keywords) > 1)
> 237a269,286
> > class SearchableMultiQuery(datastore.MultiQuery):
> > """A multiquery that supports Search() by searching subqueries."""
>
> > def Search(self, *args, **kwargs):
> > """Add a search query, by trying to add it to all subqueries.
>
> > Args:
> > args: Passed to Search on each subquery.
> > kwargs: Passed to Search on each subquery.
>
> > Returns:
> > self for consistency with SearchableQuery.
> > """
> > for q in self:
> > q.Search(*args, **kwargs)
> > return self
>
> 264c312,314
> < query = db.Query._get_query(self,
> _query_class=SearchableQuery)
> ---
>
> > query = db.Query._get_query(self,
> > _query_class=SearchableQuery,
> > _multi_query_class=SearchableMultiQuery)
>
> Thought I would post just in case anyone else runs into it.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---