a
    WaF                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlmZ d dl	m
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)Element
SubElement)ConfigParser)StringIO)GPParserENTITY_USER_IDc                   @   sP   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S )GPIniParserNc                 C   s2   t tjd| _t| j_| jt|| j	 d S )NZ	dict_type)
r   collectionsOrderedDictini_confstroptionxformreadfpr   decodeencodingselfcontents r   7/usr/lib/python3/dist-packages/samba/gp_parse/gp_ini.pyparse#   s    zGPIniParser.parsec                 C   s.   t |d}t |d}t |d}||_||_|S )N	ParameterKeyValue)r   text)r   section_xmlsectionkey_inival_inichildkeyvaluer   r   r   build_xml_parameter*   s    


zGPIniParser.build_xml_parameterc                 C   s<   | dj}| dj}|d u r$d}| j||| ||fS )Nr   r    )findr   r   set)r   	param_xmlr   r!   r"   r   r   r   load_xml_parameter3   s    zGPIniParser.load_xml_parameterc                 C   s   t |d}||jd< |S )NSectionname)r   attrib)r   root_xmlsec_inir   r   r   r   build_xml_section<   s    

zGPIniParser.build_xml_sectionc                 C   s   |j d }| j| |S )Nr*   r+   r   Zadd_section)r   r   section_namer   r   r   load_xml_sectionB   s    
zGPIniParser.load_xml_sectionc              	   C   s   t |dj}td}| j D ]:}| ||}| jj|ddD ]\}}| |||| q>q| || W d    n1 sz0    Y  d S )NwbZIniFileT)raw)openr   r   Zsectionsr.   itemsr#   Zwrite_pretty_xml)r   filenamefrootr-   r   r   r   r   r   r   	write_xmlH   s    
zGPIniParser.write_xmlc                 C   sP   t tjd| _t| j_|dD ]*}| |}|dD ]}| || q8q d S )Nr	   r)   r   )	r   r
   r   r   r   r   findallr1   r(   )r   r8   sr0   Zparamr   r   r   load_xmlY   s    
zGPIniParser.load_xmlc                 C   s@   t |d| j}| j| W d    n1 s20    Y  d S )Nzwb+)codecsr4   r   r   write)r   r6   r7   r   r   r   write_binaryd   s    zGPIniParser.write_binary)__name__
__module____qualname__r   r   r#   r(   r.   r1   r9   r<   r?   r   r   r   r   r       s   		r   c                       s    e Zd ZdZ fddZ  ZS )GPTIniParserzutf-8c              	      sX   zt t| | W n> tyR   ttjd| _t| j_	| j
t|d Y n0 d S )Nr	   z
iso-8859-1)superrC   r   UnicodeDecodeErrorr   r
   r   r   r   r   r   r   r   r   	__class__r   r   r   l   s    zGPTIniParser.parse)r@   rA   rB   r   r   __classcell__r   r   rF   r   rC   i   s   rC   c                       s   e Zd Z fddZ  ZS )GPScriptsIniParserc                    sB   t t| ||||}td|}|d ur>|d}d|jd< |S )Nz\d+CmdLine$r   TRUEnetwork_path)rD   rI   r#   rematchr%   r+   )r   r   r   r   r   parent_returnZcmdliner"   rF   r   r   r#   y   s    

z&GPScriptsIniParser.build_xml_parameter)r@   rA   rB   r#   rH   r   r   rF   r   rI   x   s   rI   c                       s@   e Zd Z fddZ fddZdd Zdd Zd	d
 Z  ZS )GPFDeploy1IniParserc           
         s   t t| ||||}| dkrp|d}|| | dd}|D ]}t|d}	||	_	d|	j
d< qNn|dkr|d}d|j
d< |S )Nfolder_redirectionr   ;rJ   Zuser_idZFullPathrK   )rD   rO   r#   lowerr%   removestripsplitr   r   r+   )
r   r   r   r   r   rN   r!   Zsid_listsidr"   rF   r   r   r#      s$    




z'GPFDeploy1IniParser.build_xml_parameterc                    s|   |  dkrj|dj}|d}t|dkr>|d jd }nddd |D }| j||| ||fS tt	| 
||S )	NrP   r   r      r   rQ   c                 S   s   g | ]
}|j qS r   )r   ).0xr   r   r   
<listcomp>       z:GPFDeploy1IniParser.load_xml_parameter.<locals>.<listcomp>)rR   r%   r   r:   lenjoinr   r&   rD   rO   r(   )r   r'   r   r!   valuesr"   rF   r   r   r(      s    
z&GPFDeploy1IniParser.load_xml_parameterc                 C   sT   t |d}| dkrF| dkrF|d\}}||jd< ||jd< n
||jd< |S )Nr)   rP   version_fdeploy_GUIDfdeploy_SIDr*   )r   rR   rU   r+   )r   r,   r-   r   guidrV   r   r   r   r.      s    



z%GPFDeploy1IniParser.build_xml_sectionc                 C   sF   d|j v r|j d }n |j d }|j d }|d | }| j| |S )Nr*   ra   rb   r`   r/   )r   r   r0   rc   rV   r   r   r   r1      s    


z$GPFDeploy1IniParser.load_xml_sectionc                 C   s|   g }| d}|jdd d |D ]T}|jd }||v rB|| }n*| |t}|||f |||fg ||jd< q"|S )Nz.//Section[@fdeploy_SID]c                 S   s   | j S )N)tag)rY   r   r   r   <lambda>   r[   z5GPFDeploy1IniParser.custom_entities.<locals>.<lambda>)r!   rb   )r:   sortr+   Znew_xml_entityr   appendupdate)r   r8   Zglobal_entitiesZentitiesZfdeploy_sidsrV   Z
old_attribZ
new_attribr   r   r   custom_entities   s    


z#GPFDeploy1IniParser.custom_entities)	r@   rA   rB   r#   r(   r.   r1   ri   rH   r   r   rF   r   rO      s
   rO   )r=   r
   rL   Zxml.etree.ElementTreer   r   Zsamba.compatr   r   Zsamba.gp_parser   r   r   rC   rI   rO   r   r   r   r   <module>   s   I