]|OVc@sddlZddlZddlZddlZddlmZddlZddlZddlj Z ddlm Z m Z m Z ddlmZdefdYZdefdYZdS( iN(tStringIO(t ElementTreetElementt SubElement(tArtifactValidationExceptiontXMvnConfigExceptioncBseZRS((t__name__t __module__(((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyR.st XMvnConfigcBseZdZejjddZejjddZdZdZ dZ dZ dd Z d Z d Zddd Zd ZdZdZdZdZedZdZRS(s0 Class for modifying XMvn configuration s.xmvnsjavapackages-rule-indexsconfig.ds)http://fedorahosted.org/xmvn/CONFIG/0.6.0cCsd|_ytjtjdWntk r3nXy5ttj }t|j d|_ WdQXWn7t k r}|j t j krd|_ q|nXdS(Ns {content} ii(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^|jt}|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|jS(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|stdn|j}|j}t||}t||}|}|rit||}nt|tr||_n=t|trx+|D]}|j|qWn |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|DSdS(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}||kr9tdn|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_groupss  c Cs|jdt|j|j}|jdd}|g}td}xm|D]e}|jdtdt|j|j}||krtdn|j|jddqSW|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_aliasess     c Cs|jdt|j|j|j}|jdd}|g}td}xP|D]H}|j|}||krtdnt |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_versionss      c Cs|jdt|j|j}|jdd}|g}td}g|D]}tjj|sS|^qSst dnxP|D]H}|j |}||krt dnt |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_mappings  +    c Cs|jdt|j|j}|jdd}|j|}||kratdn|g}|rtd}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_mappings       c Cs|jd}|j}|j}|}x|D]}t||}q4WyLdj|}tj|} | j|_x| D]} |j| qWWn#t j j k rt dnX|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{RcRR(((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyR1s$        (R8R RRLRtxml.dom.minidomR0Rt lxml.etreeRR%RRRtjavapackages.artifactRR<RtobjectR(((s</usr/lib/python2.7/site-packages/javapackages/xmvn_config.pyt!s