¿Cuál es la forma correcta de obtener la página anterior de resultados con un cursor NDB?

Estoy trabajando para proporcionar una API a través de GAE que permitirá a los usuarios avanzar y retroceder a través de un conjunto de entidades. He revisado elsección sobre cursores en la página de documentación de Consultas NDB, que incluye un código de ejemplo que describe cómo retroceder en la página a través de los resultados de la consulta, pero no parece funcionar como se desea. Estoy usando GAE Development SDK 1.8.8.

Aquí hay una versión modificada de ese ejemplo que crea 5 entidades de muestra, obtiene e imprime la primera página, avanza e imprime la segunda página e intenta retroceder e imprimir la primera página nuevamente:

import pprint
from google.appengine.ext import ndb

class Bar(ndb.Model):
    foo = ndb.StringProperty()

#ndb.put_multi([Bar(foo="a"), Bar(foo="b"), Bar(foo="c"), Bar(foo="d"), Bar(foo="e")])

# Set up.
q = Bar.query()
q_forward = q.order(Bar.foo)
q_reverse = q.order(-Bar.foo)

# Fetch the first page.
bars1, cursor1, more1 = q_forward.fetch_page(2)
pprint.pprint(bars1)

# Fetch the next (2nd) page.
bars2, cursor2, more2 = q_forward.fetch_page(2, start_cursor=cursor1)
pprint.pprint(bars2)

# Fetch the previous page.
rev_cursor2 = cursor2.reversed()
bars3, cursor3, more3 = q_reverse.fetch_page(2, start_cursor=rev_cursor2)
pprint.pprint(bars3)

(Para su información, puede ejecutar lo anterior en la Consola interactiva de su motor de aplicación local).

El código anterior imprime los siguientes resultados; tenga en cuenta que la tercera página de resultados es solo la segunda página invertida, en lugar de volver a la primera página:

[Bar(key=Key('Bar', 4996180836614144), foo=u'a'),
 Bar(key=Key('Bar', 6122080743456768), foo=u'b')]
[Bar(key=Key('Bar', 5559130790035456), foo=u'c'),
 Bar(key=Key('Bar', 6685030696878080), foo=u'd')]
[Bar(key=Key('Bar', 6685030696878080), foo=u'd'),
 Bar(key=Key('Bar', 5559130790035456), foo=u'c')]

Esperaba ver resultados como este:

[Bar(key=Key('Bar', 4996180836614144), foo=u'a'),
 Bar(key=Key('Bar', 6122080743456768), foo=u'b')]
[Bar(key=Key('Bar', 5559130790035456), foo=u'c'),
 Bar(key=Key('Bar', 6685030696878080), foo=u'd')]
[Bar(key=Key('Bar', 6685030696878080), foo=u'a'),
 Bar(key=Key('Bar', 5559130790035456), foo=u'b')]

Si cambio la sección de código "Recuperar la página anterior" al siguiente fragmento de código, obtengo el resultado esperado, pero hay algunos inconvenientes que no he previsto utilizar la consulta ordenada hacia adelante y el cursor final en lugar del mecanismo descrito. en la documentacion?

# Fetch the previous page.
bars3, cursor3, more3 = q_forward.fetch_page(2, end_cursor=cursor1)
pprint.pprint(bars3)

Respuestas a la pregunta(2)

Su respuesta a la pregunta