Class Message

Class Message digunakan untuk menentukan pesan agar dapat melakukan transmisi secara efisien di seluruh jaringan atau ruang proses. Pesan ditentukan menggunakan class field.

Message disediakan oleh modul protorpc.messages.

Pengantar

Pesan lebih dibatasi daripada class normal karena hanya dapat berisi atribut field serta definisi Message dan Enum lainnya. Pembatasan ini berlaku karena struktur class Message itu sendiri dimaksudkan untuk ditransmisikan di seluruh jaringan atau ruang proses dan digunakan langsung oleh klien atau bahkan server lain. Dengan demikian, metode dan atribut non-field tidak dapat ditransmisikan dengan informasi struktural, yang menyebabkan perbedaan antara bahasa dan implementasi yang berbeda.

Inisialisasi dan Validasi

Objek Message dianggap telah diinisialisasi jika memiliki semua kolom wajib diisi dan semua pesan bertingkat juga diinisialisasi.

Memanggil 'check_initialized' akan memunculkan ValidationError jika tidak diinisialisasi; 'is_initialized' menampilkan nilai boolean yang menunjukkan apakah nilai tersebut valid.

Google Protocol RPC memvalidasi objek Message secara otomatis saat objek tersebut dibuat dan diisi. Aplikasi Anda dapat memvalidasi apakah nilai tertentu kompatibel dengan field tempat nilai tersebut ditetapkan menggunakan metode validate() instance Field. Saat digunakan pada pesan, metode ini akan memeriksa apakah semua nilai pesan dan sub-pesannya valid. Menetapkan nilai yang tidak valid ke suatu field akan memunculkan ValidationError.

Contoh berikut membuat dan melakukan inisialisasi objek Message dalam aplikasi perdagangan saham fiktif.

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()

Konstruktor

Konstruktor class Message didefinisikan sebagai berikut:

class Message(**kwargs)

Lakukan inisialisasi status pesan internal.

Aplikasi menginisialisasi pesan melalui konstruktor dengan meneruskan argumen kata kunci yang sesuai dengan class field. Contoh:

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

Setelah menentukan class field, Anda dapat memanggil nilai field dengan singkat. Dua pemanggilan berikut setara:

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

Setara dengan:

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

Metode Class

Class Message menyediakan metode class berikut:

all_fields()
Mendapatkan semua objek definisi field. Menampilkan iterator ke semua nilai dalam urutan arbitrer.
field_by_name(name)
Mendapatkan field berdasarkan nama. Menampilkan objek Field yang terkait dengan nama tersebut.
Memunculkan KeyError jika field dengan nama tersebut tidak ditemukan.
field_by_number(number)
Mendapatkan field berdasarkan angka. Menampilkan objek field yang terkait dengan angka tersebut.
Memunculkan KeyError jika kolom dengan angka tersebut tidak ditemukan.

Metode Instance

Instance message memiliki metode berikut:

check_initialized()
Memeriksa apakah semua kolom wajib diisi telah diinisialisasi.
Memunculkan ValidationError jika objek Message tidak diinisialisasi.
get_assigned_value(name)
Mendapatkan nilai atribut yang telah ditetapkan. Jika nilai tidak ditetapkan, akan menampilkan Tidak ada
Argumen:
nama
Nama atribut yang akan diperoleh.

Menampilkan nilai atribut yang ditetapkan, atau Tidak ada jika atribut tidak memiliki nilai yang ditetapkan.

is_initialized(name)
Mendapatkan status inisialisasi objek Message. Menampilkan True jika pesan valid, jika tidak False.
reset(name)
Mereset nilai yang ditetapkan untuk suatu field, yang akan menetapkan kembali nilai default atau, jika tidak ada nilai default, Tidak ada.
Argumen:
nama
Nama field yang akan direset.