Il modulo descriptor.py
contiene le definizioni e le funzioni per il messaggio per la conversione delle definizioni RPC del protocollo Google in un formato di messaggio trasmissibile.
La descrizione di un'istanza, di una classe Enum, di una classe di campo o di una classe Enum genera un oggetto descrittore appropriato. Un oggetto descrittore è un oggetto che descrive altre definizioni RPC del protocollo Google, come enum, messaggi e servizi. Puoi utilizzare questo messaggio per trasmettere informazioni ai clienti che vogliono conoscere la descrizione di un valore enum, un campo, un campo o un messaggio, senza dover scaricare il codice sorgente. Questo formato è compatibile anche con altre lingue non Python.
I descrittori sono modellati per essere compatibili con il programma binario con https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/descriptor.proto
Nota: I nomi dei tipi e dei campi definiti in descriptor.py
non corrispondono necessariamente a quelli definiti in descriptor.proto
. Google Protocol RPC è progettato in modo da semplificare la lettura dei file di codice sorgente che utilizzano questi descrittori. Ad esempio, i FieldDescriptor devono avere un prefisso TYPE
in descriptor.proto
, ma non in descriptor.py
.
Il seguente esempio di codice mostra l'uso del modulo descrittore per descrivere una classe denominata Pixel
utilizzando la classe 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)
Il pacchetto protorpc.descriptor
fornisce le seguenti funzioni:
- describe(valore)
-
Descrive qualsiasi valore come descrittore. Puoi utilizzare questa funzione helper per descrivere qualsiasi oggetto con un descrittore appropriato.
Argomenti- valore
- Valore da descrivere come descrittore.
Restituisce un descrittore se l'oggetto è descritto come descrittore, altrimenti Nessuno.
- describe_enum(itum_Definition)
-
Crea un descrittore da una classe Enum.
Argomenti- valore_enum
- La classe Enum da descrivere.
Restituisce un'istanza EnumDescriptor inizializzata che descrive l'istanza Enum.
Campi classe EnumDescriptor:
name
- Nome dell'Enum specificato senza qualifiche.
values
- Valori definiti dalla classe Enum.
- describe_enum_value(enum_value)
-
Crea un descrittore da un'istanza Enum. Argomenti
- valore_enum
- Il valore Enum da descrivere.
Restituisce un'istanza EnumValueDescriptor inizializzata che descrive l'istanza Enum.
Campi classe EnumValueDescriptor:
name
- Nome del valore di enumerazione.
number
- Numero del valore di enumerazione.
- describe_field(definizione_campo)
-
Crea un descrittore da un'istanza Field.
Argomenti- definizione_campo
- L'istanza di campo da descrivere.
Restituisce un'istanza FieldDescriptor inizializzata che descrive l'istanza Field con un elenco di enumerazioni e campi.
Enum delle classi FieldDescriptor:
Variant
- I sottotipi di suggerimento per il formato del cavo per il campo specificato.
Label
- Valori per i campi facoltativi, obbligatori e ripetuti.
Campi della classe FieldDescriptor:
name
- Il nome del campo specificato.
number
- Numero del campo specificato.
variant
- Variante del campo specificato.
type_name
- Digita il nome del messaggio e dei campi enum.
default_value
- Rappresentazione stringa del valore predefinito.
- describe_file(modulo)
-
Crea un file da un modulo Python specificato.
Argomenti- modulo
- Il Python da descrivere.
Restituisce un'istanza FileDescriptor inizializzata che descrive il modulo.
Campi classe FileDescriptor
package
- Nome completo del pacchetto a cui appartengono le definizioni.
message_types
- Definizioni dei messaggi contenute nel file.
enum_types
- Enum definizioni contenute nel file.
service_types
- Definizioni dei servizi contenute nel file.
- describe_file_set(moduli)
-
Crea un set di file dai moduli Python specificati.
Argomenti- Moduli
- Descrivere il modulo Python per descriverlo.
Restituisce un'istanza FileSet inizializzata che descrive il modulo.
Campi ClassSet FileSet:
files
- File nel set di file.
- describe_message(definizione_messaggio)
-
Crea un descrittore da una classe Message.
Argomenti- definizione_messaggio
- La classe Messaggio da descrivere.
Restituisce un'istanza MessageDescriptor inizializzata che descrive la classe Message.
Campi classe MessageDescriptor:
name
- Nome completo del pacchetto a cui appartengono le definizioni.
fields
- Campi definiti per il messaggio.
message_types
- Le classi di messaggi nidificati definite nel messaggio.
enum_types
- Le classi Enum nidificate definite nel messaggio.
- describe_method(metodo)
-
Crea un descrittore da un metodo di servizio remoto.
Argomenti- metodo
- Il metodo di servizio remoto da descrivere.
Restituisce un'istanza MethodDescriptor inizializzata che descrive il metodo di servizio remoto.
Campi MethodDescriptor:
name
- Il nome del metodo di servizio.
request_type
- Nome completo o nome relativo del tipo di messaggio di richiesta.
response_type
- Nome completo o relativo del tipo di messaggio di risposta.
- describe_service(service_class)
-
Crea un descrittore da una classe Service.
Argomenti- classe_servizio
- La classe Service da descrivere.
Restituisce un'istanza ServiceDescriptor inizializzata che descrive il servizio.
Campi ServiceDescriptor:
name
- Nome non qualificato del Servizio.
methods
- Metodi remoti del Servizio.
- import_descriptor_loader(Definition_name, importer=__import__)
-
Trova gli oggetti importando i moduli in base alle esigenze. Un caricatore di definizioni è una funzione che risolve un nome di definizione in un descrittore. Lo strumento di ricerca delle importazioni risolve le definizioni dei rispettivi nomi importando i moduli quando necessario.
Argomenti- nome_definizione
- Nome della definizione da trovare.
- importatore=__import__ )
- Funzione di importazione utilizzata per importare nuovi moduli.
Restituisce un descrittore appropriato di qualsiasi tipo di descrizione configurabile per nome.
Visualizza un valore DefinitionNotFoundError quando un nome non fa riferimento a una definizione o a un modulo.