Módulo google.appengine.ext.ndb.msgprop

Resumo

MessageProperty: uma propriedade que armazena objetos Message ProtoRPC.

Uso básico:

Vamos supor que você tenha uma subclasse protorpc.messages.Message, como:

from protorpc import messages

class Note(messages.Message):

text = messages.StringField(1, required=True) when = messages.IntegerField(2)

Agora, suponhamos que você queira armazenar Notes no Cloud Datastore. Crie uma classe de modelo para manter as observações da seguinte maneira:

from google.appengine.ext import ndb from google.appengine.ext.ndb import msgprop

class NoteStore(ndb.Model):

note = msgprop.MessageProperty(Note) name = ndb.StringProperty()

O nome da classe, 'NoteStore', e o nome da propriedade, 'note', estão à sua escolha.

Para armazenar uma mensagem Note, crie uma entidade NoteStore e a escreva:

ns = NoteStore(note=my_note, name=’foo’) key = ns.put()

Para recuperar Note depois, releia a entidade NoteStore:

ns = key.get() my_note = ns.note

A classe MessageProperty tem muitas das opções Property comuns:
  • name: nome do armazenamento de dados opcional

  • repeated: caso True, armazena uma lista de valores de mensagem

  • required: caso True, o valor da mensagem não pode ser None

  • default: valor da mensagem padrão opcional a ser armazenado

  • choices: lista opcional de escolhas permitidas (precisa ser sempre messages)

  • validator: função opcional para validar valores de mensagem

  • verbose_name: nome longo opcional para a propriedade

No entanto, MessageProperty não aceita a opção "indexed". Em vez disso, você pode especificar uma lista de nomes de campo que serão indexados, assim:

class MyStore(ndb.Model):

author = ndb.StringProperty() note = msgprop.MessageProperty(Note, indexed_fields=[‘text’, ‘when’])

Você já pode consultar valores de campo, como:

stores = MyStore.query(MyStore.note.when >= 123).fetch()

A semelhança com StructuredProperty: na verdade, MessageProperty é herdada de StructuredProperty. A principal diferença é que StructuredProperty utiliza uma subclasse Model, em vez de uma subclasse protorpc.messages.Message. StructuredProperty não indexa campos por padrão.

Ela também funciona com mensagens aninhadas (usando MessageField):

class Notes(messages.Message):

notes = messages.MessageField(Note, 1, repeated=True)

class MyNotesStore(ndb.Model):

author = ndb.StringProperty() foo = msgprop.MessageProperty(Notes,

indexed_fields=[‘notes.text, ‘notes.when’])

Com base nesse valor para indexed_fields, você também pode consultar subcampos neste exemplo:

stores = MyNoteStore.query(MyNoteStore.foo.notes.when < 123).fetch()

Uma opção final para MessageProperty é "protocol". Isso permite especificar como o objeto de mensagem é serializado para o Cloud Datastore. Os valores são os nomes de protocolo usados pela classe protorpc.remote.Protocols. Os nomes de protocolo compatíveis são "protobuf" e "protojson". O padrão é "protobuf". No futuro, ela usará o registro de protocolos globais que está sendo adicionado a protorpc. Dessa forma, qualquer nome de protocolo registrado será aceitável.

Também existe um EnumProperty, que pode ser usado para armazenar um valor messages.Enum sem encapsulá-lo em um objeto Message. Exemplo:

class Color(messages.Enum):

RED = 620 GREEN = 495 BLUE = 450

class Part(ndb.Model):

name = ndb.StringProperty() color = msgprop.EnumProperty(Color, required=True)

p1 = Part(name=’foo’, color=Color.RED) key1 = p1.put() … p2 = key1.get() print p2.name, p2.color # prints “foo RED”

O EnumProperty armazena o valor como um inteiro. Na verdade, EnumProperty é uma subclasse de IntegerProperty. É útil saber disso, porque você pode renomear os valores de enum sem precisar modificar entidades já armazenadas, mas não é possível renumerá-las.

O EnumProperty aceita as seguintes opções padrão:
  • name

  • indexed

  • repeated

  • required

  • default

  • choices

  • validator

  • verbose_name

Índice

class google.appengine.ext.ndb.msgprop.MessageProperty(*args, **kwds)source

Bases: google.appengine.ext.ndb.model.StructuredProperty

As mensagens são representadas no Cloud Datastore como propriedades estruturadas.

Por padrão, a propriedade estruturada tem uma única subpropriedade contendo a mensagem serializada. Essa propriedade é chamada "blob_" no Python, mas __<protocol>__ no Datastore, em que <protocol> é o valor do argumento de protocolo ("protobuf" padrão).

class google.appengine.ext.ndb.msgprop.EnumProperty(*args, **kwds)source

Bases: google.appengine.ext.ndb.model.IntegerProperty

Enums são representados no Cloud Datastore como inteiros.

Menos amigável no visualizador do Datastore, mas que corresponde à representação de enums na serialização protobuf (mas não em JSON) e permite renomear os valores de enum sem exigir alterações em valores já armazenados no Datastore.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Python 2