Funzioni del modulo descrittore

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.