B
    ¯8Ç]v  ã               @   sx   d dl mZ d dlZd dlZe ¡  d¡r<dd„ Zdd„ Zndd„ Zd	d„ ZG d
d„ de	ƒZ
G dd„ de	ƒZdd„ ZdS )é    )Úprint_functionNÚ3c             C   s   t | ƒS )N)Ústr)Úx© r   ú=X:\800139.EyeRIS\EyeRIS.Software\EyeRISConvert\xmlsettings.pyÚ
_to_string+   s    r   c             C   s>   |  ¡ }d dd„ | d¡D ƒ¡d }t| ddd |¡ d S )NÚ
c             S   s   g | ]}|  ¡ r|‘qS r   )Ústrip)Ú.0Úliner   r   r   ú
<listcomp>/   s    z_write_file.<locals>.<listcomp>ÚwtÚutf8)Úencoding)ÚtoprettyxmlÚjoinÚsplitÚopenÚwrite)ÚfpathÚdocÚtxtr   r   r   Ú_write_file-   s    r   c             C   s   t | ƒS )N)Úunicode)r   r   r   r   r   2   s    c             C   s@   |  ¡ }d dd„ | d¡D ƒ¡d }t| dƒ | d¡¡ d S )Nr	   c             S   s   g | ]}|  ¡ r|‘qS r   )r
   )r   r   r   r   r   r   6   s    z_write_file.<locals>.<listcomp>Úwbr   )r   r   r   r   r   Úencode)r   r   r   r   r   r   r   4   s    c               @   sD   e 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S )ÚXMLSettingsUncachedc             C   sZ   yt jj |¡| _W n$ tk
r8   t jj d¡| _Y nX | jjd j| _	|| _
d| _d S )Nz<root/>r   F)ÚxmlÚdomZminidomÚparser   ÚIOErrorÚparseStringÚ
childNodesÚnodeNameÚrootNoder   Úmodified)Úselfr   r   r   r   Ú__init__=   s    zXMLSettingsUncached.__init__c             K   s*   | j r&| d| j¡}t|| jƒ d| _ d S )Nr   F)r&   Úgetr   r   r   )r'   ÚkwArgsr   r   r   r   ÚsaveF   s    zXMLSettingsUncached.savec             K   s¸   | j d | d¡ }| dd¡}| j}xŒ| d¡D ]~}d}x"|jD ]}|j|krB|}d}P qBW |s2|sjd S |jr”|jd j| jjkr”| 	|jd ¡ | j 
d |¡}| |¡ |}q2W |S )Nú/Ú
createPathFTr   )r%   Úlstripr)   r   r   r#   r$   ÚnodeTypeÚ	TEXT_NODEÚremoveChildZcreateElementNSÚappendChild)r'   Úpathr*   r-   ÚnodeÚpÚokÚcr   r   r   Z
__get_nodeL   s&    

zXMLSettingsUncached.__get_nodec             C   sh   |   |t|ƒƒ ¡|krd S | j|dd}x|jrB| |jd ¡ q*W | j t|ƒ¡}| |¡ d| _	d S )NT)r-   éÿÿÿÿ)
r)   ÚtypeÚ_XMLSettingsUncached__get_noder#   r1   r   ZcreateTextNoder   r2   r&   )r'   r3   Úvaluer4   Úvr   r   r   Úputa   s    
zXMLSettingsUncached.putc             C   sD   |   ||t|ƒƒ ¡|krd S | j|dd}| |t|ƒ¡ d| _d S )NT)r-   )Úget_attributer9   r:   ZsetAttributer   r&   )r'   r3   Ú	attributer;   r4   r   r   r   Úput_attributel   s
    z!XMLSettingsUncached.put_attributec             C   sb   |   |¡}|r^t|jƒdkr^|jd j| jjkr^|d krNt|ƒ|jd jƒ}n|jd j}|S |S )Né   r   )r:   Úlenr#   r/   r   r0   r9   Z	nodeValue)r'   r3   ÚdefValuer4   Úar   r   r   r)   t   s    
"zXMLSettingsUncached.getc             C   sB   |   |¡}|r>| |¡}|r>|d kr4t|ƒ|jƒ}n|j}|S |S )N)r:   ZgetAttributeNoder9   r;   )r'   r3   r?   rC   r4   rD   r   r   r   r>      s    

z!XMLSettingsUncached.get_attributeN)
Ú__name__Ú
__module__Ú__qualname__r(   r+   r:   r=   r@   r)   r>   r   r   r   r   r   <   s   	r   c               @   s@   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zddd„ZdS )ÚXMLSettingsc             C   s   t |ƒ| _tƒ | _tƒ | _d S )N)r   r   ÚdictÚcacheÚacache)r'   r   r   r   r   r(      s    
zXMLSettings.__init__c             K   s   | j jf |ŽS )N)r   r+   )r'   r*   r   r   r   r+   “   s    zXMLSettings.savec             C   s0   | j  ||¡}| j ¡  | j ¡  || j|< |S )N)r   r=   rJ   ÚclearrK   )r'   r3   r;   Úrr   r   r   r=   •   s
    


zXMLSettings.putc             C   s6   | j  |||¡}| j ¡  | j ¡  || j||f< |S )N)r   r@   rJ   rL   rK   )r'   r3   r?   r;   rM   r   r   r   r@   ›   s
    

zXMLSettings.put_attributeÚ c             C   sT   | j  |d ¡}|d krP| j |d ¡}|d kr2|}n|d krFt|ƒ|ƒ}|| j |< |S )N)rJ   r)   r   r9   )r'   r3   rC   r   r   r   r   r)   ¡   s    
zXMLSettings.getc             C   s^   | j  ||fd ¡}|d krZ| j ||d ¡}|d kr8|}n"|d krLt|ƒ|ƒ}|| j ||f< |S )N)rK   r)   r   r9   )r'   r3   r?   rC   r   r   r   r   r>   ¬   s    zXMLSettings.get_attributeN)rN   )rN   )	rE   rF   rG   r(   r+   r=   r@   r)   r>   r   r   r   r   rH   Ž   s   
rH   c              C   sx   d  d¡} d  d¡}tdƒ}| dd¡ | dd¡ | d	d
¡ | d| ¡ | ¡  t| d	d¡ƒ t| d|¡ƒ d S )Ns   EspaÃƒar   ó    z
config.xmlzuserdata/unameZxadzuserdata/urlzhttp:/example.domain.comzuserdata/levelé    zuserdata/countryéd   )ÚdecoderH   r=   r+   Úprintr)   )ZcountryZunicodeDefaultr   r   r   r   Útest¹   s    

rT   )Ú
__future__r   Zxml.dom.minidomr   ÚplatformÚpython_versionÚ
startswithr   r   Úobjectr   rH   rT   r   r   r   r   Ú<module>"   s   
R+