o
    j0                     @   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rd|d| jf }t t	rt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