a
    còf9  ã                   @   s8   d Z ddlmZ ddlmZ dd„ ZG dd„ deƒZdS )	z7Contains _ExtensionDict class to represent extensions.
é    )Útype_checkers)ÚFieldDescriptorc                 C   sj   t |tƒstd| ƒ‚|js*td|j ƒ‚|js>td|j ƒ‚|j| jurftd|j|jj| jjf ƒ‚dS )z0Verify that the given extension handle is valid.z3HasExtension() expects an extension handle, got: %sz"%s" is not an extension.z""%s" is missing a containing_type.zKExtension "%s" extends message type "%s", but this message is of type "%s".N)Ú
isinstancer   ÚKeyErrorÚis_extensionÚ	full_nameZcontaining_typeÚ
DESCRIPTOR)ÚmessageÚextension_handle© r   úd/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/google/protobuf/internal/extension_dict.pyÚ_VerifyExtensionHandle   s"    
ÿÿþþr   c                   @   sp   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú_ExtensionDictz�Dict-like container for Extension fields on proto instances.

  Note that in all cases we expect extension handles to be
  FieldDescriptors.
  c                 C   s
   || _ dS )z^
    Args:
      extended_message: Message instance for which we are the Extensions dict.
    N)Ú_extended_message)ÚselfZextended_messager   r   r   Ú__init__0   s    z_ExtensionDict.__init__c                 C   sâ   t | j|ƒ | jj |¡}|dur&|S |jtjkr@| | j¡}nŽ|jtj	krÈ|j
}t|dƒsrddlm} | |¡ t|j
dƒs–ddlm} | |j
¡ |j
 ¡ }z| | jj¡ W qÎ tyÄ   Y qÎ0 n|jS | jj ||¡}|S )z8Returns the current value of the given extension handle.NÚ_concrete_classr   )Úmessage_factory)r   r   Ú_fieldsÚgetÚlabelr   ÚLABEL_REPEATEDZ_default_constructorÚcpp_typeÚCPPTYPE_MESSAGEÚmessage_typeÚhasattrZgoogle.protobufr   ZGetMessageClassr   Z_SetListenerZ_listener_for_childrenÚReferenceErrorÚdefault_valueÚ
setdefault)r   r
   Úresultr   r   r   r   r   Ú__getitem__7   s0    


ÿz_ExtensionDict.__getitem__c                 C   sH   t || jƒsdS | j ¡ }|j ¡ }dd„ |D ƒ}dd„ |D ƒ}||kS )NFc                 S   s   g | ]}|j r|‘qS r   ©r   ©Ú.0Úfieldr   r   r   Ú
<listcomp>h   ó    z)_ExtensionDict.__eq__.<locals>.<listcomp>c                 S   s   g | ]}|j r|‘qS r   r!   r"   r   r   r   r%   i   r&   )r   Ú	__class__r   Ú
ListFields)r   ÚotherZ	my_fieldsZother_fieldsr   r   r   Ú__eq__`   s    

z_ExtensionDict.__eq__c                 C   s
   | |k S ©Nr   )r   r)   r   r   r   Ú__ne__m   s    z_ExtensionDict.__ne__c                 C   s    | j  ¡ }dd„ |D ƒ}t|ƒS )Nc                 S   s   g | ]}|d  j r|‘qS )r   r!   r"   r   r   r   r%   s   r&   z*_ExtensionDict.__len__.<locals>.<listcomp>)r   r(   Úlen)r   ÚfieldsZextension_fieldsr   r   r   Ú__len__p   s    
z_ExtensionDict.__len__c                 C   s   t dƒ‚d S )Nzunhashable object)Ú	TypeError©r   r   r   r   Ú__hash__v   s    z_ExtensionDict.__hash__c                 C   s\   t | j|ƒ |jtjks$|jtjkr2td|j ƒ‚t	 
|¡}| |¡| jj|< | j ¡  dS )zlIf extension_handle specifies a non-repeated, scalar extension
    field, sets the value of that field.
    zKCannot assign to extension "%s" because it is a repeated or composite type.N)r   r   r   r   r   r   r   r0   r   r   ZGetTypeCheckerZ
CheckValuer   Z	_Modified)r   r
   ÚvalueZtype_checkerr   r   r   Ú__setitem__}   s    
ÿÿÿ
ÿ
z_ExtensionDict.__setitem__c                 C   s   | j  |¡ d S r+   )r   ZClearExtension)r   r
   r   r   r   Ú__delitem__’   s    z_ExtensionDict.__delitem__c                 C   s"   | j j}|jjj| }| |d¡S )z™Tries to find a known extension with the specified name.

    Args:
      name: Extension full name.

    Returns:
      Extension field descriptor.
    N)r   r   ÚfileÚpoolZ_extensions_by_namer   )r   ÚnameÚ
descriptorÚ
extensionsr   r   r   Ú_FindExtensionByName•   s    	z#_ExtensionDict._FindExtensionByNamec                 C   s"   | j j}|jjj| }| |d¡S )zœTries to find a known extension with the field number.

    Args:
      number: Extension field number.

    Returns:
      Extension field descriptor.
    N)r   r   r6   r7   Z_extensions_by_numberr   )r   Únumberr9   r:   r   r   r   Ú_FindExtensionByNumber¢   s    	z%_ExtensionDict._FindExtensionByNumberc                 C   s   dd„ | j  ¡ D ƒS )Nc                 s   s    | ]}|d  j r|d  V  qdS )r   Nr!   )r#   Úfr   r   r   Ú	<genexpr>±   s   
ÿz*_ExtensionDict.__iter__.<locals>.<genexpr>)r   r(   r1   r   r   r   Ú__iter__¯   s    z_ExtensionDict.__iter__c                 C   sf   t | j|ƒ || jjvrdS |jtjkr:t| jj |¡ƒS |jtj	krb| jj |¡}|d uo`|j
S dS )NFT)r   r   r   r   r   r   Úboolr   r   r   Z_is_present_in_parent)r   r
   r3   r   r   r   Ú__contains__´   s    z_ExtensionDict.__contains__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r*   r,   r/   r2   r4   r5   r;   r=   r@   rB   r   r   r   r   r   (   s   )r   N)rF   Zgoogle.protobuf.internalr   Zgoogle.protobuf.descriptorr   r   Úobjectr   r   r   r   r   Ú<module>   s   