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
-~----------~----~----~----~------~----~------~--~---

Reply via email to