3 Pf@sddlmZmZmZddlmZddlmZddlm Z ddl m Z ddl m Z d d Z Gd d d eZGd ddeZGdddeZGdddeZGddde jZdS))absolute_importdivisionunicode_literals) text_type)etree) tag_regexp)base) _ihatexmlcCs*|dkr dSt|tr|S|jddSdS)Nasciistrict) isinstancerdecode)sr /usr/lib/python3.6/etree_lxml.py ensure_str s  rc@s,eZdZddZddZddZddZd S) RootcCs||_g|_y:|jjrD|jjt|t|jjt|jjt|jj Wnt k rZYnXy |j }Wnt k r|}YnXx|j dk r|j }qWx |dk r|jj||j }qWd|_d|_dS)N)Z elementtreechildrenZdocinfoZ internalDTDappendDoctyperZ root_name public_idZ system_urlAttributeErrorZgetrootZ getpreviousgetnexttexttail)selfZetnoderrr__init__s*         z Root.__init__cCs |j|S)N)r)rkeyrrr __getitem__1szRoot.__getitem__cCsdS)Nr)rrrrr4sz Root.getnextcCsdS)Nr r)rrrr__len__7sz Root.__len__N)__name__ __module__ __qualname__rr!rr"rrrrrsrc@seZdZddZddZdS)rcCs(||_||_||_||_d|_d|_dS)N) root_nodenamer system_idrr)rr&r'rr(rrrr<s zDoctype.__init__cCs |jjdS)Nr )r&r)rrrrrEszDoctype.getnextN)r#r$r%rrrrrrr;s rc@seZdZddZddZdS) FragmentRootcs$fdd|D_d__dS)Ncsg|]}t|qSr)FragmentWrapper).0Zchild)rrr Ksz)FragmentRoot.__init__..)rrr)rrr)rrrJszFragmentRoot.__init__cCsdS)Nr)rrrrrNszFragmentRoot.getnextN)r#r$r%rrrrrrr)Isr)c@sTeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)r*cCsT||_||_t|jdr(t|jj|_nd|_t|jdrJt|jj|_nd|_dS)Nrr)r&objhasattrrrr)rZ fragment_rootr-rrrrSs  zFragmentWrapper.__init__cCs t|j|S)N)getattrr-)rr'rrr __getattr___szFragmentWrapper.__getattr__cCs6|jj}|j|}|t|dkr.||dSdSdS)Nr )r&rindexlen)rZsiblingsidxrrrrbs   zFragmentWrapper.getnextcCs |j|S)N)r-)rr rrrr!jszFragmentWrapper.__getitem__cCs t|jS)N)boolr-)rrrr__bool__mszFragmentWrapper.__bool__cCsdS)Nr)rrrr getparentpszFragmentWrapper.getparentcCs t|jS)N)strr-)rrrr__str__sszFragmentWrapper.__str__cCs t|jS)N)r7r-)rrrr __unicode__vszFragmentWrapper.__unicode__cCs t|jS)N)r2r-)rrrrr"yszFragmentWrapper.__len__N) r#r$r%rr0rr!r5r6r8r9r"rrrrr*Rs r*c@s4eZdZddZddZddZddZd d Zd S) TreeWalkercCsJt|trt||_t|}nt|_t|}tjj||t j |_ dS)N) rlistsetfragmentChildrenr)rr NonRecursiveTreeWalkerrr Z InfosetFilterfilter)rZtreerrrr~s   zTreeWalker.__init__c Cst|tr:|\}}|dks&td|tjtt||fSt|trLtjfSt|t rjtj |j |j |j fSt|trt|d rtjt|jfS|jtjkrtjt|jfS|jtjkrtjt|jdd fStjt|j}|r|j\}}nd}t|j}i}xbt|jjD]P\}}t|}t|}tj|}|rX|||jd|jdf<n ||d|f<qWtj||j j!||t"|dkp|jfSdS) Nrrz%Text nodes are text or tail, found %stagr rr)rr)#rtupleAssertionErrorr ZTEXTrr/rZDOCUMENTrZDOCTYPEr'rr(r*r.r-r@rCommentCOMMENTrZEntityZENTITYrmatchgroupsr;ZattribitemsgroupZELEMENTr?Z fromXmlNamer2) rrr rF namespacer@Zattrsr'valuerrrgetNodeDetailss:       zTreeWalker.getNodeDetailscCsDt|t stdt|s*|js*td|jr8|dfS|dSdS)NzText nodes have no childrenzNode has no childrenrr)rrBrCr2r)rrrrr getFirstChilds zTreeWalker.getFirstChildcCsbt|trL|\}}|dks&td||dkrDt|r>|dSdSn|jS|jrZ|dfS|jS)Nrrz%Text nodes are text or tail, found %sr)rr)rrBrCr2rr)rrr rrrgetNextSiblings zTreeWalker.getNextSiblingcCsJt|tr4|\}}|dks&td||dkrB|Sn||jkrBdS|jS)Nrrz%Text nodes are text or tail, found %s)rr)rrBrCr=r6)rrr rrr getParentNodes  zTreeWalker.getParentNodeN)r#r$r%rrLrMrNrOrrrrr:}s  ) r:N)Z __future__rrrZpip._vendor.sixrZlxmlrZtreebuilders.etreerr r robjectrrr)r*r>r:rrrrs      & +