o
    ‹¨ÊhR  ã                   @   sz   d Z zddlmZ W n ey   ddlmZ Y nw ddlZddlZddlmZ ddlm	Z	 dd„ Z
ddd	„Zd
d„ ZdS )zDynamic Protobuf class creator.é    )ÚOrderedDictN)Údescriptor_pb2)Úmessage_factoryc                 C   s   | j  |¡}|  |¡}|S )a8  Get a proto class from the MessageFactory by name.

  Args:
    factory: a MessageFactory instance.
    full_name: str, the fully qualified name of the proto type.
  Returns:
    A class, for the type identified by full_name.
  Raises:
    KeyError, if the proto is not found in the factory's descriptor pool.
  )ÚpoolÚFindMessageTypeByNameÚGetPrototype)ÚfactoryÚ	full_nameÚproto_descriptorÚ	proto_cls© r   úO/var/www/html/env/lib/python3.10/site-packages/google/protobuf/proto_builder.pyÚ_GetMessageFromFactory,   s   
r   c           
      C   sî   t j|d�}|durzt||ƒ}|W S  ty   Y nw |  ¡ }t| tƒs)t|ƒ}t 	¡ }|D ]\}}| 
| d¡¡ | 
t|ƒ d¡¡ q/| ¡ d }	|du rhd| ¡  }zt||ƒ}|W S  tyg   Y nw |j t|	||ƒ¡ t||ƒS )aê  Create a Protobuf class whose fields are basic types.

  Note: this doesn't validate field names!

  Args:
    fields: dict of {name: field_type} mappings for each field in the proto. If
        this is an OrderedDict the order will be maintained, otherwise the
        fields will be sorted by name.
    full_name: optional str, the fully-qualified name of the proto type.
    pool: optional DescriptorPool instance.
  Returns:
    a class, the new protobuf class with a FileDescriptor.
  )r   Nzutf-8z.protoz6net.proto2.python.public.proto_builder.AnonymousProto_)r   ÚMessageFactoryr   ÚKeyErrorÚitemsÚ
isinstancer   ÚsortedÚhashlibÚsha1ÚupdateÚencodeÚstrÚ	hexdigestr   ÚAddÚ_MakeFileDescriptorProto)
Úfieldsr	   r   r   r   Úfield_itemsÚfields_hashÚf_nameÚf_typeÚproto_file_namer   r   r   ÚMakeSimpleProtoClass<   s<   
þ
ÿ
þ
ÿ
r"   c                 C   sˆ   |  dd¡\}}t ¡ }tj | dd¡| ¡|_||_|j	 
¡ }||_t|dƒD ]\}\}}	|j 
¡ }
||
_||
_tjj|
_|	|
_q(|S )zAPopulate FileDescriptorProto for MessageFactory's DescriptorPool.Ú.é   ú/)Úrsplitr   ÚFileDescriptorProtoÚosÚpathÚjoinÚreplaceÚnameÚpackageÚmessage_typeÚaddÚ	enumerateÚfieldÚnumberÚFieldDescriptorProtoÚLABEL_OPTIONALÚlabelÚtype)r!   r	   r   r-   r,   Ú
file_protoÚ
desc_protoÚf_numberr   r    Úfield_protor   r   r   r   t   s   


r   )NN)Ú__doc__Úcollectionsr   ÚImportErrorÚordereddictr   r(   Úgoogle.protobufr   r   r   r"   r   r   r   r   r   Ú<module>   s   ÿ
8