?Hg ddlZddlmZddlmZddlmZddlm Z m Z ej e dZ e dzZd aGd d eZdd ZdZdZdS)N)minidom) ExpatError)etree) CONFIG_DIR acquire_lockzve.cfgz.tmpNNc eZdZdfd ZxZS)BadVeConfigExceptionNothingcPtd|dS)Nz5Unable to parse /etc/container/ve.cfg file, message: )super__init__)selfmessage __class__s I/opt/cloudlinux/venv/lib/python3.11/site-packages/clveconfig/ve_config.pyrzBadVeConfigException.__init__s4  MG M M     )r )__name__ __module__ __qualname__r __classcell__)rs@rr r s=          rr Tcdtdkr |rtSt5 tjt}|dd}n5#t tttf$r}td|d}~wwxYw|r||fa||fcdddS#1swxYwYdS)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 r lveconfigrzbad ve.cfg fileN) PARSED_XML_CACHErxmlparse VE_CFG_PATHgetElementsByTagNameOSErrorIOErrorr IndexErrorr ) use_cache_ve_cfg _ve_lveconfiges rget_xml_configr' s=((Y(  & & Ai ,,G#88EEaHMM*j9 A A A&'899q @ A  6& 5  % & & & & & & & & & & & & & & & & & &s4B%4AB%B 7BB  B%%B),B)ct5 tjt}|cdddS#tj$r"}t t||d}~wwxYw#1swxYwYdS)z This method works same as get_xml_config, but returns etree object :rtype: etree.ElementTree :raises: BadVeConfigException, LockFailedException N)rrrrgetroot ParseErrorr str)treer&s rget_xml_config_etreer-<s 66 6;{++D<<>>66666666 6 6 6&s1vv..A 5 6 6666666666s.A>,A  A;A66A;;A>>BBc|dd}||fa|ddd}|dddd}t j|}|d }|st d tttd 5}| || tj |dddn #1swxYwYtjttdS) Nrrzutf-8)encodingindentnewl r )r0z Rejected attempt to write empty wb)rr toprettyxmlreplacer parseString RuntimeErrorropenVE_CFG_PATH_TMPwriteflushosfsyncfilenorename) xml_documentr% xml_stringnew_xmlbuffs rsave_xmlrGLs[!55kBB1EM$m5))72B)OOJ##E3//77sCCJoj))G   w  / /C MKkKKLLL ot $ $     Io{+++++s:ADDD)T)r>xml.domrrxml.parsers.expatrlxmlrve_lockrrpathjoinrr;r Exceptionr r'r-rGrrrPs """"""((((((--------gll:x00 &!     9   &&&&8 6 6 6 ,,,,,r