£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
h                 @   sd   d Z dZddlmZ ddlmZ ej dkr:ddlmZ	 nddlm
Z	 e	jZi Zdd	 Zd
d ZdS )a  Contains a metaclass and helper functions used to create
protocol message classes from Descriptor objects at runtime.

Recall that a metaclass is the "type" of a class.
(A class is to a metaclass what an instance is to a class.)

In this case, we use the GeneratedProtocolMessageType metaclass
to inject all the useful functionality into the classes
output by the protocol compiler at compile-time.

The upshot of all this is that the real implementation
details for ALL pure-Python protocol buffers are *here in
this file*.
z#robinson@google.com (Will Robinson)    )api_implementation)messageZcpp)cpp_message)python_messagec             C   s   t | }| }|j| |S )zGenerate a new Message instance from this Descriptor and a byte string.

  Args:
    descriptor: Protobuf Descriptor object
    byte_str: Serialized protocol buffer byte string

  Returns:
    Newly created protobuf Message object.
  )	MakeClassZParseFromString)
descriptorZbyte_strZresult_classZnew_msg r    /usr/lib/python3.6/reflection.pyParseMessageC   s    

r
   c             C   sh   | t krt |  S i }x&t| jj D ]\}}t|||< q$W | |tj< tt| jt	j
f|}|t | < |S )a  Construct a class object for a protobuf described by descriptor.

  Composite descriptors are handled by defining the new class as a member of the
  parent class, recursing as deep as necessary.
  This is the dynamic equivalent to:

  class Parent(message.Message):
    __metaclass__ = GeneratedProtocolMessageType
    DESCRIPTOR = descriptor
    class Child(message.Message):
      __metaclass__ = GeneratedProtocolMessageType
      DESCRIPTOR = descriptor.nested_types[0]

  Sample usage:
    file_descriptor = descriptor_pb2.FileDescriptorProto()
    file_descriptor.ParseFromString(proto2_string)
    msg_descriptor = descriptor.MakeDescriptor(file_descriptor.message_type[0])
    msg_class = reflection.MakeClass(msg_descriptor)
    msg = msg_class()

  Args:
    descriptor: A descriptor.Descriptor object describing the protobuf.
  Returns:
    The Message class object described by the descriptor.
  )MESSAGE_CLASS_CACHElistZnested_types_by_nameitemsr   GeneratedProtocolMessageTypeZ_DESCRIPTOR_KEYstrnamer   ZMessage)r   Z
attributesr   Znested_typeresultr   r   r	   r   S   s    
r   N)__doc__
__author__Zgoogle.protobuf.internalr   Zgoogle.protobufr   ZTypeZgoogle.protobuf.pyextr   Zmessage_implr   r   r   r
   r   r   r   r   r	   <module>.   s   