o
    ßý°jŒ0  ã                   @   s°   d Z ddlmZ ddlmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZ dd	lmZmZmZmZmZmZ G d
d„ deƒZG dd„ deƒZG dd„ deƒZdS )Ú
é    )Úlinesepé   )Ú
MODIFY_ADDÚMODIFY_REPLACEÚMODIFY_DELETEÚSEQUENCE_TYPES)ÚLDAPCursorError)Úto_stdout_encodingé   )ÚSTATUS_PENDING_CHANGESÚSTATUS_VIRTUALÚSTATUS_READY_FOR_DELETIONÚSTATUS_READY_FOR_MOVINGÚSTATUS_READY_FOR_RENAMING)ÚlogÚlog_enabledÚERRORÚBASICÚPROTOCOLÚEXTENDEDc                   @   sd   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edd„ ƒZdS )Ú	Attributea  Attribute/values object, it includes the search result (after post_query transformation) of each attribute in an entry

    Attribute object is read only

    - values: contain the processed attribute values
    - raw_values': contain the unprocessed attribute values


    c                    sh   |j ˆ _ |ˆ _g ˆ _g ˆ _d ˆ _|ˆ _|ˆ _|jr$‡ fdd„|jjD ƒnd }|r/t	|ƒˆ _
d S d ˆ _
d S )Nc                    s"   g | ]}ˆ j  ¡ | ¡ kr|‘qS © )ÚkeyÚlower)Ú.0Úname©Úselfr   ú‹/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/ldap3/abstract/attribute.pyÚ
<listcomp>7   s   " z&Attribute.__init__.<locals>.<listcomp>)r   Ú
definitionÚvaluesÚ
raw_valuesÚresponseÚentryÚcursorÚoid_infor   ÚsetÚother_names)r   Úattr_defr%   r&   r)   r   r   r   Ú__init__/   s    zAttribute.__init__c                 C   s°   t | jƒdkrt| jƒd t| jd ƒ }|S t | jƒdkrKt| jƒd t| jd ƒ }dt | jƒd  }| jdd … D ]}|t| t|ƒ 7 }q<|S t| jƒd tdƒ }|S )Nr   ú: r   ú é   z
<no value>)Úlenr"   r
   r   r   ©r   ÚrÚfillerÚvaluer   r   r   Ú__repr__:   s   	øþzAttribute.__repr__c                 C   s&   t | jƒdkrt| jd ƒS t| jƒS )Nr   r   )r/   r"   r
   r   r   r   r   Ú__str__G   s   
zAttribute.__str__c                 C   s
   t | jƒS ©N©r/   r"   r   r   r   r   Ú__len__M   ó   
zAttribute.__len__c                 C   s
   | j  ¡ S r6   )r"   Ú__iter__r   r   r   r   r:   P   r9   zAttribute.__iter__c                 C   s
   | j | S r6   )r"   )r   Úitemr   r   r   Ú__getitem__S   r9   zAttribute.__getitem__c                 C   s   t | jƒ}d |d< |S )Nr&   )ÚdictÚ__dict__)r   Úcpyr   r   r   Ú__getstate__V   s   
zAttribute.__getstate__c                 C   s,   z| j |kr	W dS W d S  ty   Y dS w )NTF)r3   Ú	Exception©r   Úotherr   r   r   Ú__eq__[   s   
ÿÿzAttribute.__eq__c                 C   s
   | |k S r6   r   rB   r   r   r   Ú__ne__b   r9   zAttribute.__ne__c                 C   s(   | j sdS t| j ƒdkr| j d S | j S )zQ
        :return: The single value or a list of values of the attribute.
        Nr   r   )r"   r/   r   r   r   r   r3   e   s   zAttribute.valueN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r+   r4   r5   r8   r:   r<   r@   rD   rE   Úpropertyr3   r   r   r   r   r   $   s    
r   c                   @   s   e Zd ZdZdd„ ZdS )ÚOperationalAttributea1  Operational attribute/values object. Include the search result of an
    operational attribute in an entry

    OperationalAttribute object is read only

    - values: contains the processed attribute values
    - raw_values: contains the unprocessed attribute values

    It may not have an AttrDef

    c                 C   s¢   t | jƒdkrt| jƒd t| jd ƒ }|S t | jƒdkrMt| jƒd t| jd ƒ }dt | jƒd  }t| jdd … ƒD ]}|t| t|ƒ 7 }q>|S d}|S )Nr   z [OPERATIONAL]: r   r-   r.   Ú )r/   r"   r
   r   Úsortedr   r0   r   r   r   r4   }   s   	øþzOperationalAttribute.__repr__N)rF   rG   rH   rI   r4   r   r   r   r   rK   p   s    rK   c                   @   sn   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zedd„ ƒZedd„ ƒZdS )ÚWritableAttributec                 C   sÜ   dt | jƒd  }t | jƒdkrt| jƒd t| jd ƒ }n3t | jƒdkrIt| jƒd t| jd ƒ }| jdd … D ]}|t| t|ƒ 7 }q;n	t| jƒtdƒ }| jj| jjv rl|t| d t	| jj| jj ƒ 7 }|S )Nr-   r.   r   r,   r   z: <Virtual>z	CHANGES: )
r/   r   r"   r
   r   r!   r   r%   Ú_changesÚstr)r   r2   r1   r3   r   r   r   r4   Œ   s   ÿ$zWritableAttribute.__repr__c                 C   ó   |   |¡ tS r6   )ÚaddÚEllipsisrB   r   r   r   Ú__iadd__š   ó   
zWritableAttribute.__iadd__c                 C   rQ   r6   )ÚdeleterS   rB   r   r   r   Ú__isub__ž   rU   zWritableAttribute.__isub__Fc                 C   s|   | j r| j jr| j j}n| j}|| jjvs|rg | jj|< | jj|  |¡ ttƒr5ttd|| j| jj	ƒ | jj
 t¡ d S )Nz5updated changes <%r> for <%s> attribute in <%s> entry)r!   r   r   r%   rO   Úappendr   r   r   Úentry_dnÚ_stateÚ
set_statusr   )r   ÚchangesÚ
remove_oldr   r   r   r   Ú_update_changes¢   s   
z!WritableAttribute._update_changesc                 C   s*  t tƒrttd|| j| jjƒ | jjjtkr'd}t t	ƒr#tt	d|| ƒ t
|ƒ‚| jjtttfv rE| jjd }t t	ƒrAtt	d|| ƒ t
|ƒ‚|d u rZd}t t	ƒrVtt	d|| ƒ t
|ƒ‚|d ur„| j |¡}|du r~d|| jf }t t	ƒrztt	d|| ƒ t
|ƒ‚|dur„|}|  tt|tƒrŽ|n|gf¡ d S )	Nz)adding %r to <%s> attribute in <%s> entryz0cannot perform a modify operation in a new entryú%s for <%s>z - cannot add attributeszvalue to add cannot be NoneFú'value '%s' non valid for attribute '%s'T)r   r   r   r   r%   rY   rZ   Ú_initial_statusr   r   r	   Úentry_statusr   r   r   r!   Úvalidater^   r   Ú
isinstancer   ©r   r"   Úerror_messageÚ	validatedr   r   r   rR   ±   s6   "zWritableAttribute.addc                 C   sö   t tƒrttd|| j| jjƒ | jjttt	fv r-| jjd }t t
ƒr)tt
d|| ƒ t|ƒ‚|d u rBd}t t
ƒr>tt
d|| ƒ t|ƒ‚| j |¡}|du rbd|| jf }t t
ƒr^tt
d|| ƒ t|ƒ‚|durh|}| jtt|tƒrr|n|gfdd� d S )	Nz*setting %r to <%s> attribute in <%s> entryz - cannot set attributesr_   znew value cannot be NoneFr`   T)r]   )r   r   r   r   r%   rY   rb   r   r   r   r   r	   r!   rc   r^   r   rd   r   re   r   r   r   r(   Ï   s*   &zWritableAttribute.setc                 C   s  t tƒrttd|| j| jjƒ | jjjtkr'd}t t	ƒr#tt	d|| ƒ t
|ƒ‚| jjtttfv rE| jjd }t t	ƒrAtt	d|| ƒ t
|ƒ‚|d u rZd}t t	ƒrVtt	d|| ƒ t
|ƒ‚t|tƒsb|g}|D ] }|| jvr„d|d | j¡f }t t	ƒr€tt	d|| ƒ t
|ƒ‚qd|  t|f¡ d S )Nz-deleting %r from <%s> attribute in <%s> entryz/cannot delete an attribute value in a new entryr_   z - cannot delete attributeszvalue to delete cannot be Nonezvalue '%s' not present in '%s'z, )r   r   r   r   r%   rY   rZ   ra   r   r   r	   rb   r   r   r   rd   r   r"   Újoinr^   r   )r   r"   rf   Úsingle_valuer   r   r   rV   ç   s6   

üzWritableAttribute.deletec                 C   sœ   t tƒrttd| j| jjƒ | jjjtkr&d}t t	ƒr"tt	d|| ƒ t
|ƒ‚| jjtttfv rD| jjd }t t	ƒr@tt	d|| ƒ t
|ƒ‚|  tg fd¡ d S )Nz%removing <%s> attribute in <%s> entryz)cannot remove an attribute in a new entryr_   z - cannot remove attributesT)r   r   r   r   r%   rY   rZ   ra   r   r   r	   rb   r   r   r   r^   r   )r   rf   r   r   r   Úremove  s   zWritableAttribute.removec                 C   sL   t tƒrttd| j| jjƒ | jj| j= | jjs$| jj | jjj	¡ d S d S )Nz'discarding <%s> attribute in <%s> entry)
r   r   r   r   r%   rY   rO   rZ   r[   ra   r   r   r   r   Údiscard  s   ÿzWritableAttribute.discardc                 C   s   t | jƒrdS dS )NFTr7   r   r   r   r   Úvirtual  s   zWritableAttribute.virtualc                 C   s    | j | jjv r| jj| j  S d S r6   )r   r%   rO   r   r   r   r   r\     s   zWritableAttribute.changesN)F)rF   rG   rH   r4   rT   rW   r^   rR   r(   rV   rj   rk   rJ   rl   r\   r   r   r   r   rN   ‹   s    

rN   N)rI   Úosr   rL   r   r   r   r   Úcore.exceptionsr	   Ú
utils.reprr
   r   r   r   r   r   Ú	utils.logr   r   r   r   r   r   Úobjectr   rK   rN   r   r   r   r   Ú<module>   s     L