B
    ß%Q[61  ã               @   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               @   s\   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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                sb   |j ˆ _ |ˆ _g ˆ _g ˆ _d ˆ _|ˆ _|ˆ _|jrH‡ fdd„|jjD ƒnd }|rXt	|ƒnd ˆ _
d S )Nc                s"   g | ]}ˆ j  ¡ | ¡ kr|‘qS © )ÚkeyÚlower)Ú.0Úname)Úselfr   ú[C:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6i93dh7p\ldap3\ldap3\abstract\attribute.pyú
<listcomp>7   s    z&Attribute.__init__.<locals>.<listcomp>)r   Ú
definitionÚvaluesZ
raw_valuesÚresponseÚentryÚcursorZoid_infor   ÚsetÚother_names)r   Z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 ƒ }n€t | jƒdkr–t| jƒd t| jd ƒ }dt | jƒd  }xB| jdd … D ]}|t| t|ƒ 7 }qxW nt| jƒd tdƒ }|S )Nr   z: 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 d 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   s    zAttribute.__len__c             C   s
   | j  ¡ S )N)r!   Ú__iter__)r   r   r   r   r1   P   s    zAttribute.__iter__c             C   s
   | j | S )N)r!   )r   Úitemr   r   r   Ú__getitem__S   s    zAttribute.__getitem__c             C   s,   y| j |krdS W n tk
r&   dS X d S )NTF)r-   Ú	Exception)r   Úotherr   r   r   Ú__eq__V   s
    
zAttribute.__eq__c             C   s
   | |k S )Nr   )r   r5   r   r   r   Ú__ne__]   s    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   r-   `   s    zAttribute.valueN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r.   r/   r0   r1   r3   r6   r7   Úpropertyr-   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 ƒ }nrt | jƒdkršt| jƒd t| jd ƒ }dt | jƒd  }x4t| jdd … ƒD ]}|t| t|ƒ 7 }q|W nd}|S )Nr   z [OPERATIONAL]: r   r(   r)   Ú )r*   r!   r
   r   Úsortedr   )r   r+   r,   r-   r   r   r   r.   x   s    zOperationalAttribute.__repr__N)r8   r9   r:   r;   r.   r   r   r   r   r=   k   s   r=   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 ƒ }njt | jƒdkr–t| jƒd t| jd ƒ }x>| jdd … D ]}|t| t|ƒ 7 }qxW nt| jƒtdƒ }| jj| jjkrÜ|t| d t	| jj| jj ƒ 7 }|S )Nr(   r)   r   z: r   z: <Virtual>z	CHANGES: )
r*   r   r!   r
   r   r    r   r#   Ú_changesÚstr)r   r,   r+   r-   r   r   r   r.   ‡   s    $zWritableAttribute.__repr__c             C   s   |   |¡ tS )N)ÚaddÚEllipsis)r   r5   r   r   r   Ú__iadd__•   s    
zWritableAttribute.__iadd__c             C   s   |   |¡ tS )N)ÚdeleterD   )r   r5   r   r   r   Ú__isub__™   s    
zWritableAttribute.__isub__Fc             C   s|   | j r| j jr| j j}n| j}|| jjks.|r:g | jj|< | jj|  |¡ ttƒrjttd|| j| jj	ƒ | jj
 t¡ d S )Nz5updated changes <%r> for <%s> attribute in <%s> entry)r    r   r   r#   rA   Úappendr   r   r   Úentry_dnÚ_stateÚ
set_statusr   )r   ÚchangesÚ
remove_oldr   r   r   r   Ú_update_changes�   s    
z!WritableAttribute._update_changesc             C   s4  t tƒrttd|| j| jjƒ | jjjtkrNd}t t	ƒrFtt	d|| ƒ t
|ƒ‚| jjtttgkrŠ| jjd }t t	ƒr‚tt	d|| ƒ t
|ƒ‚|d kr´d}t t	ƒr¬tt	d|| ƒ t
|ƒ‚|d k	�r| j |¡}|dk�rd|| jf }t t	ƒrøtt	d|| ƒ t
|ƒ‚n|dk	�r|}|  tt|tƒ�r&|n|gf¡ d S )	Nz)adding %r to <%s> attribute in <%s> entryz,cannot add an attribute value in a new entryz%s for <%s>z - cannot add attributeszvalue to add cannot be NoneFz'value '%s' non valid for attribute '%s'T)r   r   r   r   r#   rI   rJ   Ú_initial_statusr   r   r	   Úentry_statusr   r   r   r    ÚvalidaterN   r   Ú
isinstancer   )r   r!   Úerror_messageÚ	validatedr   r   r   rC   ¬   s6    



zWritableAttribute.addc             C   sø   t tƒrttd|| j| jjƒ | jjttt	gkrZ| jjd }t t
ƒrRtt
d|| ƒ t|ƒ‚|d kr„d}t t
ƒr|tt
d|| ƒ t|ƒ‚| j |¡}|dkrÆd|| jf }t t
ƒr¼tt
d|| ƒ t|ƒ‚n|dk	rÒ|}| jtt|tƒræ|n|gfdd� d S )	Nz*setting %r to <%s> attribute in <%s> entryz - cannot set attributesz%s for <%s>znew value cannot be NoneFz'value '%s' non valid for attribute '%s'T)rM   )r   r   r   r   r#   rI   rP   r   r   r   r   r	   r    rQ   rN   r   rR   r   )r   r!   rS   rT   r   r   r   r%   Ê   s*    
zWritableAttribute.setc             C   s"  t tƒrttd|| j| jjƒ | jjjtkrNd}t t	ƒrFtt	d|| ƒ t
|ƒ‚| jjtttgkrŠ| jjd }t t	ƒr‚tt	d|| ƒ t
|ƒ‚|d kr´d}t t	ƒr¬tt	d|| ƒ t
|ƒ‚t|tƒsÄ|g}xJ|D ]B}|| jkrÊd|d | j¡f }t t	ƒ�rtt	d|| ƒ t
|ƒ‚qÊW |  t|f¡ d S )Nz-deleting %r from <%s> attribute in <%s> entryz/cannot delete an attribute value in a new entryz%s for <%s>z - cannot delete attributeszvalue to delete cannot be Nonezvalue '%s' not present in '%s'z, )r   r   r   r   r#   rI   rJ   rO   r   r   r	   rP   r   r   r   rR   r   r!   ÚjoinrN   r   )r   r!   rS   Zsingle_valuer   r   r   rF   â   s4    



zWritableAttribute.deletec             C   sœ   t tƒrttd| j| jjƒ | jjjtkrLd}t t	ƒrDtt	d|| ƒ t
|ƒ‚| jjtttgkrˆ| 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 entryz%s for <%s>z - cannot remove attributesT)r   r   r   r   r#   rI   rJ   rO   r   r   r	   rP   r   r   r   rN   r   )r   rS   r   r   r   Úremoveÿ   s    zWritableAttribute.removec             C   sH   t tƒrttd| j| jjƒ | jj| j= | jjsD| jj | jjj	¡ d S )Nz'discarding <%s> attribute in <%s> entry)
r   r   r   r   r#   rI   rA   rJ   rK   rO   )r   r   r   r   Údiscard  s
    zWritableAttribute.discardc             C   s   t | jƒrdS dS )NFT)r*   r!   )r   r   r   r   Úvirtual  s    zWritableAttribute.virtualc             C   s    | j | jjkr| jj| j  S d S )N)r   r#   rA   )r   r   r   r   rL     s    zWritableAttribute.changesN)F)r8   r9   r:   r.   rE   rG   rN   rC   r%   rF   rV   rW   r<   rX   rL   r   r   r   r   r@   †   s   
r@   N)r;   Úosr   r>   r   r   r   r   Zcore.exceptionsr	   Z
utils.reprr
   r   r   r   r   r   Z	utils.logr   r   r   r   r   r   Úobjectr   r=   r@   r   r   r   r   Ú<module>   s    G