Fungsi Modul Deskripsi

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 yang sepenuhnya memenuhi syarat dari paket yang berisi definisi.
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 yang sepenuhnya memenuhi syarat dari paket yang berisi definisi.
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.