ó ]|OVc@sÃddlZddlZddlZddlZddlmZddlZddlZddlj Z ddlm Z m Z m Z ddlmZdefd„ƒYZdefd„ƒYZdS( iÿÿÿÿN(tStringIO(t ElementTreetElementt SubElement(tArtifactValidationExceptiontXMvnConfigExceptioncBseZRS((t__name__t __module__(((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyR.st XMvnConfigcBsÈeZdZejjddƒZejjddƒZdZd„Z d„Z d„Z dd „Z d „Z d „Zddd „Zd „Zd„Zd„Zd„Zd„Zed„Zd„ZRS(s0 Class for modifying XMvn configuration s.xmvnsjavapackages-rule-indexsconfig.ds)http://fedorahosted.org/xmvn/CONFIG/0.6.0cCs§d|_ytjtjdƒWntk r3nXy5ttjƒ }t|j ƒƒd|_ WdQXWn7t k r¢}|j t j kr™d|_ q£|‚nXdS(Ns„ {content} iíi(t templateXMLtostmakedirsRt CONFIG_DIRtOSErrortopent INDEX_PATHtinttreadtindextIOErrorterrnotENOENT(tselfRte((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt__init__:s  # cCsEttjdƒ-}|jt|jƒƒ|jd|_WdQXdS(Ntwi(RRRtwritetstrR(RR((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt __write_indexPscCs+djd|jƒ}tjjtj|ƒS(Ns#javapackages-config-{index:05d}.xmlR(tformatRR tpathtjoinRR (Rtfname((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt__get_current_configUstcCs^|jƒtƒ}|j|jjd|ƒƒtj|jƒƒ}|jtj dƒƒ|S(Ntcontents[XMvn configuration file generated by javapackages.xmvn_config (part of javapackages-tools)( t_XMvnConfig__write_indexRRR RtETt fromstringtgetvaluetappendtComment(RR#txmlbuftroot((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt __init_xmlZs   c CsNtƒ}tƒ}|j|ƒ|j|dtdddddtƒ|jƒS(Ntxml_declarationtencodingsutf-8tmethodtxmlt pretty_print(RRt_setrootRtTrueR'(RtelemR*tet((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt__prettify_elementfs    cCs>|j|ƒ}tj|ddƒ}|j|ƒWdQXdS(Nsw+sutf-8(t_XMvnConfig__prettify_elementtcodecsRR(RRR+txmlstrtfout((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt __write_xmlrsc CsÕ|stdƒ‚n|jƒ}|jƒ}t||ƒ}t||ƒ}|}|rit||ƒ}nt|tƒr„||_n=t|tƒr´x+|D]}|j|ƒqšWn |j|ƒ|j ||ƒdS(Ns#Provide content as keyword argument( t Exceptiont_XMvnConfig__get_current_configt_XMvnConfig__init_xmlRt isinstancet basestringttexttlistR(t_XMvnConfig__write_xml( Rtlevel1tlevel2tlevel3R#tconfpathR+t cont_levelR4((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt __add_configxs      cCs^tjdƒ}g|j|ƒD]}t|ƒ^q}|rZtd„|j|ƒDƒƒSdS(sI Return maximum number of backreference used in string s s@(\d+)css|]}t|ƒVqdS(N(R(t.0tx((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pys –si(tretcompiletfindallRtmax(Rtst backref_reRKt backref_nos((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt__count_backreferencess (cCs=|jdƒ}|jdƒ}||kr9tdƒ‚n|S(sC Return number of wildcard groups used in string s t{t}sWNumber of opening and closing parenthesis for groups of wildcard matching is different.(tcountR<(RRPtlefttright((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt__count_wildcard_groups™s  c Csã|jdtƒ|j|jƒƒ}|jddƒ}|g}tdƒ}xm|D]e}|jdtdtƒ|j|jƒƒ}||krŸtdƒ‚n|j|jddƒƒqSW|j|ƒ|j d d d |ƒd S( sÄ Adds alias artifacts for given main artifact artifact -- main Artifact for which aliases are being provided aliases -- list of alternate Artifact representations t allow_backrefR+t artifactGlobtaliasest allow_emptytallow_wildcardss8Number of backrefenreces is higher than wildcard groups.taliastartifactManagementtruleR#N( tvalidatetFalset"_XMvnConfig__count_wildcard_groupst get_rpm_strtget_xml_elementRt!_XMvnConfig__count_backreferencesRR(t_XMvnConfig__add_config( RtartifactR\t wild_groupstmaintelemstaelemR_tbackrefs((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt add_aliases¥s     c CsÌ|jdtƒ|j|j|jƒƒ}|jddƒ}|g}tdƒ}xP|D]H}|j|ƒ}||kr‰tdƒ‚nt |dƒ} || _ qYW|j |ƒ|j ddd |ƒd S( s´ Change where on filesystem given artifact is installed artifact -- Artifact to be modified versions -- list of compat versions for given artifact RZR+R[tversionss8Number of backrefenreces is higher than wildcard groups.tversionR`RaR#N( RbRcRdReRqRfRRgRRRAR(Rh( RRiRpRjRkRltvelemRqRntve((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pytadd_compat_versions¼s      c Cs|jdtƒ|j|jƒƒ}|jddƒ}|g}tdƒ}g|D]}tjj|ƒsS|^qSs†t dƒ‚nxP|D]H}|j |ƒ}||kr½t dƒ‚nt |dƒ} || _ qW|j|ƒ|jdd d |ƒd S( s§ Change where on filesystem given artifact is installed artifact -- Artifact to be modified paths -- list of paths for given artifact RZR+R[tfiless"At least one path must be relatives8Number of backrefenreces is higher than wildcard groups.tfileR`RaR#N(RbRcRdReRfRR RtisabsRRgRRRAR(Rh( RRitpathsRjRkRltfelemRRntpe((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pytadd_file_mappingÓs  +    c CsÑ|jdtƒ|j|jƒƒ}|jddƒ}|j|ƒ}||kratdƒ‚n|g}|r•tdƒ}d|_|j |ƒntdƒ} || _|j | ƒ|j dd d |ƒd S( s§ Change which package given artifact belongs to artifact -- Artifact to be modified package -- subpackage name where artifact belongs RZR+R[s8Number of backrefenreces is higher than wildcard groups.toptionalttruet targetPackageR`RaR#N( RbRcRdReRfRgRRRAR(Rh( RRitpackageR|RjRkRnRltoptttarget((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pytadd_package_mappingìs       c CsÓ|jdƒ}|jƒ}|jƒ}|}x|D]}t||ƒ}q4WyLdj|ƒ}tj|ƒ} | j|_x| D]} |j| ƒqWWn#t j j k r¾t dƒ‚nX|j ||ƒdS(sâ Add custom configuration option optionstr -- XPath-like expression for specifying XMvn configuration option location with '/' used as delimiter example: buildSettings/compilerSource content -- XML content to be added to specified node. Can be just text, XML node or multiple nodes. examples: someText someText t/s{0}s)content is not valid content for XML nodeN(tsplitR=R>RRR%R&RAR(tlxmltetreetXMLSyntaxErrorR<RC( Rt optionstrR#t node_namesRGR+tpartnodetinsertedt contentRoottelement((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pytadd_custom_options     N(RRt__doc__R RRRR tXMLNSRR$R=R>R7RCtNoneRhRgRdRoRtR{RcR‚R(((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyR1s$        (R8R RRLRtxml.dom.minidomR0R…t lxml.etreeR†R%RRRtjavapackages.artifactRR<RtobjectR(((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt!s