3 Bu_9 @sdZddlmZmZmZddlZddlZddlZyddlm 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-python36-pip-20.2.4-1.el7.x86_64/opt/alt/python36/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py__init__)szDocumentType.__init__N)__name__ __module__ __qualname__rrrrrr(src@s,eZdZddZddZddZeeZdS)DocumentcCsd|_g|_dS)N) _elementTree _childNodes)rrrrr0szDocument.__init__cCs2|jj}x|jjjD]}qW|j|jdS)N)rgetrootZ itersiblingsZaddnext_element)relementlastrrr appendChild4s zDocument.appendChildcCs|jS)N)r)rrrr_getChildNodes;szDocument._getChildNodesN)rrrrr!r"property childNodesrrrrr/srcs6gtjdddfdd |ddjS)NT)preventDoubleDashCommentsrc sDt|ds8t|drˆjd|jjrz|jjp6|jjsFd|jj}nd|jj|jj|jjf}jdd|d|f|j}x|jdk r|j}qWx|dk r||d|j }qWnrt |t st |t r t |t st jd dkstjd d||fn(jd x|D]}||dqWn|jtkrjd d||jft|d r@|jr@jd d||jfnt |tjsttjj|j}|dk r|jd}|jd}tj|}jdd||j|fnjdd|j|jft|drg}xr|jjD]d\} } tj| }|dk rx|j\}} j| } tj|}d|| f} n j| } |j| | fq.Wx2t |D]&\} } jdd|d| | fqW|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)r InfosetFilterjoin)rr)rHrIrJrtestSerializerAs  F rNcs$gfdd|djS)z4Serialize an element and its child nodes to a stringcs t|dsH|jjr:|jjr$|jj}n d|jj}j||jn|jtkrfjd|j fn|j sjd|jfn.dj dd|j j D}jd|j|f|j rj|j x|D] }|qWjd |jft|d o|j rj|j dS) Nr&z z z<%s>r'cSsg|]\}}d||fqS)z%s="%s"r).0rrFrrr sz6tostring..serializeElement..z<%s %s>zr()r*r,r-doctyper/r+rr&r6r7r)rMr>r()rrBattrrG)rIrJrrrJs*         z"tostring..serializeElement)rM)rr)rIrJrtostrings rTcszeZdZeZeZdZdZeZ e Z dddZ ddZ ddZd d Zd d Zd dZdddZdfdd ZddZZS) TreeBuilderNFcstjt|dtjdd|_||_GfdddtGfdddj}Gfdd d j }||_ ||_ t j j||dS) N)fullTreeT)r%csPeZdZddZfddZddZddZd d Zd d Zd dZ ddZ dS)z(TreeBuilder.__init__..AttributescSs ||_dS)N)r)rrrrrrsz1TreeBuilder.__init__..Attributes.__init__cs4t|tr&d|dj|df}n j|}|S)Nz{%s}%srr)r0tupleZcoerceAttribute)rkeyr)rHrr _coerceKeys  z3TreeBuilder.__init__..Attributes._coerceKeycSs2|jjj|j|}t r.t|tr.|jd}|S)Nascii)rr)rYr r0rdecode)rrXrFrrr __getitem__s z4TreeBuilder.__init__..Attributes.__getitem__cSs||jjj|j|<dS)N)rr)rY)rrXrFrrr __setitem__sz4TreeBuilder.__init__..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 rdcspeZdZfddZfddZfddZeeeZddZd d Z eee Z dfd d Z ddZ d S)z%TreeBuilder.__init__..Elementcs*j|}jj|||d||_dS)N) namespace) coerceElementElementr _attributes)rrre)rdbuilderrHrrrs z.TreeBuilder.__init__..Element.__init__cs$j||_|j|j|j|j_dS)N)rf_nameZ _getETreeTagZ _namespacerr&)rr)rHrr_setNames z.TreeBuilder.__init__..Element._setNamecs j|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_setAttributessz4TreeBuilder.__init__..Element._setAttributesNcsj|}jj|||dS)N)ZcoerceCharactersrg insertText)rdata insertBefore)rirHrrrps z0TreeBuilder.__init__..Element.insertTextcSs0t||j|j}|jjr,|jjj|jj|S)N)typerrerr)rn)rrrrr cloneNodesz/TreeBuilder.__init__..Element.cloneNode)N) rrrrrkrlr#rrmrorErprtr)rdrirHrrrgs    rgcs8eZdZfddZfddZddZeeeZdS)z%TreeBuilder.__init__..Commentcsj|}jj||dS)N) coerceCommentCommentr)rrq)rirHrrr s z.TreeBuilder.__init__..Comment.__init__csj|}||j_dS)N)rurr7)rrq)rHrr_setDatas z.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__cCs$tjj||j|_g|_d|_dS)N)rrUresetinsertCommentInitial insertCommentinitial_commentsrQ)rrrrr}s zTreeBuilder.resetcCst|S)N)rN)rrrrrrN#szTreeBuilder.testSerializercCstr |jjS|jjjSdS)N)rVdocumentrr)rrrr getDocument&szTreeBuilder.getDocumentcCsFg}|jdj}|jr"|j|j|jt||jrB|j|j|S)Nr) openElementsrr7r+extendlistr()rfragmentrrrr getFragment,s   zTreeBuilder.getFragmentcCsh|d}|d}|d}|s0tjdtd|_n4|jj|}||krPtjdt|j|||}||_dS)Nrrrz#lxml cannot represent empty doctypez%lxml cannot represent non-xml doctype)warningswarnr rQrHrf doctypeClass)rtokenrrrZ coercedNamerQrrr insertDoctype6s   zTreeBuilder.insertDoctypecCs6|dks||jkst|jjdks&t|jj|dS)N)rr5rrr+)rrqparentrrrr~Fsz TreeBuilder.insertCommentInitialcsB||jkr,|jjjdjtkr,tjdttt |j ||dS)Nrz@lxml cannot represent adjacent comments beyond the root elements) rrrr&r6rrr superrUr)rrqr) __class__rrinsertCommentMainKs  zTreeBuilder.insertCommentMainc Csd}|jr|jjst|d|jj7}|jjdk s>|jjdk r|d|jj|jjpRd7}|jjr|jj}|jddkr|jddkrtj dt |j dd}|jddkr|d |7}q|d |7}n|d 7}|d 7}|jj|d krtj dt |d7}t j |}x*|jD] }|j|d}|j|jqW|j|_|j|j_|d }|jd|j}|dkrn|} n d||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)F)N)N)rrrrrrrr{r| fragmentClassr implementationrr}rNrrrr~rr __classcell__rr)rrrUs \  rU)#__doc__ __future__rrrrrer3collections.abcr ImportError collectionsrSrr r r r8r Z lxml.etreeZpip._vendor.sixr rrVcompiler9rvr&r6objectrrrNrTrUrrrr s.        O)