o
    ïT·j^  ã                   @   s8   d Z ddlmZ ddlmZ dd„ ZG dd„ deƒZdS )	z6Contains _ExtensionDict class to represent extensions.é    )ÚFieldDescriptor)Útype_checkersc                 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   új/home/dinkstrade/pdmp-scanner/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 )zXArgs:

    extended_message: Message instance for which we are the Extensions dict.
    N)Ú_extended_message)ÚselfÚextended_messager   r   r   Ú__init__3   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rk| ¡  | 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Ú_frozenÚ
_SetFrozenÚ
setdefault)r   r   Úresultr   r   r   r   r   Ú__getitem__:   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>n   ó    z)_ExtensionDict.__eq__.<locals>.<listcomp>c                 S   r)   r   r*   r+   r   r   r   r.   o   r/   )r   Ú	__class__r   Ú
ListFields)r   ÚotherÚ	my_fieldsÚother_fieldsr   r   r   Ú__eq__f   s   

z_ExtensionDict.__eq__c                 C   s
   | |k S ©Nr   )r   r2   r   r   r   Ú__ne__s   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.   y   s    z*_ExtensionDict.__len__.<locals>.<listcomp>)r   r1   Úlen)r   ÚfieldsÚextension_fieldsr   r   r   Ú__len__v   s   
z_ExtensionDict.__len__c                 C   s   t dƒ‚)Nzunhashable object)Ú	TypeError©r   r   r   r   Ú__hash__|   s   z_ExtensionDict.__hash__c                 C   s`   t | j|ƒ | j ¡  |js|jtjkrtd|j ƒ‚t	 
|¡}| |¡| jj|< | j ¡  dS )zmIf 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   Ú_AssureWritabler   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 r6   )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   rH   )zœTries to find a known extension with the field number.

    Args:
      number: Extension field number.

    Returns:
      Extension field descriptor.
    N)r   r	   rI   rJ   Ú_extensions_by_numberr   )r   ÚnumberrM   rN   r   r   r   Ú_FindExtensionByNumber°   rP   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   r1   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   rC   r   r   r   Ú__contains__Ã   s   z_ExtensionDict.__contains__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r(   r5   r7   r;   r>   rE   rG   rO   rS   rV   rY   r   r   r   r   r   ,   s    ,r   N)r]   Úgoogle.protobuf.descriptorr   Úgoogle.protobuf.internalr   r   Úobjectr   r   r   r   r   Ú<module>   s
   