La classe del messaggio

La classe Message viene utilizzata per definire i messaggi per una trasmissione efficiente nella rete o nello spazio di processo. I messaggi vengono definiti utilizzando le classi di campo.

Message è fornito dal modulo protorpc.messages.

Introduzione

I messaggi sono più limitati delle classi normali in quanto possono contenere solo attributi di campo e altre definizioni di messaggio ed enum. Queste restrizioni sono attive perché la struttura della classe Message stessa deve essere trasmessa su una rete o nello spazio di processo e utilizzata direttamente dai client o persino da altri server. Pertanto, i metodi e gli attributi non di campo non possono essere trasmessi con informazioni strutturali, il che causa discrepanze tra i diversi linguaggi e le diverse implementazioni.

Inizializzazione e convalida

Un oggetto Message viene considerato inizializzato se contiene tutti i campi obbligatori e se vengono inizializzati anche eventuali messaggi nidificati.

Chiamata a "check_initialized" in corso... genererà un errore ValidationError se non viene inizializzato; 'è_inizializzato' restituisce un valore booleano che indica se è valido.

Il protocollo RPC di Google convalida automaticamente gli oggetti Message quando vengono creati e compilati. La tua applicazione può verificare se un determinato valore è compatibile con un campo a cui è assegnato utilizzando il metodo validate() dell'istanza di campo. Se utilizzato in un messaggio, questo metodo verifica che tutti i valori del messaggio e dei relativi messaggi secondari siano validi. L'assegnazione di un valore non valido a un campo genera un errore di tipo ValidationError.

L'esempio seguente crea e inizializza oggetti Message in un'applicazione fittizia di trading di azioni.

from protorpc import messages

# Trade type.
class TradeType(messages.Enum):
    BUY = 1
    SELL = 2
    SHORT = 3
    CALL = 4

class Lot(messages.Message):
    price = messages.IntegerField(1, required=True)
    quantity = messages.IntegerField(2, required=True)

class Order(messages.Message):
    symbol = messages.StringField(1, required=True)
    total_quantity = messages.IntegerField(2, required=True)
    trade_type = messages.EnumField(TradeType, 3, required=True)
    lots = messages.MessageField(Lot, 4, repeated=True)
    limit = messages.IntegerField(5)

order = Order(symbol='GOOG',
              total_quantity=10,
              trade_type=TradeType.BUY)

lot1 = Lot(price=304,
           quantity=7)

lot2 = Lot(price=305,
           quantity=3)

order.lots = [lot1, lot2]

# Now object is initialized!
order.check_initialized()

Costruttore

Il costruttore della classe Message è definito come segue:

class Message(**kwargs)

Inizializzare lo stato dei messaggi interni.

Un'applicazione inizializza un messaggio tramite il costruttore passando argomenti delle parole chiave corrispondenti alle classi di campo. Ad esempio:

class Date(Message)
    day = IntegerField(1)
    month = IntegerField(2)
    year = IntegerField(3)

Dopo aver definito il campo della classe, puoi richiamare in modo conciso i valori del campo. Le due chiamate seguenti sono equivalenti:

date = Date(day=6, month=6, year=1911)

Equivale a:

date = Date()
date.day = 6
date.month = 6
date.year = 1911

Metodi della classe

La classe Message fornisce i seguenti metodi:

all_fields()
Recupera tutti gli oggetti con definizione dei campi. Restituisce un iteratore su tutti i valori in ordine arbitrario.
field_by_name(name)
Recupera i campi per nome. Restituisce un oggetto Field associato al nome.
Genera un KeyError se non viene trovato alcun campo con questo nome.
field_by_number(number)
Recupera un campo per numero. Restituisce l'oggetto campo associato a quel numero.
Genera un KeyError se non viene trovato alcun campo accanto a quel numero.

Metodi di istanza

Le istanze di messaggio hanno i seguenti metodi:

check_initialized()
Controlla che tutti i campi obbligatori siano stati inizializzati.
Genera un errore ValidationError se l'oggetto Message non viene inizializzato.
get_assigned_value(name)
Recupera il valore assegnato di un attributo. Se il valore non viene impostato, restituisce None.
Argomenti:
name
Nome dell'attributo da ottenere.

Restituisce il valore assegnato di un attributo o Nessuno se all'attributo non è assegnato alcun valore.

is_initialized(nome)
Recupera lo stato di inizializzazione dell'oggetto Message. Restituisce True se il messaggio è valido, altrimenti False.
reset(nome)
Reimposta il valore assegnato per un campo, in modo da ristabilire il valore predefinito o, in assenza di un valore predefinito, Nessuno.
Argomenti:
name
Nome del campo da reimpostare.