Seguindo backreferences de tipos desconhecidos no NDB
Estou no processo de escrever meu primeiro serviço Web RESTful sobre o GAE e o tempo de execução do Python 2.7; Eu comecei usando a nova API ndb brilhante de Guido.
No entanto, não sei como resolver um caso específico sem o recurso implícito de referência anterior da API do db original. Se o user-agent solicitar um recurso específico e esses recursos forem removidos 1 grau:
host / api / kind / id? depth = 2
Qual é a melhor maneira de descobrir uma coleção relacionada de entidades do "um" em um relacionamento um-para-muitos, dado que o tipo de entidade relacionada é desconhecido em tempo de desenvolvimento?
Não consigo usar uma consulta de substituição, conforme descrito em umconsulta SO anterior devido a esta última restrição. O fato de meu modelo ser definível em tempo de execução (e, portanto, não é codificado) me impede de usar uma consulta para filtrar propriedades para chaves correspondentes.
O Ancestor e outras consultas sem tipo também são eliminadas devido à limitação do armazenamento de dados que me impede de filtrar em uma propriedade sem o tipo especificado.
Até agora, a única idéia que tive (além de reverter para o db api) é usar uma transação entre grupos para escrever minha própria referência no "one", seja atualizando um ndb.StringProperty (repeat = True) contendo todos os tipos relacionados quando uma entidade de um novo tipo é introduzida ou simplesmente mantendo uma lista de chaves no "um" ndb.KeyProperty (repeat = True) toda vez que uma entidade "muitos" relacionada é gravada no armazenamento de dados.
Espero que alguém mais experiente do que eu possa sugerir uma abordagem melhor.
Dada a sugestão de jmort253, tentarei aumentar minha pergunta com um exemplo concreto adaptado dos documentos:
class Contact(ndb.Expando):
""" The One """
# basic info
name = ndb.StringProperty()
birth_day = ndb.DateProperty()
# If I were using db, a collection called 'phone_numbers' would be implicitly
# created here. I could use this property to retrieve related phone numbers
# when this entity was queried. Since NDB lacks this feature, the service
# will neither have a reference to query nor the means to know the
# relationship exists in the first place since it cannot be hard-coded. The
# data model is extensible and user-defined at runtime; most relationships
# will be described only in the data, and must be discoverable by the server.
# In this case, when Contact is queried, I need a way to retrieve the
# collection of phone numbers.
# Company info.
company_title = ndb.StringProperty()
company_name = ndb.StringProperty()
company_description = ndb.StringProperty()
company_address = ndb.PostalAddressProperty()
class PhoneNumber(ndb.Expando):
""" The Many """
# no collection_name='phone_numbers' equivalent exists for the key property
contact = ndb.KeyProperty(kind='Contact')
number = ndb.PhoneNumberProperty()