2010-06-30 12 views
6

En Google App Engine, una entidad tiene una clave. Se puede hacer una clave desde una ruta, en cuyo caso str (clave) es una cadena hexagonal opaca. Ejemplo:Cómo decodificar una entidad de Google App Engine ¿Cuál es la ruta clave en Python?

from google.appengine.ext import db 
foo = db.Key.from_path(u'foo', u'bar', _app=u'baz') 
print foo 

da

agNiYXpyDAsSA2ZvbyIDYmFyDA 

si se configura el camino correcto para ejecutar el código.

Entonces, ¿cómo se puede tomar la cadena hexagonal y recuperar la ruta? Pensé que la respuesta estaría en Key o entity group documentos, pero no puedo verlo.

+0

Puede recuperar la clave utilizando el constructor - http://code.google.com/appengine/docs/python/datastore/keyclass.html#Key. Sin embargo, no estoy seguro de cómo recuperar el camino desde la llave. – hwiechers

+0

Puede usar esta herramienta para ver una clave específica: http://datastore-key.appspot.com/. También funciona como un servicio con salida JSON. – Deleplace

Respuesta

7
from google.appengine.ext import db 

k = db.Key('agNiYXpyDAsSA2ZvbyIDYmFyDA') 
_app = k.app() 
path = [] 
while k is not None: 
    path.append(k.id_or_name()) 
    path.append(k.kind()) 
    k = k.parent() 
path.reverse() 
print 'app=%r, path=%r' % (_app, path) 

cuando se ejecuta en una consola de desarrollo, este salidas:

app=u'baz', path=[u'foo', u'bar'] 

conforme a lo solicitado. Una alternativa más corto es utilizar el (por desgracia, creo, no documentado) to_path método de Key casos:

k = db.Key('agNiYXpyDAsSA2ZvbyIDYmFyDA') 
_app = k.app() 
path = k.to_path() 
print 'app=%r, path=%r' % (_app, path) 

con los mismos resultados. Pero la primera versión más larga se basa únicamente en métodos documentados.

+3

La falta de documentación de .to_path() es un error, definitivamente está destinado a ser usado externamente. :) –

+1

¡Es mucho más fácil que intentar decodificarlo manualmente! –

+1

@Nick, sospeché eso, ¡pero realmente no lo sabía! Entonces, tx para la información. Afortunadamente, parece que va a ser un error de documentación de reparación rápida. –

2

vez que tenga el Key objeto (que puede ser creada por pasar ese identificador opaco para el constructor), utilice Key.to_path() para obtener la ruta de un Key como una lista. Por ejemplo:

from google.appengine.ext import db 
opaque_id = 'agNiYXpyDAsSA2ZvbyIDYmFyDA' 
path = db.Key(opaque_id).to_path() 
Cuestiones relacionadas