t_9 @s|dZddlmZmZmZddlZddlZddlZyddlm Z Wn"e k r~ddl m Z YnXddl m Z ddlmZdd l mZdd l mZdd l mZddljZdd lmZmZd ZejdZejdjZGdddeZGdddeZddZ ddZ!Gddde j"Z"dS)aModule for supporting the lxml.etree library. The idea here is to use as much of the native library as possible, without using fragile hacks like custom element names that break between releases. The downside of this is that we cannot represent all possible trees; specifically the following are known to cause problems: Text or comments as siblings of the root element Docypes with no name When any of these things occur, we emit a DataLossWarning )absolute_importdivisionunicode_literalsN)MutableMapping)base)DataLossWarning) constants)etree) _ihatexml)PY3 binary_typeTz {([^}]*)}(.*)Zasdc@seZdZddZdS) DocumentTypecCs||_||_||_dS)N)namepublicIdsystemId)selfrrrr/builddir/build/BUILDROOT/alt-python35-pip-20.2.4-1.el7.x86_64/opt/alt/python35/lib/python3.5/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py__init__)s  zDocumentType.__init__N)__name__ __module__ __qualname__rrrrrr(s rc@s@eZdZddZddZddZeeZdS)DocumentcCsd|_g|_dS)N) _elementTree _childNodes)rrrrr0s zDocument.__init__cCsC|jj}x|jjjD]}q%W|j|jdS)N)rgetrootZ itersiblingsZaddnext_element)relementlastrrr appendChild4szDocument.appendChildcCs|jS)N)r)rrrr_getChildNodes;szDocument._getChildNodesN)rrrrr!r"property childNodesrrrrr/s    rcsMgtjdddfdd|ddjS)NpreventDoubleDashCommentsTrc s>t|dst|dr jd|jjr|jjpL|jjsbd|jj}n%d|jj|jj|jjf}jdd|d|f|j}x"|jdk r|j}qWx|dk r||d|j }qWq:t |t s(t |t rnt |t sPt jd dksPtjd d||fq:jd x|D]}||dqWn|jtkrjd d||jft|d r:|jr:jd d||jfn4t |tjsttjj|j}|dk r|jd}|jd}tj|}jdd||j|fn'jdd|j|jft|drg}x|jjD]\} } tj| }|dk rH|j\}} j| } tj|}d|| f} nj| } |j| | fqWx<t |D].\} } jdd|d| | fq{W|jrjd d|d|jf|d7}x|D]} | |qWt|d r:|jr:jd d|d|jfdS)Ntagrz #documentz zz|%s%s rrz|%s"%s"z#document-fragmentz|%stailrz |%s<%s %s>z|%s<%s>attribz%s %sz |%s%s="%s")!hasattrappenddocinfo internalDTD public_idZ system_url root_namerZ getpreviousZgetnext isinstancestrbytessys version_infoAssertionErrorr& comment_typetextr(r Z_Elementetree_builders tag_regexpmatchgroupr prefixes fromXmlNamer)itemsgroupssorted) rindentdtd_strZ next_elementZnsmatchnsr&prefix attributesrvalueZ attr_stringchild) infosetFilterrvserializeElementrrrJEst       (  !    & "  z(testSerializer..serializeElement )r InfosetFilterjoin)rr)rHrIrJrtestSerializerAs F rNcs2gfdd|djS)z4Serialize an element and its child nodes to a stringcsht|dsf|jjrS|jjr6|jj}nd|jj}j||jn|jtkrjd|j fn|j sjd|jfn?dj dd|j j D}jd|j|f|j r j|j x|D]}|qWjd |jft|d rd|j rdj|j dS) Nr&z z z<%s>r'cSs&g|]\}}d||fqS)z%s="%s"r).0rrFrrr s z6tostring..serializeElement..z<%s %s>zr()r*r,r-doctyper/r+rr&r6r7r)rMr>r()rrBattrrG)rIrJrrrJs*      z"tostring..serializeElement)rM)rr)rIrJrtostrings rTcseZdZeZeZdZdZeZ e Z dddZ ddZ ddZd d Zd d Zd dZdddZdfddZddZS) TreeBuilderNFcstjtd|tjdd|_||_GfdddtGfdddj}Gfdd d j }||_ ||_ t j j||dS) NfullTreer%TcsveZdZddZfddZddZddZd d Zd d Zd dZ ddZ dS)z(TreeBuilder.__init__..AttributescSs ||_dS)N)r)rrrrrrsz1TreeBuilder.__init__..Attributes.__init__csFt|tr3d|dj|df}nj|}|S)Nz{%s}%srr)r0tupleZcoerceAttribute)rkeyr)rHrr _coerceKeys$z3TreeBuilder.__init__..Attributes._coerceKeycSsE|jjj|j|}t rAt|trA|jd}|S)Nascii)rr)rYr r0rdecode)rrXrFrrr __getitem__sz4TreeBuilder.__init__..Attributes.__getitem__cSs ||jjj|j|.Attributes.__setitem__cSs|jjj|j|=dS)N)rr)rY)rrXrrr __delitem__sz4TreeBuilder.__init__..Attributes.__delitem__cSst|jjjS)N)iterrr))rrrr__iter__sz1TreeBuilder.__init__..Attributes.__iter__cSst|jjjS)N)lenrr))rrrr__len__sz0TreeBuilder.__init__..Attributes.__len__cSs|jjjjS)N)rr)clear)rrrrrcsz.TreeBuilder.__init__..Attributes.clearN) rrrrrYr\r]r^r`rbrcr)rHrr Attributess       rdcseZdZfddZfddZfddZeeeZddZd d Z eee Z d fd d Z ddZ d S)z%TreeBuilder.__init__..Elementcs;j|}jj||d|||_dS)N namespace) coerceElementElementr _attributes)rrre)rdbuilderrHrrrsz.TreeBuilder.__init__..Element.__init__cs4j||_|j|j|j|j_dS)N)rf_nameZ _getETreeTagZ _namespacerr&)rr)rHrr_setNamesz.TreeBuilder.__init__..Element._setNamecsj|jS)N)r=rj)r)rHrr_getNamesz.TreeBuilder.__init__..Element._getNamecSs|jS)N)rh)rrrr_getAttributessz4TreeBuilder.__init__..Element._getAttributescSs$|j}|j|j|dS)N)rErcupdate)rrFrErrr_setAttributess  z4TreeBuilder.__init__..Element._setAttributesNcs)j|}jj|||dS)N)ZcoerceCharactersrg insertText)rdata insertBefore)rirHrrrpsz0TreeBuilder.__init__..Element.insertTextcSsDt||j|j}|jjr@|jjj|jj|S)N)typerrerr)rn)rrrrr cloneNodes z/TreeBuilder.__init__..Element.cloneNode) rrrrrkrlr#rrmrorErprtr)rdrirHrrrgs   rgcsReZdZfddZfddZddZeeeZdS)z%TreeBuilder.__init__..Commentcs&j|}jj||dS)N) coerceCommentCommentr)rrq)rirHrrr sz.TreeBuilder.__init__..Comment.__init__csj|}||j_dS)N)rurr7)rrq)rHrr_setDatasz.TreeBuilder.__init__..Comment._setDatacSs |jjS)N)rr7)rrrr_getDatasz.TreeBuilder.__init__..Comment._getDataN)rrrrrwrxr#rqr)rirHrrrv s  rv)r8getETreeModuler r rLrHnamespaceHTMLElementsrrgrv elementClass commentClassrrUr)rrzrVrgrvr)rdrirHrrs  %$"  zTreeBuilder.__init__cCs2tjj||j|_g|_d|_dS)N)rrUresetinsertCommentInitial insertCommentinitial_commentsrQ)rrrrr}s  zTreeBuilder.resetcCs t|S)N)rN)rrrrrrN#szTreeBuilder.testSerializercCs$tr|jjS|jjjSdS)N)rVdocumentrr)rrrr getDocument&s zTreeBuilder.getDocumentcCs_g}|jdj}|jr/|j|j|jt||jr[|j|j|S)Nr) openElementsrr7r+extendlistr()rfragmentrrrr getFragment,s  zTreeBuilder.getFragmentcCs|d}|d}|d}|s@tjdtd|_nL|jj|}||krntjdt|j|||}||_dS)Nrrrz#lxml cannot represent empty doctypez%lxml cannot represent non-xml doctype)warningswarnr rQrHrf doctypeClass)rtokenrrrZ coercedNamerQrrr insertDoctype6s     zTreeBuilder.insertDoctypecCsM|dks!||jks!t|jjdks9t|jj|dS)N)rr5rrr+)rrqparentrrrr~Fs!z TreeBuilder.insertCommentInitialcs[||jkr>|jjjdjtkr>tjdttt |j ||dS)Nrz@lxml cannot represent adjacent comments beyond the root elements) rrrr&r6rrr superrUr)rrqr) __class__rrinsertCommentMainKszTreeBuilder.insertCommentMainc Cs`d}|jrT|jjs!t|d|jj7}|jjdk sY|jjdk r$|d|jj|jjpwd7}|jjr|jj}|jddkr|jddkrtj dt |j dd}|jddkr |d |7}q$|d |7}n |d 7}|d 7}|jj|d krTtj dt |d7}t j |}x4|jD])}|j|d}|j|jqwW|j|_|j|j_|d }|jd|j}|dkr|} nd||f} | |_|j||} || _|jjj| |jj| |j|_dS)NrSz rzGlxml cannot represent doctype with a different name to the root elementz$rqrez{%s}%s)rQrr5rrrHZ coercePubidfindrrr replacer fromstringrr|Z addpreviousr documentClassrZ getroottreergetdefaultNamespacer&r{rr+rrr) rrZdocStrsysidroot comment_tokencommentrreZ etree_tagZ root_elementrrr insertRootQsL    *        zTreeBuilder.insertRoot)rrrrrrrr{r| fragmentClassr implementationrr}rNrrrr~rrrr)rrrUs \    rU)#__doc__ __future__rrrrrer3collections.abcr ImportError collectionsrSrr r r r8r Z lxml.etreeZpip._vendor.sixr rrVcompiler9rvr&r6objectrrrNrTrUrrrr s.     O )