B
    ß%Q[†  ã               @   sš  d Z ddlZyddlmZ W n  ek
r<   ddlmZ Y nX 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 ddlmZmZ ddlmZmZmZ ddlmZmZ ddlmZmZm Z  ddl!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+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; G dd„ de<ƒZ=G dd„ de<ƒZ>G dd„ de>ƒZ?G dd„ de>ƒZ@dS )Ú
é    N)ÚOrderedDicté   )Úlinesep)ÚSTRING_TYPESÚSEQUENCE_TYPESÚ
MODIFY_ADDÚMODIFY_REPLACEé   )ÚWritableAttribute)Ú	ObjectDef)ÚAttrDef)ÚLDAPKeyErrorÚLDAPCursorError)Úcheck_json_dictÚformat_jsonÚprepare_for_stream)Úoperation_to_ldifÚadd_ldif_header)Úsafe_dnÚsafe_rdnÚto_dn)Úto_stdout_encoding)ÚCaseInsensitiveWithAliasDict)Úget_config_parameter)ÚSTATUS_VIRTUALÚSTATUS_WRITABLEÚSTATUS_PENDING_CHANGESÚSTATUS_COMMITTEDÚSTATUS_DELETEDÚSTATUS_INITÚSTATUS_READY_FOR_DELETIONÚSTATUS_READY_FOR_MOVINGÚSTATUS_READY_FOR_RENAMINGÚSTATUS_MANDATORY_MISSINGÚSTATUSESÚINITIAL_STATUSES)ÚRESULT_SUCCESS)ÚlogÚlog_enabledÚERRORÚBASICÚPROTOCOLÚEXTENDEDc               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú
EntryStatezTContains data on the status of the entry. Does not pollute the Entry __dict__.

    c             C   sb   || _ d | _d | _t| _tƒ | _tƒ | _d | _|| _	d | _
d | _tƒ | _|jrX|j| _nd | _d S )N)ÚdnÚ_initial_statusÚ_tor    Ústatusr   Ú
attributesZraw_attributesÚresponseÚcursorÚoriginÚ	read_timer   ÚchangesÚ
definition)Úselfr/   r5   © r;   úWC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6i93dh7p\ldap3\ldap3\abstract\entry.pyÚ__init__9   s    
zEntryState.__init__c             C   s  | j �r| jd k	�rdt| jƒ d | j| jkr:| jd nd | j d | jrX| j ¡ nd t }|dd t	| j
 ¡ ƒ¡ t 7 }|d| jjr d t	| jjƒ¡nd	 t 7 }|d
d t	| jj ¡ ƒ¡ t 7 }|d| jrÜdnd	 t 7 }|d| jrü| jjjnd	 t 7 }|S t | ¡S d S )NzDN: z - STATUS: z, Ú z - READ TIME: z<never>zattributes: zobject def: z<None>zattr defs: z
response: Zpresentzcursor: )Ú__dict__r/   r   r0   r2   r7   Ú	isoformatr   ÚjoinÚsortedr3   Úkeysr9   Ú_object_classÚ_attributesr4   r5   Ú	__class__Ú__name__ÚobjectÚ__repr__)r:   Úrr;   r;   r<   rI   J   s    N *" zEntryState.__repr__c             C   s   |   ¡ S )N)rI   )r:   r;   r;   r<   Ú__str__V   s    zEntryState.__str__c             C   sê   dd„ t dƒD ƒ}|tkrDdt|ƒ }ttƒr<ttd|| ƒ t|ƒ‚|tkrR|| _|| _	|t
krft| _|tkrtt| _| j	tks’| j	tkræ| jtkræxR| jjD ]F}| jj| jrœ| ¡ |krœ|| jksÐ| j| jrœ|| jkrœt| _	P qœW d S )Nc             S   s   g | ]}|  ¡ ‘qS r;   )Úlower)Ú.0Úvr;   r;   r<   ú
<listcomp>Z   s    z)EntryState.set_status.<locals>.<listcomp>Z*IGNORED_MANDATORY_ATTRIBUTES_IN_OBJECT_DEFzinvalid entry status z%s for <%s>)r   r%   Ústrr)   r*   r(   r   r&   r0   r2   r   r   r   r   r   r9   rE   Ú	mandatoryrL   r3   Úvirtualr8   r$   )r:   r2   Z/conf_ignored_mandatory_attributes_in_object_defÚerror_messageÚattrr;   r;   r<   Ú
set_statusY   s&     zEntryState.set_statusN)rG   Ú
__module__Ú__qualname__Ú__doc__r=   rI   rK   rU   r;   r;   r;   r<   r.   4   s
   r.   c               @   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dd„ Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZd d!„ Zed"d#„ ƒZed$d%„ ƒZed&d'„ ƒZed(d)„ ƒZed*d+„ ƒZd4d0d1„Zd5d2d3„Zd/S )6Ú	EntryBaseaz  The Entry object contains a single LDAP entry.
    Attributes can be accessed either by sequence, by assignment
    or as dictionary keys. Keys are not case sensitive.

    The Entry object is read only

    - The DN is retrieved by _dn
    - The cursor reference is in _cursor
    - Raw attributes values are retrieved with _raw_attributes and the _raw_attribute() methods
    c             C   s   t ||ƒ| jd< d S )NÚ_state)r.   r?   )r:   r/   r5   r;   r;   r<   r=   {   s    zEntryBase.__init__c             C   sÚ   | j rÌ| jd k	rÌdt| jƒ d | jj| jkr:| jjd nd | j d | jrX| j ¡ nd t }| jj	rÈx\t
| jj	ƒD ]L}| jj	| s¨t| jj	| dƒrx| jj	| jrx|dt| jj	| ƒ t 7 }qxW |S t | ¡S d S )	NzDN: z - STATUS: z, r>   z - READ TIME: z<never>r8   z    )r?   Úentry_dnr   rZ   r0   Úentry_statusÚentry_read_timer@   r   r3   rB   Úhasattrr8   ÚreprrH   rI   )r:   rJ   rT   r;   r;   r<   rI   ~   s    R, zEntryBase.__repr__c             C   s   |   ¡ S )N)rI   )r:   r;   r;   r<   rK   ‰   s    zEntryBase.__str__c             c   s$   x| j jD ]}| j j| V  q
W d S )N)rZ   r3   )r:   Ú	attributer;   r;   r<   Ú__iter__Œ   s    zEntryBase.__iter__c             C   s(   y|   |¡ dS  tk
r"   dS X d S )NTF)Ú__getitem__r   )r:   Úitemr;   r;   r<   Ú__contains__’   s
    
zEntryBase.__contains__c             C   s²  t |tƒ�rŠ|dkr| jd S d | ¡ ¡ ¡ }d }x&| jj ¡ D ]}|| ¡ krB|}P qBW |sˆx&| jj 	¡ D ]}|| ¡ krn|}P qnW |s¸x*| jj ¡ D ]}|d | ¡ krš|}P qšW |sèx*| jj 	¡ D ]}|d | ¡ krÊ|}P qÊW |�sx*| jj ¡ D ]}|d | ¡ krü|}P qüW |�sPx.| jj 	¡ D ]}|d | ¡ k�r.|}P �q.W |�s~d| }t
tƒ�rvttd|| ƒ t|ƒ‚| jj| S d}t
tƒ�r¦ttd|| ƒ t|ƒ‚d S )NrZ   r>   z;binaryz;rangezattribute '%s' not foundz%s for <%s>zattribute name must be a string)Ú
isinstancer   r?   rA   ÚsplitrL   rZ   r3   rC   Úaliasesr)   r*   r(   r   )r:   rc   Ú
attr_foundrT   rS   r;   r;   r<   Ú__getattr__™   sX    


zEntryBase.__getattr__c             C   s^   || j jkr4d| }ttƒr*ttd|| ƒ t|ƒ‚n&d| }ttƒrRttd|| ƒ t|ƒ‚d S )Nzattribute '%s' is read onlyz%s for <%s>z#entry is read only, cannot add '%s')rZ   r3   r)   r*   r(   r   )r:   rc   ÚvaluerS   r;   r;   r<   Ú__setattr__Ç   s    
zEntryBase.__setattr__c             C   s6  t |tƒ�rd | ¡ ¡ ¡ }d }x&| jj ¡ D ]}|| ¡ kr0|}P q0W |svx&| jj ¡ D ]}|| ¡ kr\|}P q\W |s¦x*| jj ¡ D ]}|d | ¡ krˆ|}P qˆW |sÖx*| jj ¡ D ]}|d | ¡ kr¸|}P q¸W |�sd| }t	t
ƒrútt
d|| ƒ t|ƒ‚| jj| S d}t	t
ƒ�r*tt
d|| ƒ t|ƒ‚d S )Nr>   z;binaryzkey '%s' not foundz%s for <%s>zkey must be a string)re   r   rA   rf   rL   rZ   r3   rC   rg   r)   r*   r(   r   )r:   rc   rh   rT   rS   r;   r;   r<   rb   Ó   s@    
zEntryBase.__getitem__c             C   s   t |tƒr| j|jkS dS )NF)re   rY   r[   )r:   Úotherr;   r;   r<   Ú__eq__ö   s    
zEntryBase.__eq__c             C   s   t |tƒr| j|jkS dS )NF)re   rY   r[   )r:   rl   r;   r;   r<   Ú__lt__ü   s    
zEntryBase.__lt__c             C   s   | j jS )N)rZ   r/   )r:   r;   r;   r<   r[     s    zEntryBase.entry_dnc             C   s   | j jS )N)rZ   r5   )r:   r;   r;   r<   Úentry_cursor  s    zEntryBase.entry_cursorc             C   s   | j jS )N)rZ   r2   )r:   r;   r;   r<   r\   
  s    zEntryBase.entry_statusc             C   s   | j jS )N)rZ   r9   )r:   r;   r;   r<   Úentry_definition  s    zEntryBase.entry_definitionc             C   s   | j jS )N)rZ   Úentry_raw_attributes)r:   r;   r;   r<   rq     s    zEntryBase.entry_raw_attributesc             C   s   || j jkr| j j| S dS )z�

        :param name: name of the attribute
        :return: raw (unencoded) value of the attribute, None if attribute is not found
        N)rZ   rq   )r:   Únamer;   r;   r<   Úentry_raw_attribute  s    zEntryBase.entry_raw_attributec                s   ‡ fdd„ˆ j jD ƒS )Nc                s   g | ]}ˆ j j| jr|‘qS r;   )rp   rE   rQ   )rM   r`   )r:   r;   r<   rO      s    z8EntryBase.entry_mandatory_attributes.<locals>.<listcomp>)rp   rE   )r:   r;   )r:   r<   Úentry_mandatory_attributes  s    z$EntryBase.entry_mandatory_attributesc             C   s   t | jj ¡ ƒS )N)ÚlistrZ   r3   rC   )r:   r;   r;   r<   Úentry_attributes"  s    zEntryBase.entry_attributesc             C   s   t dd„ | jj ¡ D ƒƒS )Nc             s   s   | ]\}}||j fV  qd S )N)Úvalues)rM   Zattribute_keyZattribute_valuer;   r;   r<   ú	<genexpr>(  s    z5EntryBase.entry_attributes_as_dict.<locals>.<genexpr>)ÚdictrZ   r3   Úitems)r:   r;   r;   r<   Úentry_attributes_as_dict&  s    z"EntryBase.entry_attributes_as_dictc             C   s   | j jS )N)rZ   r7   )r:   r;   r;   r<   r]   *  s    zEntryBase.entry_read_timec             C   s   | j jS )N)rZ   r8   )r:   r;   r;   r<   Ú_changes.  s    zEntryBase._changesFé   TNc       	   	      s®   t ƒ }ˆ j|d< |r@|s6t ‡ fdd„ˆ jD ƒƒ|d< n
ˆ j|d< |rt|sft ‡ fdd„ˆ jD ƒƒ|d< nt ˆ jƒ|d< ttkr„t|ƒ tj|d||dt	dd	�}|rª| 
|¡ |S )
Nr/   c             3   s&   | ]}ˆ j | r|ˆ j | fV  qd S )N)r{   )rM   Úkey)r:   r;   r<   rx   8  s    z*EntryBase.entry_to_json.<locals>.<genexpr>r3   c             3   s&   | ]}ˆ j | r|ˆ j | fV  qd S )N)rq   )rM   r~   )r:   r;   r<   rx   >  s    ÚrawT)ú,z: )Úensure_asciiÚ	sort_keysÚindentÚcheck_circularÚdefaultÚ
separators)ry   r[   r{   rq   rP   Úbytesr   ÚjsonÚdumpsr   Úwrite)	r:   r   rƒ   ÚsortÚstreamZchecked_attributesZinclude_emptyZ
json_entryZjson_outputr;   )r:   r<   Úentry_to_json2  s,    


zEntryBase.entry_to_jsonc             C   s~   t d| jjg||d�}t|ƒ}|p$t}| |¡}|rz| ¡ dkrdtdgƒd }| t|| | ƒ¡ | t|| | ƒ¡ |S )NZsearchResponse)Ú
sort_orderr   ú-)	r   rZ   r4   r   r   rA   ÚtellrŠ   r   )r:   Z
all_base64Zline_separatorrŽ   rŒ   Z
ldif_linesZldif_outputÚheaderr;   r;   r<   Úentry_to_ldifR  s    
zEntryBase.entry_to_ldif)Fr}   TNTT)FNNN)rG   rV   rW   rX   r=   rI   rK   ra   rd   ri   rk   rb   rm   rn   Úpropertyr[   ro   r\   rp   rq   rs   rt   rv   r{   r]   r|   r�   r’   r;   r;   r;   r<   rY   o   s0   
.#
 rY   c               @   s   e Zd ZdZddd„ZdS )ÚEntrya‚  The Entry object contains a single LDAP entry.
    Attributes can be accessed either by sequence, by assignment
    or as dictionary keys. Keys are not case sensitive.

    The Entry object is read only

    - The DN is retrieved by _dn()
    - The Reader reference is in _cursor()
    - Raw attributes values are retrieved by the _ra_attributes and
      _raw_attribute() methods

    Nc             C   s¸  | j js*d}ttƒr"ttd|| ƒ t|ƒ‚|d krp| j jjr`| jj}| jj	t
|tƒrX|ng  }nd| krp| jj}|s–d}ttƒrŽttd|| ƒ t|ƒ‚t
|tƒs²t|| j j||ƒ}|�rt
|tƒrÈ|g}t
|tƒ�rxH|D ]:}||jkrÚd||f }ttƒ�rttd|| ƒ t|ƒ‚qÚW ng }|�s@ddlm} || j j|ƒ}	n|}	|�rd|	 | jt|ƒ| j ¡}
n$|	 | jj¡}
|	j |
¡ | j|
j_| |
j_�x|
jjjjD �]}|
jjjj| }||j k�r ||
jj!k�r |
jj|j  }t"|j ||j#|j$|j%|j&|j'|j(|j)|j*|j+d�}|
j}||8 }||7 }t,||
|	ƒ}|j |
jj!k�rŠ|
jj!|j  j+|_+|
jj!|j  j-|_-|
jj!|j  j|_|
jj!|j  j|_||
jj!|< |
jj!|j = �q W |
j .t/¡ |
S )	Nz2schema must be available to make an entry writablez%s for <%s>Úobjectclassz8object class must be specified to make an entry writablez%attribute '%s' not in schema for '%s'r
   )ÚWriter)
r~   ÚvalidateÚ	pre_queryÚ
post_queryr…   Údereference_dnÚdescriptionrQ   Úsingle_valueÚalias)0ro   Úschemar)   r*   r(   r   r9   rD   rp   Ú_auxiliary_classre   r   r•   rw   r   r   rE   r5   r–   Ú
connectionZ_refresh_objectr[   ru   rv   Ú_create_entryrZ   r4   ÚentriesÚappendr]   r7   r6   rr   r3   r   r—   r˜   r™   r…   rš   r›   rQ   rœ   Zother_namesr   Z
raw_valuesrU   r   )r:   Z
object_defZwriter_cursorr3   Zcustom_validatorZauxiliary_classrS   r`   r–   Zwritable_cursorZwritable_entryrT   Zoriginal_attrZold_attr_defZnew_attr_defÚnew_attrr;   r;   r<   Úentry_writablel  s†    







zEntry.entry_writable)NNNNN)rG   rV   rW   rX   r¥   r;   r;   r;   r<   r”   _  s   r”   c               @   sp   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZddd„Zdd„ Z	dd„ Z
ddd„Zdd„ Zdd„ Zedd„ ƒZd
S )ÚWritableEntryc             C   s   |t k	r|  ||¡ d S )N)ÚEllipsisrk   )r:   r~   rj   r;   r;   r<   Ú__setitem__Á  s    zWritableEntry.__setitem__c             C   sÈ   dd„ t dƒD ƒ}|dkr2t|tƒr2|| jd< d S |tk	rÄ|| jjjksT| ¡ |krž|| j	j
krŠt| jjj| | | jd�}|| j	j
t|ƒ< | j	j
|  |¡ n&d| }ttƒr¼ttd|| ƒ t|ƒ‚d S )Nc             S   s   g | ]}|  ¡ ‘qS r;   )rL   )rM   rN   r;   r;   r<   rO   Æ  s    z-WritableEntry.__setattr__.<locals>.<listcomp>Z#ATTRIBUTES_EXCLUDED_FROM_OBJECT_DEFrZ   )r5   zattribute '%s' not definedz%s for <%s>)r   re   r.   r?   r§   ro   r9   rE   rL   rZ   r3   r   rP   Úsetr)   r*   r(   r   )r:   rc   rj   Z(conf_attributes_excluded_from_object_defZnew_attributerS   r;   r;   r<   rk   Å  s    
zWritableEntry.__setattr__c             C   s  t |tƒrö|dkr| jd S d | ¡ ¡ ¡ }x,| jj ¡ D ]}|| ¡ kr<| jj| S q<W x,| jj 	¡ D ]}|| ¡ krj| jj| S qjW || j
jkrÎt| j
j| | | jƒ| jj|< | jj |¡ | jj| S d| }ttƒrìttd|| ƒ t|ƒ‚n$d}ttƒ�rttd|| ƒ t|ƒ‚d S )NrZ   r>   zattribute '%s' not definedz%s for <%s>zattribute name must be a string)re   r   r?   rA   rf   rL   rZ   r3   rC   rg   rp   rE   r   ro   Úaddr)   r*   r(   r   )r:   rc   rT   rS   r;   r;   r<   ri   Ø  s,    



zWritableEntry.__getattr__c                s   ‡ fdd„ˆ j D ƒS )Nc                s   g | ]}ˆ | j r|‘qS r;   )rR   )rM   rT   )r:   r;   r<   rO   ó  s    z:WritableEntry.entry_virtual_attributes.<locals>.<listcomp>)rv   )r:   r;   )r:   r<   Úentry_virtual_attributesñ  s    z&WritableEntry.entry_virtual_attributesTNc             C   s’  |r| j  ¡  | jtk�r | j j | j|¡}| j jjjsR| j jj	|dd�\}}}n| j jj
}| j jj}| j jj}| j  |||¡ |d tk�r| j}| jjrð| j jj| jjj jjkrð| jjj }| jjj ¡  t||ƒ| jjjd< | jjj t¡ | j }| j ¡  t||ƒ| _| j t¡ dS dS | jtk�r8| j jj| jd t| jƒ¡| jjd�}| j jjj�sz| j jj	|dd�\}}}n| j jj
}| j jj}| j jj}| j  |||¡ |d tk�r4td t| jƒ¡d | jj ƒ| j_|�r|  ¡ �r| jj�r| j jj| jjj jjk�r| j| jjj_| j t¡ d | j_dS dS | jt k�rNd t| jjƒ¡}	| j j | j|	¡}| j jjj�s�| j jj	|dd�\}}}n| j jj
}| j jj}| j jj}| j  |||¡ |d tk�rJ|	d d t!| jƒd	d … ¡ | j_|�r2|  ¡ �r2| jj�r2| j jj| jjj jjk�r2| j| jjj_| j t¡ d | j_dS dS | jt"t#gk�règ }
xL| j$D ]B}|| jj%k�sŒ| jj%| j&�rj|| j'k�rj|
 (d
| d
 ¡ �qjW dd |
¡| jf }t)t*ƒ�rÜt+t*d|| ƒ t,|ƒ‚�n¦| jt-k�rŽ| j'�rŽ| j.j/�rªx¢| j'D ]˜}| j j0j1| j2| j j0j1| j3 }xp| j4D ]}||k�r:P �q:W xR| j.j/D ]F}||k�rZ| jj5t"k�r�| j'd d d	  (|¡ n|  j4|7  _4�qZW �qW | jj5t"k�rþt6ƒ }x&| j'D ]}| j'| d d	 ||< �qÆW | j j 7| jd ||¡}n| j j 8| j| j'|¡}| j jjj�s<| j jj	|dd�\}}}n| j jj
}| j jj}| j jj}| j  |||¡ |d tk�rŽ|�rv|  ¡ �r~| jj�r~| j jj| jjj jjk�r~xP| D ]H}|j9| j.j:k�r²|j9| jjj.j:k�r²| jjj j; <| j j;j:|j9 ¡ �q²W | jjj  =| jj
¡}| jjj ¡  |j| jjjd< x4| D ],}|j&�s6| jjjj%|j9 | jjj|j9< �q6W | j>| jjj_?n|  @¡  | j t¡ dS dS )NT)Úget_requestÚresultrZ   Fú+)Znew_superiorr€   r
   ú'z+mandatory attributes %s missing in entry %sz, z%s for <%s>ZobjectClassr   )Aro   Z_reset_historyr\   r!   r    Údeleter[   ZstrategyZsyncZget_responser4   r­   ÚrequestZ_store_operation_in_historyr'   rZ   r6   Úserverr?   Úclearr.   rU   r   r"   Z	modify_dnrA   r   r1   r   r/   Úentry_refreshr   r#   r   r   r$   rt   r3   rR   r|   r£   r)   r*   r(   r   r   rp   rŸ   rž   Zattribute_typesZmandatory_inZoptional_inr•   r0   ry   rª   Úmodifyr~   rE   r9   Zadd_attributer¡   r]   r7   Úentry_discard_changes)r:   ZrefreshÚcontrolsZclear_historyr­   r4   r±   r/   r5   ZrdnZmissing_attributesrT   rS   Zattr_classesZobject_classZ	aux_classZnew_attributesZ
temp_entryr;   r;   r<   Úentry_commit_changesõ  sà    



 

&


$
$


$
$*

 





$
$$
$z"WritableEntry.entry_commit_changesc             C   s   | j  ¡  | j | jj¡ d S )N)r|   r³   rZ   rU   r0   )r:   r;   r;   r<   r¶   t  s    
z#WritableEntry.entry_discard_changesc             C   sH   | j tttgkr8d| j  }ttƒr0ttd|| ƒ t|ƒ‚| j 	t¡ d S )Nz%cannot delete entry, invalid status: z%s for <%s>)
r\   r   r   r!   r)   r*   r(   r   rZ   rU   )r:   rS   r;   r;   r<   Úentry_deletex  s    
zWritableEntry.entry_deleter}   r   c             C   s    | j jr| j  | ||¡rdS dS )z;

        Refreshes the entry from the LDAP Server
        TF)ro   r    Zrefresh_entry)r:   ÚtriesÚsecondsr;   r;   r<   r´   €  s    zWritableEntry.entry_refreshc             C   sT   | j tttgkr8d| j  }ttƒr0ttd|| ƒ t|ƒ‚t|ƒ| j	_
| j	 t¡ d S )Nz#cannot move entry, invalid status: z%s for <%s>)r\   r   r   r"   r)   r*   r(   r   r   rZ   r1   rU   )r:   Zdestination_dnrS   r;   r;   r<   Ú
entry_move‹  s    
zWritableEntry.entry_movec             C   sP   | j tttgkr8d| j  }ttƒr0ttd|| ƒ t|ƒ‚|| j_	| j 
t¡ d S )Nz%cannot rename entry, invalid status: z%s for <%s>)r\   r   r   r#   r)   r*   r(   r   rZ   r1   rU   )r:   Únew_namerS   r;   r;   r<   Úentry_rename”  s    
zWritableEntry.entry_renamec             C   s   | j S )N)r|   )r:   r;   r;   r<   Úentry_changes�  s    zWritableEntry.entry_changes)TNT)r}   r   )rG   rV   rW   r¨   rk   ri   r“   r«   r¸   r¶   r¹   r´   r¼   r¾   r¿   r;   r;   r;   r<   r¦   À  s   

		r¦   )ArX   rˆ   Úcollectionsr   ÚImportErrorZutils.ordDictÚosr   r>   r   r   r   r	   r`   r   Z	objectDefr   ZattrDefr   Zcore.exceptionsr   r   Z
utils.convr   r   r   Zprotocol.rfc2849r   r   Zutils.dnr   r   r   Z
utils.reprr   Zutils.ciDictr   Zutils.configr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   Zcore.resultsr'   Z	utils.logr(   r)   r*   r+   r,   r-   rH   r.   rY   r”   r¦   r;   r;   r;   r<   Ú<module>   s2   8 ; qa