def match(document,
topic=None,
result_key=None,
result_relative_url='/_ah/prospective_search',
result_task_queue='default',
result_batch_size=DEFAULT_RESULT_BATCH_SIZE,
result_return_document=True):
"""Match document with all subscribed queries on specified topic.
Args:
document: instance of datastore.Entity or db.Model document.
topic: required for datastore.Entity, optional for db.Model.
Only subscriptions of this topic will be matched against this document.
result_key: key to return in result, potentially to identify document.
result_relative_url: url of taskqueue event handler for results.
result_task_queue: name of taskqueue queue to put batched results on.
result_batch_size: number of subscription ids per taskqueue task batch.
result_return_document: returns document with match results if true.
Raises:
DocumentTypeError: document type is unsupported.
TopicNotSpecified: raised for datastore.Entity if topic is not specified.
apiproxy_errors.Error: match call failed.
"""
from google.appengine.ext import db
request = prospective_search_pb.MatchRequest()
if isinstance(document, db.Model):
topic = _get_document_topic(document, topic)
doc_pb = db.model_to_protobuf(document)
if result_return_document:
request.set_result_python_document_class(_doc_class.MODEL)
elif isinstance(document, datastore.Entity):
topic = _get_document_topic(document, topic)
doc_pb = document.ToPb()
if result_return_document:
request.set_result_python_document_class(_doc_class.ENTITY)
else:
raise DocumentTypeError()
request.set_topic(topic)
request.mutable_document().CopyFrom(doc_pb)
if result_key:
request.set_result_key(result_key)
request.set_result_relative_url(result_relative_url)
request.set_result_task_queue(result_task_queue)
request.set_result_batch_size(result_batch_size)
response = prospective_search_pb.MatchResponse()
_make_sync_call('matcher', 'Match', request, response)
prospective_search.py 文件源码
python
阅读 16
收藏 0
点赞 0
评论 0
评论列表
文章目录