o
    p;»Z-  ã                   @   sh   d dl T d dlZdadadaddd„Zddd„Zddd	„Zddd„ZG dd„ de	ƒZ
G dd„ deƒZdS )é    )Ú*NFc                 C   ó   | a dS )zÌ
    When enabled, Container __str__ produces full content of bytes and unicode strings, otherwise and by default, it produces truncated output (16 bytes and 32 characters).

    :param enabled: bool
    N)ÚglobalPrintFullStrings©Úenabled© r   úJ/var/www/html/env/lib/python3.10/site-packages/construct/lib/containers.pyÚsetGlobalPrintFullStrings
   ó   r	   c                 C   r   )zÀ
    When enabled, Container __str__ that was produced by FlagsEnum parsing prints all values, otherwise and by default, it prints only the values that are True.

    :param enabled: bool
    N)ÚglobalPrintFalseFlagsr   r   r   r   ÚsetGlobalPrintFalseFlags   r
   r   c                 C   r   )z·
    When enabled, Container __str__ shows keys like _ _index _etc, otherwise and by default, it hides those keys. __repr__ never shows private entries.

    :param enabled: bool
    N)ÚglobalPrintPrivateEntriesr   r   r   r   ÚsetGlobalPrintPrivateEntries   r
   r   ú<recursion detected>Ú__recursion_lock__c                    s   ‡ ‡fdd„}|S )zUsed internally.c                    s   ‡ ‡‡fdd„}ˆ j |_ |S )Nc              	      sL   t | ˆdƒrˆS t| ˆdƒ zˆ | g|¢R i |¤ŽW t| ˆƒ S t| ˆƒ w )NFT)ÚgetattrÚsetattrÚdelattr)ÚselfÚargsÚkw)ÚfuncÚ	lock_nameÚretvalr   r   Úwrapper+   s   z2recursion_lock.<locals>.decorator.<locals>.wrapper)Ú__name__)r   r   ©r   r   )r   r   Ú	decorator*   s   	z!recursion_lock.<locals>.decoratorr   )r   r   r   r   r   r   Úrecursion_lock(   s   r   c                       sø   e Zd ZdZddg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eZdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ ZeZeZ‡ fd&d'„Zd(d)„ Zeƒ d*d+„ ƒZeƒ d,d-„ ƒZd.d/„ Zd0d1„ Zd2d3„ Z ‡  Z!S )4Ú	Containera�  
    Generic ordered dictionary that allows both key and attribute access, and preserves key order by insertion. Adding keys is preferred using \*\*entrieskw (requires Python 3.6). Equality does NOT check item order. Also provides regex searching.

    Example::

        # empty dict
        >>> Container()
        # list of pairs, not recommended
        >>> Container([ ("name","anonymous"), ("age",21) ])
        # This syntax requires Python 3.6
        >>> Container(name="anonymous", age=21)
        # This syntax is for internal use only
        >>> Container(name="anonymous")(age=21)
        # copies another dict
        >>> Container(dict2)
        >>> Container(container2)

    ::

        >>> print(repr(obj))
        Container(text='utf8 decoded string...')(value=123)
        >>> print(obj)
        Container
            text = u'utf8 decoded string...' (total 22)
            value = 123
    Ú__keys_order__r   c              
   C   s†   z7|| j v r3zt | |¡W W S  ty2 } z|dkr,g }t | d|¡ |W  Y d }~W S |‚d }~ww | | W S  tyB   t|ƒ‚w )Nr    )Ú	__slots__ÚobjectÚ__getattribute__ÚAttributeErrorÚ__setattr__ÚKeyError)r   ÚnameÚeÚrr   r   r   Ú__getattr__W   s    
€ú
ÿzContainer.__getattr__c                 C   s@   z|| j v rt | ||¡W S || |< W d S  ty   t|ƒ‚w ©N)r!   r"   r%   r&   r$   )r   r'   Úvaluer   r   r   r%   h   s   
ÿzContainer.__setattr__c                 C   s<   z|| j v rt | |¡W S | |= W d S  ty   t|ƒ‚w r+   )r!   r"   Ú__delattr__r&   r$   )r   r'   r   r   r   r-   q   s   
ÿzContainer.__delattr__c                 C   s&   || vr
| j  |¡ t | ||¡ d S r+   )r    ÚappendÚdictÚ__setitem__)r   Úkeyr,   r   r   r   r0   z   s   zContainer.__setitem__c                 C   s(   || v r| j  |¡ t | |¡ dS dS )z7Removes an item from the Container in linear time O(n).N)r    Úremover/   Ú__delitem__)r   r1   r   r   r   r3      s   þzContainer.__delitem__c                 O   sj   g | _ |D ] }t|tƒr| ¡ D ]\}}|| |< qq|D ]\}}|| |< qq| ¡ D ]\}}|| |< q*d S r+   )r    Ú
isinstancer/   Úitems)r   r   Ú	entrieskwÚargÚkÚvr   r   r   Ú__init__…   s   

ÿ
ÿ
ÿzContainer.__init__c                 K   s   |  ¡ D ]\}}|| |< q| S )z:Chains adding new entries to the same container. See ctor.)r5   )r   r6   r8   r9   r   r   r   Ú__call__‘   s   
zContainer.__call__c                 C   s
   t | jƒS r+   )Úiterr    ©r   r   r   r   Úkeys—   ó   
zContainer.keysc                    ó   ‡ fdd„ˆ j D ƒS )Nc                 3   s   � | ]}ˆ | V  qd S r+   r   ©Ú.0r8   r=   r   r   Ú	<genexpr>›   s   € z#Container.values.<locals>.<genexpr>©r    r=   r   r=   r   Úvaluesš   ó   zContainer.valuesc                    r@   )Nc                 3   s   � | ]	}|ˆ | fV  qd S r+   r   rA   r=   r   r   rC   ž   s   € z"Container.items.<locals>.<genexpr>rD   r=   r   r=   r   r5   �   rF   zContainer.itemsc                 C   s   t  | ¡ g | _dS )zRemoves all items.N)r/   Úclearr    r=   r   r   r   rG   ¢   s   

zContainer.clearc                 C   s   t  | |¡}| j |¡ |S )zLRemoves and returns the value for a given key, raises KeyError if not found.)r/   Úpopr    r2   )r   r1   Úvalr   r   r   rH   §   s   zContainer.popc                 C   s   | j  ¡ }t | |¡}||fS )z6Removes and returns the last key and value from order.)r    rH   r/   )r   r8   r9   r   r   r   Úpopitem­   s   
zContainer.popitemc                 C   s,   t |tƒr	| ¡ }|D ]\}}|| |< qdS )z<Appends items from another dict/Container or list-of-tuples.N)r4   r/   r5   )r   Ú	seqordictr8   r9   r   r   r   Úupdate³   s
   

ÿzContainer.updatec                 C   s   | j S r+   rD   r=   r   r   r   Ú__getstate__º   s   zContainer.__getstate__c                 C   s
   || _ d S r+   rD   )r   Ústater   r   r   Ú__setstate__½   r?   zContainer.__setstate__c                 C   s   t | ƒS r+   )r   r=   r   r   r   ÚcopyÀ   s   zContainer.copyc                    s&   t |  ¡ ƒt | jjƒ ttt| ƒƒ S )z<For auto completion of attributes based on container values.)Úlistr>   Ú	__class__Ú__dict__ÚdirÚsuperr   r=   ©rR   r   r   Ú__dir__Ç   s   &zContainer.__dir__c                 C   s€   | |u rdS t |tƒsdS dd„ }|  ¡ D ](\}}t |tƒr$| d¡r$qt |tƒr/| d¡r/q||vs:|||| ƒs= dS qdS )NTFc                 S   s4   | j jdks|j jdkrdd l}| | |¡S | |kS )NÚndarrayr   )rR   r   ÚnumpyÚarray_equal)Úv1Úv2rY   r   r   r   ÚisequalÐ   s   z!Container.__eq__.<locals>.isequalÚ_ó   _)r4   r/   r5   ÚunicodestringtypeÚ
startswithÚbytestringtype)r   Úotherr]   r8   r9   r   r   r   Ú__eq__Ë   s   
ÿzContainer.__eq__c                 C   sz   g }|   ¡ D ]/\}}t|tƒr| d¡rqt|tƒr(| t|ƒd t|ƒ ¡ q| t|ƒd t|ƒ ¡ qdd |¡ S )Nr^   ú=zContainer(%s)z, )	r5   r4   Ústrra   Ústringtypesr.   Ú
reprstringÚreprÚjoin)r   Úpartsr8   r9   r   r   r   Ú__repr__Þ   s   
zContainer.__repr__c                 C   s„  d}dg}t | ddƒ}|  ¡ D ]­\}}t|tƒr | d¡r ts q|r'|s'ts'q| |t|ƒdg¡ |jj	dkr@| 
d|f ¡ q|jj	d	krQ| 
d
||jf ¡ qt|tƒr€d}t|ƒ|ks`trn| 
dt|ƒt|ƒf ¡ q| 
dt|d |… ƒt|ƒf ¡ qt|tƒr¯d}t|ƒ|ks�tr�| 
dt|ƒt|ƒf ¡ q| 
dt|d |… ƒt|ƒf ¡ q| 
| t|ƒ d¡¡¡ qd |¡S )Nú
    zContainer: Ú
_flagsenumFr^   z = ÚEnumIntegerz(enum) (unknown) %sÚEnumIntegerStringz(enum) %s %sé   z%s (total %d)z%s... (truncated, total %d)é    Ú
Ú )r   r5   r4   rf   ra   r   r   ÚextendrR   r   r.   Úintvaluerb   Úlenr   rh   r`   rj   Úsplit)r   ÚindentationÚtextÚisflagsr8   r9   Úprintingcapr   r   r   Ú__str__ê   s2   
$
$
zContainer.__str__c                 C   sž   g }|   ¡ D ]B}z;t| | ttfƒr,| |  ||¡}|d ur+|r&| |¡ n|W   S n| |¡rB|r;| | | ¡ n| | W   S W q   Y q|rM|S d S r+   )r>   r4   r   ÚListContainerÚ_searchru   Úmatchr.   )r   Úcompiled_patternÚ
search_allr5   r1   Úretr   r   r   r   	  s(   
ü
€zContainer._searchc                 C   ó   t  |¡}|  |d¡S ©zE
        Searches a container (non-recursively) using regex.
        F©ÚreÚcompiler   ©r   Úpatternr�   r   r   r   Úsearch   ó   
zContainer.searchc                 C   r„   ©zA
        Searches a container (recursively) using regex.
        Tr†   r‰   r   r   r   r‚   '  rŒ   zContainer.search_all)"r   Ú
__module__Ú__qualname__Ú__doc__r!   r*   r%   r-   r0   r3   r:   r;   r>   rE   r5   Ú__iter__rG   rH   rJ   rL   rM   rO   rP   Ú
__update__Ú__copy__rW   rd   r   rl   r}   r   r‹   r‚   Ú__classcell__r   r   rV   r   r   :   s@    		

r   c                   @   sD   e Zd ZdZeƒ dd„ ƒZeƒ dd„ ƒZdd„ Zdd	„ Zd
d„ Z	dS )r~   a?  
    Generic container like list. Provides pretty-printing. Also provides regex searching.

    Example::

        >>> ListContainer()
        >>> ListContainer([1, 2, 3])

    ::

        >>> print(repr(obj))
        [1, 2, 3]
        >>> print(obj)
        ListContainer
            1
            2
            3
    c                 C   s   dt  | ¡f S )NzListContainer(%s))rQ   rl   r=   r   r   r   rl   C  s   zListContainer.__repr__c                 C   sF   d}dg}| D ]}|  |¡ t|ƒ d¡}|  | |¡¡ qd |¡S )Nrm   zListContainer: rs   rt   )r.   rf   rx   rj   )r   ry   rz   r8   Úlinesr   r   r   r}   G  s   

zListContainer.__str__c                 C   sV   g }| D ] }z|  ||¡}W n   Y q|d ur$|r | |¡ q|  S q|r)|S d S r+   )r   ru   )r   r�   r‚   r5   Úitemrƒ   r   r   r   r   Q  s   üzListContainer._searchc                 C   r„   r…   r†   r‰   r   r   r   r‹   b  rŒ   zListContainer.searchc                 C   r„   r�   r†   r‰   r   r   r   r‚   i  rŒ   zListContainer.search_allN)
r   rŽ   r�   r�   r   rl   r}   r   r‹   r‚   r   r   r   r   r~   /  s    

	r~   )F)r   r   )Úconstruct.lib.py3compatr‡   r   r   r   r	   r   r   r   r/   r   rQ   r~   r   r   r   r   Ú<module>   s    






 v