3
Šãdeû   ã               @   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k	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_typeZ
DESCRIPTOR)ÚmessageÚextension_handle© r
   ú^/var/www/agendate/envp3/lib/python3.6/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__G   s    z_ExtensionDict.__init__c             C   sÜ   t | j|ƒ | jjj|ƒ}|dk	r&|S |jtjkr@|j| jƒ}nˆ|jtj	krÂ|j
}t|dƒsj| jjj|ƒ t|j
ddƒsŽtd|j|j
jf ƒ‚|j
jƒ }y|j| jjƒ W qÈ tk
r¾   Y qÈX n|jS | jjj||ƒ}|S )z8Returns the current value of the given extension handle.NÚ_concrete_classzAUninitialized concrete class found for field %r (message type %r))r   r   Ú_fieldsÚgetÚlabelr   ÚLABEL_REPEATEDZ_default_constructorÚcpp_typeÚCPPTYPE_MESSAGEÚmessage_typeÚhasattrZ_FACTORYZGetPrototypeÚgetattrÚAssertionErrorr   r   Z_SetListenerZ_listener_for_childrenÚReferenceErrorÚdefault_valueÚ
setdefault)r   r	   Úresultr   r
   r
   r   Ú__getitem__N   s.    

z_ExtensionDict.__getitem__c             C   sH   t || jƒsdS | jjƒ }|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>   s    z)_ExtensionDict.__eq__.<locals>.<listcomp>c             S   s   g | ]}|j r|‘qS r
   )r   )r!   r"   r
   r
   r   r#   €   s    )r   Ú	__class__r   Ú
ListFields)r   ÚotherZ	my_fieldsZother_fieldsr
   r
   r   Ú__eq__w   s    

z_ExtensionDict.__eq__c             C   s
   | |k S )Nr
   )r   r&   r
   r
   r   Ú__ne__„   s    z_ExtensionDict.__ne__c             C   s    | j jƒ }dd„ |D ƒ}t|ƒS )Nc             S   s   g | ]}|d  j r|‘qS )r   )r   )r!   r"   r
   r
   r   r#   Š   s    z*_ExtensionDict.__len__.<locals>.<listcomp>)r   r%   Úlen)r   ÚfieldsZextension_fieldsr
   r
   r   Ú__len__‡   s    
z_ExtensionDict.__len__c             C   s   t dƒ‚d S )Nzunhashable object)Ú	TypeError)r   r
   r
   r   Ú__hash__�   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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   r,   r   r   ZGetTypeCheckerZ
CheckValuer   Z	_Modified)r   r	   ÚvalueÚtype_checkerr
   r
   r   Ú__setitem__”   s    

z_ExtensionDict.__setitem__c             C   s   | j j|ƒ d S )N)r   ZClearExtension)r   r	   r
   r
   r   Ú__delitem__©   s    z_ExtensionDict.__delitem__c             C   s   | 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   Z_extensions_by_namer   )r   Únamer
   r
   r   Ú_FindExtensionByName¬   s    	z#_ExtensionDict._FindExtensionByNamec             C   s   | 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   Z_extensions_by_numberr   )r   Únumberr
   r
   r   Ú_FindExtensionByNumber·   s    	z%_ExtensionDict._FindExtensionByNumberc             C   s   dd„ | j jƒ D ƒS )Nc             s   s    | ]}|d  j r|d  V  qdS )r   N)r   )r!   Úfr
   r
   r   ú	<genexpr>Ä   s    z*_ExtensionDict.__iter__.<locals>.<genexpr>)r   r%   )r   r
   r
   r   Ú__iter__Â   s    z_ExtensionDict.__iter__c             C   sf   t | j|ƒ || jjkrdS |jtjkr:t| jjj|ƒƒS |jtj	krb| jjj|ƒ}|d k	o`|j
S dS )NFT)r   r   r   r   r   r   Úboolr   r   r   Z_is_present_in_parent)r   r	   r.   r
   r
   r   Ú__contains__Ç   s    z_ExtensionDict.__contains__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r'   r(   r+   r-   r0   r1   r3   r5   r8   r:   r
   r
   r
   r   r   ?   s   )r   N)r>   Zgoogle.protobuf.internalr   Zgoogle.protobuf.descriptorr   r   Úobjectr   r
   r
   r
   r   Ú<module>    s   