o
    üÞhå  ã                   @   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r3t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_nameÚcontaining_typeÚ
DESCRIPTOR)ÚmessageÚextension_handle© r   úg/var/www/html/premium_crap/venv/lib/python3.10/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)ÚselfÚextended_messager   r   r   Ú__init__0   s   
z_ExtensionDict.__init__c                 C   sÚ   t | j|ƒ | jj |¡}|dur|S |jr| | j¡}nF|jtjkr`|j	}t
|dƒs6ddlm} | |¡ t
|j	dƒsHddlm} | |j	¡ |j	 ¡ }z	| | jj¡ W n ty_   Y nw |jS | jj ||¡}|S )z8Returns the current value of the given extension handle.NÚ_concrete_classr   )Úmessage_factory)r   r   Ú_fieldsÚgetÚis_repeatedÚ_default_constructorÚcpp_typer   ÚCPPTYPE_MESSAGEÚmessage_typeÚhasattrÚgoogle.protobufr   ÚGetMessageClassr   Ú_SetListenerÚ_listener_for_childrenÚReferenceErrorÚdefault_valueÚ
setdefault)r   r   Úresultr   r   r   r   r   Ú__getitem__7   s2   


ÿÿz_ExtensionDict.__getitem__c                 C   sH   t || jƒsdS | j ¡ }|j ¡ }dd„ |D ƒ}dd„ |D ƒ}||kS )NFc                 S   ó   g | ]}|j r|‘qS r   ©r   ©Ú.0Úfieldr   r   r   Ú
<listcomp>h   ó    z)_ExtensionDict.__eq__.<locals>.<listcomp>c                 S   r'   r   r(   r)   r   r   r   r,   i   r-   )r   Ú	__class__r   Ú
ListFields)r   ÚotherÚ	my_fieldsÚother_fieldsr   r   r   Ú__eq__`   s   

z_ExtensionDict.__eq__c                 C   s
   | |k S ©Nr   )r   r0   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   s    z*_ExtensionDict.__len__.<locals>.<listcomp>)r   r/   Úlen)r   ÚfieldsÚextension_fieldsr   r   r   Ú__len__p   s   
z_ExtensionDict.__len__c                 C   s   t dƒ‚)Nzunhashable object)Ú	TypeError©r   r   r   r   Ú__hash__v   s   z_ExtensionDict.__hash__c                 C   sV   t | j|ƒ |js|jtjkrt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:   r   r   ÚGetTypeCheckerÚ
CheckValuer   Ú	_Modified)r   r   ÚvalueÚtype_checkerr   r   r   Ú__setitem__}   s   ÿÿ

ÿz_ExtensionDict.__setitem__c                 C   s   | j  |¡ d S r4   )r   ÚClearExtension)r   r   r   r   r   Ú__delitem__’   s   z_ExtensionDict.__delitem__c                 C   ó"   | 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ÚpoolÚ_extensions_by_namer   )r   ÚnameÚ
descriptorÚ
extensionsr   r   r   Ú_FindExtensionByName•   ó   	z#_ExtensionDict._FindExtensionByNamec                 C   rE   )zœTries to find a known extension with the field number.

    Args:
      number: Extension field number.

    Returns:
      Extension field descriptor.
    N)r   r	   rF   rG   Ú_extensions_by_numberr   )r   ÚnumberrJ   rK   r   r   r   Ú_FindExtensionByNumber¢   rM   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/   r;   r   r   r   Ú__iter__¯   s   z_ExtensionDict.__iter__c                 C   s`   t | j|ƒ || jjvrdS |jrt| jj |¡ƒS |jtjkr.| jj |¡}|d uo-|j	S dS )NFT)
r   r   r   r   Úboolr   r   r   r   Ú_is_present_in_parent)r   r   r@   r   r   r   Ú__contains__´   s   z_ExtensionDict.__contains__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   r3   r5   r9   r<   rB   rD   rL   rP   rS   rV   r   r   r   r   r   (   s    )r   N)rZ   Úgoogle.protobuf.internalr   Úgoogle.protobuf.descriptorr   r   Úobjectr   r   r   r   r   Ú<module>   s
   