Funzioni del modulo dei descrittori

Il modulo descriptor.py contiene definizioni di messaggi e funzioni per la conversione delle definizioni RPC del protocollo Google in un formato di messaggio trasmissibile.

La descrizione di un'istanza Enum, di una classe Enum, di una classe Field o di una classe Message 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 client che vogliono conoscere la descrizione di un valore, un enum, un campo o un messaggio di un enum senza dover scaricare il codice sorgente. Questo formato è compatibile anche con altri linguaggi diversi da Python.

I descrittori sono progettati per essere compatibili in formato 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 questo modo per semplificare la lettura dei file di codice sorgente che utilizzano questi descrittori. Ad esempio, i campi FieldDescriptor devono avere il prefisso TYPE in descriptor.proto, ma non in descriptor.py.

Il seguente esempio di codice mostra l'utilizzo 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(value)

Descrive qualsiasi valore come descrittore. Puoi utilizzare questa funzione di supporto per descrivere qualsiasi oggetto con un oggetto descrittore appropriato.

Argomenti
value
Valore da descrivere come descrittore.

Restituisce un descrittore se l'oggetto è descrivibile come descrittore, altrimenti None.

describe_enum(enum_definition)

Consente di creare un descrittore da una classe Enum.

Argomenti
enum_value
La classe Enum da descrivere.

Restituisce un'istanza EnumDescriptor inizializzata che descrive l'istanza Enum.

Campi della classe EnumDescriptor:

name
Nome dell'enum specificato senza alcuna qualifica.
values
Valori definiti dalla classe Enum.
describe_enum_value(enum_value)

Consente di creare un descrittore da un'istanza Enum. Argomenti

enum_value
Il valore Enum da descrivere.

Restituisce un'istanza EnumValueDescriptor inizializzata che descrive l'istanza Enum.

Campi della classe EnumValueDescriptor:

name
Nome del valore di enumerazione.
number
Numero del valore di enumerazione.
describe_field(field_definition)

Consente di creare un descrittore da un'istanza Field.

Argomenti
field_definition
L'istanza Field da descrivere.

Restituisce un'istanza FieldDescriptor inizializzata che descrive l'istanza Field con un elenco di enum e campi.

Enum della classe FieldDescriptor:

Variant
Sottotipi di suggerimenti per il formato del cavo per il campo specificato.
Label
Valori per i campi facoltativi, obbligatori e ripetuti.

Campi della classe FieldDescriptor:

name
Nome del campo specificato.
number
Numero del campo specificato.
variant
Variante del campo specificato.
type_name
Digita il nome per i campi message ed enum.
default_value
Rappresentazione come stringa del valore predefinito.
describe_file(module)

Genera un file da un modulo Python specificato.

Argomenti
module
Il codice Python da descrivere.

Restituisce un'istanza di FileDescriptor inizializzata che descrive il modulo.

Campi della classe FileDescriptor

package
Nome completo del pacchetto a cui appartengono le definizioni.
message_types
Definizioni dei messaggi contenute nel file.
enum_types
Definizioni di enum contenute nel file.
service_types
Definizioni dei servizi contenute nel file.
describe_file_set(modules)

Genera un insieme di file dai moduli Python specificati.

Argomenti
modules
Iterable del modulo Python da descrivere.

Restituisce un'istanza FileSet inizializzata che descrive il modulo.

Campi della classe FileSet:

files
File nel set di file.
describe_message(message_definition)

Consente di creare un descrittore da una classe Message.

Argomenti
message_definition
La classe Message da descrivere.

Restituisce un'istanza di MessageDescriptor inizializzata che descrive la classe Message.

Campi della classe MessageDescriptor:

name
Nome completo del pacchetto a cui appartengono le definizioni.
fields
Campi definiti per il messaggio.
message_types
Classi di messaggi nidificate definite nel messaggio.
enum_types
Classi Enum nidificate definite nel messaggio.
describe_method(method)

Consente di creare un descrittore da un metodo del servizio remoto.

Argomenti
method
Il metodo del servizio remoto da descrivere.

Restituisce un'istanza di MethodDescriptor inizializzata che descrive il metodo del servizio remoto.

Campi MethodDescriptor:

name
Nome del metodo del servizio.
request_type
Nome completo o relativo del tipo di messaggio di richiesta.
response_type
Nome completo o relativo del tipo di messaggio di risposta.
describe_service(service_class)

Consente di creare un descrittore da una classe Service.

Argomenti
service_class
La classe di servizio da descrivere.

Restituisce un'istanza di 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. Il cercatore di importazioni risolve le definizioni nei relativi nomi importando i moduli, se necessario.

Argomenti
definition_name
Nome della definizione da trovare.
importer=__import__ )
Funzione di importazione utilizzata per importare nuovi moduli.

Restituisce un descrittore appropriato da qualsiasi tipo descrivibile trovato per nome.

Genera un DefinitionNotFoundError quando un nome non fa riferimento a una definizione o a un modulo.