File: //opt/alt/python37/lib/python3.7/site-packages/clveconfig/__pycache__/ve_config.cpython-37.pyc
B
�~�O��� @ s� d dl mZ d dlZd dlmZ d dlmZ d dlm Z ddl
mZmZ ej
�ed�Zed Zd
aG dd� de�Zddd�Zdd� Zdd� ZdS )� )�absolute_importN)�minidom)�
ExpatError)�etree� )�
CONFIG_DIR�acquire_lockzve.cfgz.tmp)NNc s e Zd Zd� fdd� Z� ZS )�BadVeConfigException�Nothingc s t t| ��d| � d S )Nz8Unable to parse /etc/container/ve.cfg file, message: %s )�superr �__init__)�self�message)� __class__� �py/clveconfig/ve_config.pyr s
zBadVeConfigException.__init__)r
)�__name__�
__module__�__qualname__r �
__classcell__r r )r r r s r Tc C s| t dkr| rt S t� �\ yt�t�}|�d�d }W n$ tttt fk
rX t
d��Y nX | rf||fa ||fS W dQ R X dS )z�
Load xml config from ve.cfg
1. setup lock on file
2. read info
3. remove lock
:type use_cache: bool
:rtype: tuple[xml.Document, xml.Element]
:raises: BadVeConfigException, LockFailedException
)NN� lveconfigr zbad ve.cfg fileN)�PARSED_XML_CACHEr �xml�parse�VE_CFG_PATH�getElementsByTagName�OSError�IOErrorr �
IndexErrorr )Z use_cacheZ_ve_cfg�
_ve_lveconfigr r r �get_xml_config s
r c C sZ t � �J yt�t�} | �� S tjk
rJ } ztt|���W dd}~X Y nX W dQ R X dS )z�
This method works same as get_xml_config,
but returns etree object
:rtype: etree.ElementTree
:raises: BadVeConfigException, LockFailedException
N)r r r r ZgetrootZ
ParseErrorr �str)Ztree�er r r �get_xml_config_etree; s
r# c C s� | � d�d }| |fa| jdddd�}|�dd��dd�}t�|�}|jdd �}|s`td
t ��tt d��&}|�
|� |�� t�
|�� � W d Q R X t�t t� d S )Nr r zutf-8� )�encoding�indentZnewl�
� � )r% z"Rejected attempt to write empty %s�wb)r r Ztoprettyxml�replacer ZparseString� Exceptionr �open�VE_CFG_PATH_TMP�write�flush�os�fsync�fileno�rename)Zxml_documentr Z
xml_stringZnew_xmlZbuf�fr r r �save_xmlK s
r6 )T)Z
__future__r r1 Zxml.domr r Zxml.parsers.expatr Zlxmlr Zve_lockr r �path�joinr r. r r, r r r# r6 r r r r �<module> s