3 \-@sddlZddlZdZdZdZdZdZdZdZ d Z Gd d d ej j Z Gd d d ZGdddZGddde ZdZdddZdddZdS)N START_ELEMENT END_ELEMENTCOMMENTSTART_DOCUMENT END_DOCUMENTPROCESSING_INSTRUCTIONIGNORABLE_WHITESPACE CHARACTERSc@seZdZdZdZd$ddZddZddZdd Zd d Z d d Z ddZ ddZ ddZ ddZddZddZddZddZddZd d!Zd"d#ZdS)%PullDOMNc Cszddlm}||_ddg|_|j|_g|_|jj|_y|jj|_Wnt k rVYnX|dig|_ |j d|_ g|_ dS)Nr) XML_NAMESPACExml) Zxml.domr documentFactory firstEvent lastEvent elementStackappendpushpopAttributeError _ns_contexts_current_contextpending_events)selfrr r'/usr/lib64/python3.6/xml/dom/pulldom.py__init__s     zPullDOM.__init__cCs|jd}|jd=|S)Nr rr)r)rresultrrrr!s z PullDOM.popcCs ||_dS)N)_locator)rZlocatorrrrsetDocumentLocator&szPullDOM.setDocumentLocatorcCsHt|dsg|_|jj|pd|f|jj|jj|px|D]\}}||j||f<qWg|_|\}} |r|dkrr|j|} | rn| d| }n| }|jr|jj||} q|j||} n |jr|jj| } n |jd| } x|jD]\}}|\} } | |kr | dkr| }nd| }|jj | |}| j |nX| rL|j| } | r.| d| }n| }|jj | |}| j |n|jj | }| j |||_ qWt| fdg|jd<|jd|_|j| dS)Nzhttp://www.w3.org/2000/xmlns/r!:r"zxmlns:r )getattr_attrsr!rdocumentZcreateElementNS buildDocument createElementitemsZcreateAttributeNSZsetAttributeNodeNScreateAttributesetAttributeNodevaluerrr)rnametagNameattrsZ xmlns_uriZ xmlns_attrsanamer2r&Z localnamer%nodeZa_uriZ a_localnameZqnameattrrrrstartElementNS3sP           zPullDOM.startElementNScCs&t|jfdg|jd<|jd|_dS)Nr )rrr)rr3r4rrr endElementNSlszPullDOM.endElementNScCs~|jr|jj|}n |jd|}x0|jD]$\}}|jj|}||_|j|q*Wt|fdg|jd<|jd|_|j |dS)Nr ) r,r.r-r/r0r2r1rrr)rr3r5r7r6r2r8rrr startElementps   zPullDOM.startElementcCs&t|jfdg|jd<|jd|_dS)Nr )rrr)rr3rrr endElementszPullDOM.endElementcCsN|jr2|jj|}t|fdg|jd<|jd|_nt|fdg}|jj|dS)Nr )r, createCommentrrrr)rsr7eventrrrcomments   zPullDOM.commentcCsR|jr4|jj||}t|fdg|jd<|jd|_nt||fdg}|jj|dS)Nr )r,createProcessingInstructionrrrr)rtargetdatar7r?rrrprocessingInstructions zPullDOM.processingInstructioncCs.|jj|}t|fdg|jd<|jd|_dS)Nr )r,createTextNoderr)rcharsr7rrrignorableWhitespaces zPullDOM.ignorableWhitespacecCs.|jj|}t|fdg|jd<|jd|_dS)Nr )r,rEr r)rrFr7rrr characterss zPullDOM.characterscCs$|jdkr ddl}|jjjj|_dS)Nr)rZxml.dom.minidomZdomZminidomZDocumentimplementation)rr rrr startDocuments zPullDOM.startDocumentc Cs|jj||d}||_t|fdg|jd<|jd|_|j|x|jD]}|ddtkr|d\}}}|jj||}t|f|d<nD|ddt kr|jj |dd}t |f|d<nt d|dd||jd<||_qFWd|_|j S)Nr rzUnknown pending event ) rZcreateDocumentr,rrrrrrArr=AssertionErrorZ firstChild) rr&Ztagnamer7e_rBrCnrrrr-s$     zPullDOM.buildDocumentcCs t|jfdg|jd<|jdS)Nr )rr,rr)rrrr endDocumentszPullDOM.endDocumentcCs d|_dS)z.clear(): Explicitly release parsing structuresN)r,)rrrrclearsz PullDOM.clear)N)__name__ __module__ __qualname__rr,rrr r'r(r9r:r;r<r@rDrGrHrJr-rOrPrrrrr s& 9  r c@s$eZdZddZddZddZdS) ErrorHandlercCs t|dS)N)print)r exceptionrrrwarningszErrorHandler.warningcCs|dS)Nr)rrVrrrerrorszErrorHandler.errorcCs|dS)Nr)rrVrrr fatalErrorszErrorHandler.fatalErrorN)rQrRrSrWrXrYrrrrrTsrTc@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)DOMEventStreamcCs2||_||_||_t|jds&|j|_|jdS)Nfeed)streamparserbufsizer#_slurpgetEventreset)rr\r]r^rrrrs  zDOMEventStream.__init__cCs.t|_|jjtjjjd|jj|jdS)Nr ) r pulldomr]Z setFeaturer saxZhandlerZfeature_namespacesZsetContentHandler)rrrrraszDOMEventStream.resetcCs|j}|r|StdS)N)r` IndexError)rposrcrrr __getitem__szDOMEventStream.__getitem__cCs|j}|r|StdS)N)r` StopIteration)rrfrrr__next__szDOMEventStream.__next__cCs|S)Nr)rrrr__iter__szDOMEventStream.__iter__cCsp|j}|g}x\|rj|\}}||kr(dS|tkr>|dj||tkrR|j|n|tkr`|d=|j}qWdS)Nr rr)r`r appendChildrr)rr7r?parentstokenZcur_noderrr expandNodes zDOMEventStream.expandNodecCs|jjds|jj|j_x<|jjdsT|jj|j}|sF|jjdS|jj|qW|jjdd}|jjdd|jjd<|S)Nr r) rbrrr\readr^r]closer[)rbufrfrrrr`s   zDOMEventStream.getEventcCs|jj|j|j|_|jS)z Fallback replacement for getEvent() using the standard SAX2 interface, which means we slurp the SAX events into memory (no performance gain, but we are compatible to all SAX parsers). )r]parser\_emitr`)rrrrr_szDOMEventStream._slurpcCs,|jjdd}|jjdd|jjd<|S)zn Fallback replacement for getEvent() that emits the events that _slurp() read previously. r r)rbr)rrfrrrrsszDOMEventStream._emitcCs|jj|`d|_d|_dS)z+clear(): Explicitly release parsing objectsN)rbrPr]r\)rrrrrPs zDOMEventStream.clearN) rQrRrSrrargrirjrnr`r_rsrPrrrrrZs rZc@s4eZdZddZddZddZddZd d Zd S) SAX2DOMcCs2tj|||||jd}|jd}|j|dS)Nr r)r r9rrk)rr3r4r5curNode parentNoderrrr9#s  zSAX2DOM.startElementNScCs0tj||||jd}|jd}|j|dS)Nr rurrv)r r;rrk)rr3r5rwrxrrrr;)s  zSAX2DOM.startElementcCs4tj||||jdd}|jd}|j|dS)Nrr r)r rDrrrk)rrBrCr7rxrrrrD/s zSAX2DOM.processingInstructioncCs2tj|||jdd}|jd}|j|dS)Nrr r)r rGrrrk)rrFr7rxrrrrG5s  zSAX2DOM.ignorableWhitespacecCs2tj|||jdd}|jd}|j|dS)Nrr r)r rHrrrk)rrFr7rxrrrrH;s  zSAX2DOM.charactersN)rQrRrSr9r;rDrGrHrrrrrt!s rtrucCs@|dkr t}t|tr"t|d}n|}|s4tjj}t|||S)Nrb)default_bufsize isinstancestropenr rc make_parserrZ)Zstream_or_stringr]r^r\rrrrrDs   rrcCs6ddlm}t|}||}|s*tjj}t|||S)Nr)StringIO)iorlenr rcrrZ)stringr]rr^rqrrr parseStringOs   ri@i?)NN)N)Zxml.saxr Zxml.sax.handlerrrrrrrrr rcZContentHandlerr rTrZrtr|rrrrrrrs"8U!