Modul descriptor.py
berisi definisi pesan dan fungsi untuk mengonversi definisi Google Protocol RPC ke dalam format pesan yang dapat ditransmisikan.
Menjelaskan instance Enum, class Enum, class Field, atau class Message yang menghasilkan objek deskripsi yang sesuai. Objek deskripsi adalah objek yang menjelaskan definisi Google Protocol RPC lainnya seperti enum, pesan, dan layanan. Anda dapat menggunakan pesan ini untuk mengirimkan informasi kepada klien yang ingin mengetahui deskripsi nilai enum, enum, kolom, atau pesan tanpa perlu mendownload kode sumber. Format ini juga kompatibel dengan bahasa non-Python lainnya.
Deskripsi dimodelkan agar kompatibel dengan biner menggunakan https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/descriptor.proto
Perhatian! Nama jenis dan kolom yang ditentukan di descriptor.py
tidak selalu cocok dengan yang ditentukan di descriptor.proto
. Google Protocol RPC dirancang seperti ini agar file kode sumber yang menggunakan deskripsi tersebut lebih mudah dibaca. Misalnya, FieldDescriptors harus diawali dengan TYPE
di descriptor.proto
, tetapi tidak di descriptor.py
.
Contoh kode berikut menunjukkan penggunaan modul deskripsi untuk mendeskripsikan class bernama Pixel
menggunakan class MessageDescriptor
.
from protorpc import descriptor from protorpc import messages class Pixel(messages.Message): x = messages.IntegerField(1, required=True) y = messages.IntegerField(2, required=True) color = messages.BytesField(3) # Describe Pixel class using message descriptor. fields = [ descriptor.FieldDescriptor(name='x', number=1, label=descriptor.FieldDescriptor.Label.REQUIRED, variant=descriptor.FieldDescriptor.Variant.INT64), descriptor.FieldDescriptor(name='y', number=2, label=descriptor.FieldDescriptor.Label.REQUIRED, variant=descriptor.FieldDescriptor.Variant.INT64), descriptor.FieldDescriptor(name='color', number = 3, label=descriptor.FieldDescriptor.Label.OPTIONAL, variant=descriptor.FieldDescriptor.Variant.BYTES)] message = descriptor.MessageDescriptor(name='Pixel', fields=fields) # Describing is the equivalent of building the above message. message == descriptor.describe_message(Pixel)
Paket protorpc.descriptor
menyediakan fungsi berikut:
- describe(value)
-
Menjelaskan nilai apa pun sebagai deskripsi. Anda bisa menggunakan fungsi bantuan ini untuk mendeskripsikan objek dengan objek deskripsi yang sesuai.
Argumen- value
- Nilai yang akan dideskripsikan sebagai deskripsi.
Menampilkan deskripsi jika objek dapat dideskripsikan sebagai deskripsi. Jika tidak, Tidak Ada akan ditampilkan.
- describe_enum(enum_definition)
-
Membuat deskripsi dari class Enum.
Argumen- enum_value
- Class Enum yang akan dideskripsikan.
Menampilkan instance EnumDescriptor yang diinisialisasi yang mendeskripsikan instance Enum.
Kolom Class EnumDescriptor:
name
- Nama Enum yang ditentukan tanpa kualifikasi.
values
- Nilai yang ditentukan oleh class Enum.
- describe_enum_value(enum_value)
-
Membuat deskripsi dari instance Enum. Argumen
- enum_value
- Nilai Enum yang akan dideskripsikan.
Menampilkan instance EnumValueDescriptor yang diinisialisasi yang mendeskripsikan instance Enum.
Kolom Class EnumValueDescriptor:
name
- Nama nilai enumerasi.
number
- Jumlah nilai enumerasi.
- describe_field(field_definition)
-
Membuat deskripsi dari instance Field.
Argumen- field_definition
- Instance Field yang akan dideskripsikan.
Menampilkan instance FieldDescriptor yang diinisialisasi yang mendeskripsikan instance Field dengan daftar Enum dan kolom.
Enum Class FieldDescriptor:
Variant
- Subjenis petunjuk format kabel untuk kolom yang ditentukan.
Label
- Nilai untuk kolom opsional, wajib, dan berulang.
Kolom Class FieldDescriptor:
name
- Nama kolom yang ditentukan.
number
- Jumlah kolom yang ditentukan.
variant
- Varian kolom yang ditentukan.
type_name
- Nama jenis untuk kolom pesan dan enum.
default_value
- Representasi string dari nilai default.
- describe_file(module)
-
Membuat file dari modul Python yang ditentukan.
Argumen- module
- Python yang akan dijelaskan.
Menampilkan instance FileDescriptor yang diinisialisasi yang mendeskripsikan modul.
Kolom Class FileDescriptor
package
- Nama paket yang sepenuhnya memenuhi syarat yang memuat definisi tersebut.
message_types
- Definisi pesan yang ada di dalam file.
enum_types
- Definisi enum yang ada di dalam file.
service_types
- Definisi layanan yang ada di dalam file.
- describe_file_set(modules)
-
Membuat set file dari modul Python yang ditentukan.
Argumen- module
- Modul Python yang akan dideskripsikan.
Menampilkan instance FileSet yang diinisialisasi yang mendeskripsikan modul.
Kolom Class FileSet:
files
- File dalam kumpulan file.
- describe_message(message_definition)
-
Membuat deskripsi dari class Message.
Argumen- message_definition
- Class Message yang akan dideskripsikan.
Menampilkan instance MessageDescriptor yang diinisialisasi yang mendeskripsikan class Message.
Kolom Class MessageDescriptor:
name
- Nama paket yang sepenuhnya memenuhi syarat yang memuat definisi tersebut.
fields
- Kolom yang ditentukan untuk pesan.
message_types
- Class Message bertingkat yang ditentukan pada pesan.
enum_types
- Class Enum bertingkat yang ditentukan pada pesan.
- describe_method(method)
-
Membuat deskripsi dari metode layanan jarak jauh.
Argumen- metode
- Metode layanan jarak jauh yang akan dideskripsikan.
Menampilkan instance MethodDescriptor yang diinisialisasi yang mendeskripsikan metode layanan jarak jauh.
Kolom MethodDescriptor:
name
- Nama metode layanan.
request_type
- Nama yang sepenuhnya memenuhi syarat atau nama relatif jenis pesan permintaan.
response_type
- Nama yang sepenuhnya memenuhi syarat atau nama kreatif jenis pesan respons.
- describe_service(service_class)
-
Membuat deskripsi dari class Service.
Argumen- service_class
- Class Service yang akan dijelaskan.
Menampilkan instance ServiceDescriptor yang diinisialisasi yang mendeskripsikan layanan.
Kolom ServiceDescriptor:
name
- Nama Layanan yang tidak memenuhi syarat.
methods
- Metode Layanan jarak jauh.
- import_descriptor_loader(definition_name, importer=__import__ )
-
Menemukan objek dengan mengimpor modul sesuai kebutuhan. Loader definisi adalah fungsi yang me-resolve nama definisi menjadi deskripsi. Pencari impor me-resolve definisi pada namanya dengan mengimpor modul jika diperlukan.
Argumen- definition_name
- Nama definisi yang akan ditemukan.
- importer=__import__ )
- Fungsi impor yang digunakan untuk mengimpor modul baru.
Menampilkan deskripsi yang sesuai dari jenis yang dapat dideskripsikan yang ditemukan berdasarkan nama.
Memunculkan DefinitionNotFoundError jika suatu nama tidak merujuk ke definisi atau modul.