Skip to content

Commit 537e868

Browse files
committed
Move helper function after class defs.
Fix typo. See: #487 (comment) #487 (comment)
1 parent 72a9520 commit 537e868

File tree

1 file changed

+68
-68
lines changed

1 file changed

+68
-68
lines changed

gcloud/datastore/query.py

Lines changed: 68 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -363,73 +363,6 @@ def fetch(self, limit=0, offset=0, start_cursor=None, end_cursor=None):
363363
return _Iterator(self, limit, offset, start_cursor, end_cursor)
364364

365365

366-
def _pb_from_query(query):
367-
"""Convert a Query instance to the corresponding protobuf.
368-
369-
:type query: :class:`Query`
370-
:param query: the source query
371-
372-
:rtype: :class:`gcloud.datastore.datastore_v1_pb2.Query`
373-
:returns: a protobuf that can be sent to the protobuf API. N.b. that
374-
it does not contain "in-flight" fields for ongoing query
375-
executions (cursors, offset, limit).
376-
"""
377-
pb = datastore_pb.Query()
378-
379-
for projection_name in query.projection:
380-
pb.projection.add().property.name = projection_name
381-
382-
if query.kind:
383-
pb.kind.add().name = query.kind
384-
385-
composite_filter = pb.filter.composite_filter
386-
composite_filter.operator = datastore_pb.CompositeFilter.AND
387-
388-
if query.ancestor:
389-
ancestor_pb = helpers._prepare_key_for_request(
390-
query.ancestor.to_protobuf())
391-
392-
# Filter on __key__ HAS_ANCESTOR == ancestor.
393-
ancestor_filter = composite_filter.filter.add().property_filter
394-
ancestor_filter.property.name = '__key__'
395-
ancestor_filter.operator = datastore_pb.PropertyFilter.HAS_ANCESTOR
396-
ancestor_filter.value.key_value.CopyFrom(ancestor_pb)
397-
398-
for property_name, operator, value in query.filters:
399-
pb_op_enum = query.OPERATORS.get(operator)
400-
401-
# Add the specific filter
402-
property_filter = composite_filter.filter.add().property_filter
403-
property_filter.property.name = property_name
404-
property_filter.operator = pb_op_enum
405-
406-
# Set the value to filter on based on the type.
407-
if property_name == '__key__':
408-
key_pb = value.to_protobuf()
409-
property_filter.value.key_value.CopyFrom(
410-
helpers._prepare_key_for_request(key_pb))
411-
else:
412-
helpers._set_protobuf_value(property_filter.value, value)
413-
414-
if not composite_filter.filter:
415-
pb.ClearField('filter')
416-
417-
for prop in query.order:
418-
property_order = pb.order.add()
419-
420-
if prop.startswith('-'):
421-
property_order.property.name = prop[1:]
422-
property_order.direction = property_order.DESCENDING
423-
else:
424-
property_order.property.name = prop
425-
property_order.direction = property_order.ASCENDING
426-
427-
for group_by_name in query.group_by:
428-
pb.group_by.add().name = group_by_name
429-
430-
return pb
431-
432-
433366
class _Iterator(object):
434367
"""Represent the state of a given execution of a Query.
435368
"""
@@ -455,7 +388,7 @@ def next_page(self):
455388
Low-level API for fine control: the more convenient API is
456389
to iterate on us.
457390
458-
:rtyoe: tuple, (entities, more_results, cursor)
391+
:rtype: tuple, (entities, more_results, cursor)
459392
"""
460393
pb = _pb_from_query(self._query)
461394

@@ -514,3 +447,70 @@ def __iter__(self):
514447
if not self._more_results:
515448
break
516449
self.next_page()
450+
451+
452+
def _pb_from_query(query):
453+
"""Convert a Query instance to the corresponding protobuf.
454+
455+
:type query: :class:`Query`
456+
:param query: the source query
457+
458+
:rtype: :class:`gcloud.datastore.datastore_v1_pb2.Query`
459+
:returns: a protobuf that can be sent to the protobuf API. N.b. that
460+
it does not contain "in-flight" fields for ongoing query
461+
executions (cursors, offset, limit).
462+
"""
463+
pb = datastore_pb.Query()
464+
465+
for projection_name in query.projection:
466+
pb.projection.add().property.name = projection_name
467+
468+
if query.kind:
469+
pb.kind.add().name = query.kind
470+
471+
composite_filter = pb.filter.composite_filter
472+
composite_filter.operator = datastore_pb.CompositeFilter.AND
473+
474+
if query.ancestor:
475+
ancestor_pb = helpers._prepare_key_for_request(
476+
query.ancestor.to_protobuf())
477+
478+
# Filter on __key__ HAS_ANCESTOR == ancestor.
479+
ancestor_filter = composite_filter.filter.add().property_filter
480+
ancestor_filter.property.name = '__key__'
481+
ancestor_filter.operator = datastore_pb.PropertyFilter.HAS_ANCESTOR
482+
ancestor_filter.value.key_value.CopyFrom(ancestor_pb)
483+
484+
for property_name, operator, value in query.filters:
485+
pb_op_enum = query.OPERATORS.get(operator)
486+
487+
# Add the specific filter
488+
property_filter = composite_filter.filter.add().property_filter
489+
property_filter.property.name = property_name
490+
property_filter.operator = pb_op_enum
491+
492+
# Set the value to filter on based on the type.
493+
if property_name == '__key__':
494+
key_pb = value.to_protobuf()
495+
property_filter.value.key_value.CopyFrom(
496+
helpers._prepare_key_for_request(key_pb))
497+
else:
498+
helpers._set_protobuf_value(property_filter.value, value)
499+
500+
if not composite_filter.filter:
501+
pb.ClearField('filter')
502+
503+
for prop in query.order:
504+
property_order = pb.order.add()
505+
506+
if prop.startswith('-'):
507+
property_order.property.name = prop[1:]
508+
property_order.direction = property_order.DESCENDING
509+
else:
510+
property_order.property.name = prop
511+
property_order.direction = property_order.ASCENDING
512+
513+
for group_by_name in query.group_by:
514+
pb.group_by.add().name = group_by_name
515+
516+
return pb

0 commit comments

Comments
 (0)