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 Message 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 è considerato inizializzato se contiene tutti i campi obbligatori e se sono 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.
Google Protocol RPC 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 gli oggetti Message in un'applicazione fittizia di negoziazione 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)
-
Inizializza lo stato dei messaggi interni.
Un'applicazione inizializza un messaggio tramite il costruttore passando gli argomenti delle parole chiave corrispondenti ai 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 seguenti due invocazioni sono equivalenti:
date = Date(day=6, month=6, year=1911)
È equivalente a:
date = Date() date.day = 6 date.month = 6 date.year = 1911
Metodi di classe
La classe Message fornisce i seguenti metodi di classe:
- all_fields()
- Ottiene tutti gli oggetti di 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'eccezione KeyError se non viene trovato alcun campo con quel nome.
- field_by_number(number)
- Ottiene un campo per numero. Restituisce l'oggetto del campo associato a quel numero.
- Genera un KeyError se non viene trovato alcun campo accanto a quel numero.
Metodi istanza
Le istanze di messaggio hanno i seguenti metodi:
- check_initialized()
- Controlla che tutti i campi obbligatori siano stati inizializzati.
- Genera un errore di convalida se l'oggetto Message non è inizializzato.
- get_assigned_value(name)
- Restituisce il valore assegnato di un attributo. Se il valore non è impostato, restituisce None.
- Argomenti:
- name
- Nome dell'attributo da recuperare.
Restituisce il valore assegnato di un attributo o Nessuno se all'attributo non è assegnato alcun valore.
- is_initialized(name)
- Recupera lo stato di inizializzazione dell'oggetto Message. Restituisce
True
se il messaggio è valido, altrimentiFalse
. - reset(name)
- 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.