설명자 모듈 함수

descriptor.py 모듈에는 Google 프로토콜 RPC 정의를 전송 가능한 메시지 형식으로 변환하기 위한 메시지 정의 및 함수가 포함되어 있습니다.

Enum 인스턴스, Enum 클래스, Field 클래스, Message 클래스를 설명하면 적절한 설명자 객체가 생성됩니다. 설명자 객체는 enum, 메시지, 서비스 등 다른 Google 프로토콜 RPC 정의를 설명하는 객체입니다. 이 메시지를 사용하면 소스 코드를 다운로드하지 않아도 enum 값, enum, 필드 또는 메시지에 대한 설명을 확인하려는 클라이언트에 정보를 전송할 수 있습니다. 이 형식은 Python 이외의 다른 언어와도 호환됩니다.

설명자는 https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/descriptor.proto와 바이너리 호환되도록 모델링됩니다.

참고 descriptor.py에 정의된 유형 및 필드 이름은 descriptor.proto에 정의된 유형 및 필드와 반드시 일치하지 않아도 됩니다. Google 프로토콜 RPC는 이러한 방식으로 설계되어 이 설명자를 사용하는 소스 코드 파일을 쉽게 읽을 수 있습니다. 예를 들어 descriptor.proto에서는 FieldDescriptors 앞에 TYPE이 와야 하지만 descriptor.py에서는 그렇지 않습니다.

다음 코드 샘플은 MessageDescriptor 클래스를 사용하여 Pixel이라는 클래스를 설명하는 설명자 모듈 사용법을 보여줍니다.

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)

protorpc.descriptor 패키지는 다음과 같은 함수를 제공합니다.

describe(value)

모든 값을 설명자로 설명합니다. 이 도우미 함수를 사용하여 적절한 설명자 객체가 있는 객체를 설명할 수 있습니다.

인수
value
설명자로 설명할 값입니다.

객체가 설명자로 설명할 수 있는 경우 설명자를 반환하고, 그렇지 않은 경우 None을 반환합니다.

describe_enum(enum_definition)

Enum 클래스에서 설명자를 빌드합니다.

인수
enum_value
설명할 Enum 클래스입니다.

Enum 인스턴스를 설명하는 초기화된 EnumDescriptor 인스턴스를 반환합니다.

EnumDescriptor 클래스 필드:

name
한정이 없는 지정된 Enum의 이름입니다.
values
Enum 클래스가 정의하는 값입니다.
describe_enum_value(enum_value)

Enum 인스턴스에서 설명자를 빌드합니다. 인수

enum_value
설명할 Enum 값입니다.

Enum 인스턴스를 설명하는 초기화된 EnumValueDescriptor 인스턴스를 반환합니다.

EnumValueDescriptor 클래스 필드:

name
설명할 Enum 값입니다.
number
열거 값 번호입니다.
describe_field(field_definition)

Field 인스턴스에서 설명자를 빌드합니다.

인수
field_definition
설명할 Field 인스턴스입니다.

Enum 및 필드 목록이 있는 Field 인스턴스를 설명하는 초기화된 FieldDescriptor 인스턴스를 반환합니다.

FieldDescriptor 클래스 열거형:

Variant
지정된 필드의 통신 형식 힌트 하위 유형입니다.
Label
선택, 필수, 반복 필드의 값입니다.

FieldDescriptor 클래스 필드:

name
지정된 필드의 이름입니다.
number
지정된 필드의 번호입니다.
variant
지정된 필드의 변수입니다.
type_name
메시지 및 enum 필드의 유형 이름입니다.
default_value
기본값의 문자열 표현입니다.
describe_file(module)

지정된 Python 모듈에서 파일을 빌드합니다.

인수
module
설명할 Python입니다.

모듈을 설명하는 초기화된 FileDescriptor 인스턴스를 반환합니다.

FileDescriptor 클래스 필드:

package
정의가 속한 패키지의 정규화된 이름입니다.
message_types
파일에 포함된 메시지 정의입니다.
enum_types
파일에 포함된 Enum 정의입니다.
service_types
파일에 포함된 서비스 정의입니다.
describe_file_set(modules)

지정된 Python 모듈에서 파일 집합을 빌드합니다.

인수
modules
설명할 Python 모듈의 반복 가능 항목입니다.

모듈을 설명하는 초기화된 FileSet 인스턴스를 반환합니다.

FileSet 클래스 필드:

files
파일 집합의 파일입니다.
describe_message(message_definition)

Message 클래스에서 설명자를 빌드합니다.

인수
message_definition
설명할 Message 클래스입니다.

Message 클래스를 설명하는 초기화된 MessageDescriptor 인스턴스를 반환합니다.

MessageDescriptor 클래스 필드:

name
정의가 속한 패키지의 정규화된 이름입니다.
fields
메시지에 정의된 필드입니다.
message_types
메시지에 정의된 중첩 Message 클래스입니다.
enum_types
메시지에 정의된 중첩 Enum 클래스입니다.
describe_method(method)

원격 서비스 메서드에서 설명자를 빌드합니다.

인수
메서드
설명할 원격 서비스 메서드입니다.

원격 서비스 메서드를 설명하는 초기화된 MethodDescriptor 인스턴스를 반환합니다.

MethodDescriptor 필드:

name
서비스 메서드의 이름입니다.
request_type
요청 메시지 유형의 정규화된 이름 또는 상대 이름입니다.
response_type
응답 메시지 유형의 정규화된 이름 또는 상대 이름입니다.
describe_service(service_class)

Service 클래스에서 설명자를 빌드합니다.

인수
service_class
설명할 Service 클래스입니다.

서비스를 설명하는 초기화된 ServiceDescriptor 인스턴스를 반환합니다.

ServiceDescriptor 필드:

name
서비스의 정규화되지 않은 이름입니다.
methods
서비스의 원격 메서드입니다.
import_descriptor_loader(definition_name, importer=__import__ )

필요에 따라 모듈을 가져와 객체를 찾습니다. 정의 로더는 설명자에 대한 정의 이름을 확인하는 함수입니다. 가져오기 찾기는 필요한 경우 모듈을 가져와 이름에 대한 정의를 확인합니다.

인수
definition_name
찾을 정의 이름입니다.
importer=__import__ )
새 모듈을 가져오는 데 사용되는 가져오기 함수입니다.

이름별로 위치한 설명 가능한 유형에서 적합한 설명자를 반환합니다.

이름이 정의 또는 모듈을 참조하지 않는 경우 DefinitionNotFoundError가 발생합니다.