U
    SdD                     @   s\   d Z dZddlmZ ddlmZ ddlmZ ddlm	Z
 e
 Zdd Zd	d
 Zdd ZdS )zBuilds descriptors, message classes and services for generated _pb2.py.

This file is only called in python generated _pb2.py files. It builds
descriptors, message classes and services that users can directly use
in generated code.
zjieluo@google.com (Jie Luo)    )enum_type_wrapper)message)
reflection)symbol_databasec                    sH    fdd | j  D ]*\}}d|  }||<  ||d  qdS )zBuilds message and enum descriptors.

  Args:
    file_des: FileDescriptor of the .proto file
    module: Generated _pb2 module
  c                    sX   | j  D ]*\}}||  }||<  ||d  q
| jD ]}|||j  < q<d S )N_)nested_types_by_nameitemsupper
enum_typesname)msg_desprefixr   
nested_msgmodule_nameenum_desBuildNestedDescriptorsmodule D/tmp/pip-unpacked-wheel-1ori_g8k/google/protobuf/internal/builder.pyr   8   s    
z>BuildMessageAndEnumDescriptors.<locals>.BuildNestedDescriptorsr   N)message_types_by_namer   r	   )file_desr   r   r   r   r   r   r   BuildMessageAndEnumDescriptors0   s
    r   c           	         s    fdd | j  D ]>\}}||d|  < t|||< |jD ]}|j||j< qDq| j D ]"\}}|j|| d < |||< qb| j	 D ]\}}||d|  < q| j
 D ]\}} |||< qdS )zBuilds top level descriptors and message classes.

  Args:
    file_des: FileDescriptor of the .proto file
    module_name: str, the name of generated _pb2 module
    module: Generated _pb2 module
  c                    sV   i }| j  D ]\}} |||< q| |d< |d< t| jtjf|}t| |S )N
DESCRIPTOR
__module__)	r   r   _reflectionZGeneratedProtocolMessageTyper   _messageMessage_sym_dbZRegisterMessage)r   Zcreate_dictr   r   Zmessage_classBuildMessager   r   r   r    O   s      
z4BuildTopDescriptorsAndMessages.<locals>.BuildMessager   Z_FIELD_NUMBERN)Zenum_types_by_namer   r	   r   ZEnumTypeWrappervaluesnumberr   Zextensions_by_nameservices_by_namer   )	r   r   r   r   r   Z
enum_valueZextension_desservicer   r   r   r   BuildTopDescriptorsAndMessagesF   s    	

r%   c              	   C   sv   ddl m} ddl m} | j D ]N\}}|||jft||d||< |d }|||| ft||d||< q"dS )zBuilds services classes and services stub class.

  Args:
    file_des: FileDescriptor of the .proto file
    module_name: str, the name of generated _pb2 module
    module: Generated _pb2 module
  r   )r$   )service_reflection)r   r   Z_StubN)	google.protobufr$   r&   r#   r   ZGeneratedServiceTypeZServicedictZGeneratedServiceStubType)r   r   r   Z_servicer&   r   r$   Z	stub_namer   r   r   BuildServiceso   s    	 
 
r)   N)__doc__
__author__Zgoogle.protobuf.internalr   r'   r   r   r   r   r   Z_symbol_databaseZDefaultr   r   r%   r)   r   r   r   r   <module>   s   )