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가 발생합니다.