B C÷;]&ýã@sÐdZddlmZddddddd d d d d ddddd dgZddlZddlZddlZddlmZyddl m Z m Z Wn$e k r’ddl m Z m Z YnXddlmZddlmZddlmZyddlmZWn e k rèddlmZYnXyeWnek �r eZYnXyeWnek �r4eefZYnXdd„ZdZejdd eid!�Zejd"d eid!�Zejd#d eid!�Z e d$¡Z!e d%¡Z"e d&¡Z#e $d'ej%¡j&Z'e $d(¡j&Z(ejd)d eid!�Z)e $d*¡Z*e $d+ej%¡j+Z,d,d-„Z-d.d/„Z.d0d1„Z/Gd2d3„d3e ƒZ0Gd4d5„d5e1ƒZ2Gd6d7„d7e1ƒZ3e3d d8d9�Z4e3d d8d9�Z5e3dd:d9�Z6e3dd:d9�Z7e3dd8d9�Z8e3dd:d9�Z9Gd;d<„d„d>eje2ƒZ?GdAdB„dBej@e2ƒZAGdCdD„dDejBƒZCe $edEƒej%¡jDZEe $dE FdF¡ej%¡jDZGd~dGd„ZHddHd„ZId€dId„ZJd�dJd„ZKd‚dKd„ZLdLdM„ZMdNdO„ZNGdPdQ„dQe=ƒZOeOeCjPdR<dƒdSd „ZQdTdU„ZRGdVdW„dWe ƒZSGdXdY„dYe1ƒZTGdZd[„d[e1ƒZUGd\d]„d]eUe=ƒZVeVeCjPd^<Gd_d`„d`eUe=ƒZWeWeCjPda<Gdbdc„dceƒZXGddde„deeYƒZZGdfdg„dgeYƒZ[Gdhdi„dieƒZ\Gdjdk„dkeUe=ƒZ]e]eCjPdl<Gdmdn„dne=ƒZ^e^eCjPdo<dpdq„Z_drds„Z`e $dt¡jaZbe $dt Fdu¡¡jaZcd„dwd„Zdeedjƒed_d…dxd „ZeGdydz„dzejfƒZfGd{d|„d|ejgƒZhd}d„ZiefƒZjehƒZkdS)†z.The ``lxml.html`` tool set for HTML handling. é)Úabsolute_importÚdocument_fromstringÚfragment_fromstringÚfragments_fromstringÚ fromstringÚtostringÚElementÚdefsÚopen_in_browserÚ submit_formÚfind_rel_linksÚ find_classÚmake_links_absoluteÚresolve_base_hrefÚ iterlinksÚ rewrite_linksÚparseN)Úpartial)ÚMutableMappingÚ MutableSeté)Úetreeé)r )ÚSetMixin)ÚurljoincCsB|s|Stjddkr(t dtj¡j}nt dtj¡j}|d|ƒS)Nréz^(\s*)u'z^(\s*)b'z\1')ÚsysÚ version_infoÚreÚcompileÚMÚsub)Úsr!©r#úE/opt/alt/python37/lib64/python3.7/site-packages/lxml/html/__init__.pyÚ__fix_docstringKs r%zhttp://www.w3.org/1999/xhtmlz9descendant-or-self::a[@rel]|descendant-or-self::x:a[@rel]Úx)Ú namespacesz7descendant-or-self::option|descendant-or-self::x:optionz3descendant-or-self::form|descendant-or-self::x:formztdescendant-or-self::*[@class and contains(concat(' ', normalize-space(@class), ' '), concat(' ', $class_name, ' '))]zdescendant-or-self::*[@id=$id]zstring()z&url\((["][^"]*["]|['][^']*[']|[^)]*)\)z@import "(.*?)"z%//label[@for=$id]|//x:label[@for=$id]z[^ ]+z%[^;=]*;\s*(?:url\s*=\s*)?(?P.*)$cCs`|dd…dkr |dd…dks@|dd…dkrT|dd…dkrT|dd…|dfS||fSdS)Nrú"éÿÿÿÿú'r#)r"Úposr#r#r$Ú_unquote_matchjs@r,cCs4t|tƒrt|dd�St|tƒr,t|dd�S|SdS)z1Convert the result back into the input type. zutf-8)ÚencodingÚunicodeN)Ú issubclassÚbytesrr.)ÚtypÚresultr#r#r$Ú_transform_resultqs     r3cCs@t|tƒr<|ddkr<|dttƒd…tkr<| d¡dS|S)NrÚ{rÚ}r))Ú isinstanceÚ basestringÚlenÚXHTML_NAMESPACEÚsplit)Útagr#r#r$Ú_nons|s $r<cs`eZdZdZdd„Zdd„Zdd„Z‡fdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z ‡Z S)ÚClassesa*Provides access to an element's class attribute as a set-like collection. Usage:: >>> el = fromstring('') >>> classes = el.classes # or: classes = Classes(el.attrib) >>> classes |= ['block', 'paragraph'] >>> el.get('class') 'hidden large block paragraph' >>> classes.toggle('hidden') False >>> el.get('class') 'large block paragraph' >>> classes -= ('some', 'classes', 'block') >>> el.get('class') 'large paragraph' cCs||_t|jddƒ|_dS)NÚclassÚ)Ú _attributesrÚgetÚ_get_class_value)ÚselfZ attributesr#r#r$Ú__init__”szClasses.__init__cCsR|rt d|¡rtd|ƒ‚| ¡ ¡}||kr4dS| |¡d |¡|jd<dS)z[ Add a class. This has no effect if the class is already present. z\szInvalid class name: %rNú r>)rÚsearchÚ ValueErrorrBr:ÚappendÚjoinr@)rCÚvalueÚclassesr#r#r$Úadd˜s   z Classes.addcsbˆrt dˆ¡rtdˆƒ‚‡fdd„| ¡ ¡Dƒ}|rLd |¡|jd<nd|jkr^|jd=dS)zn Remove a class if it is currently present. If the class is not present, do nothing. z\szInvalid class name: %rcsg|]}|ˆkr|‘qSr#r#)Ú.0Úname)rJr#r$ú ®sz#Classes.discard..rEr>N)rrFrGrBr:rIr@)rCrJrKr#)rJr$Údiscard¦s  zClasses.discardcs0|rt d|¡rtd|ƒ‚tt|ƒ |¡dS)zw Remove a class; it must currently be present. If the class is not present, raise a KeyError. z\szInvalid class name: %rN)rrFrGÚsuperr=Úremove)rCrJ)Ú __class__r#r$rRµs zClasses.removecCs| ¡}||ko|| ¡kS)N)rBr:)rCrNrKr#r#r$Ú __contains__¿szClasses.__contains__cCst| ¡ ¡ƒS)N)ÚiterrBr:)rCr#r#r$Ú__iter__ÃszClasses.__iter__cCst| ¡ ¡ƒS)N)r8rBr:)rCr#r#r$Ú__len__ÆszClasses.__len__cCsL| ¡ ¡}d}x"|D]}||kr| |¡d}qW|rHd |¡|jd<dS)z. Add all names from 'values'. FTrEr>N)rBr:rHrIr@)rCÚvaluesrKÚextendedrJr#r#r$ÚupdateËs   zClasses.updatecCs€|rt d|¡rtd|ƒ‚| ¡ ¡}y| |¡d}Wn"tk r\| |¡d}YnX|rtd |¡|jd<n|jd=|S)zÑ Add a class name if it isn't there yet, or remove it if it exists. Returns true if the class was added (and is now enabled) and false if it was removed (and is now disabled). z\szInvalid class name: %rFTrEr>) rrFrGrBr:rRrHrIr@)rCrJrKÚenabledr#r#r$ÚtoggleØs     zClasses.toggle)Ú__name__Ú __module__Ú __qualname__Ú__doc__rDrLrPrRrTrVrWrZr\Ú __classcell__r#r#)rSr$r=ƒs  r=csðeZdZd+‡fdd„ Zedd„ƒZejdd„ƒZedd„ƒZed d „ƒZed d „ƒZ ed d„ƒZ edd„ƒZ e jdd„ƒZ e j dd„ƒZ dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zd,d d!„Zd-d#d$„Zd.d%d&„Zd'd(„Zd/d)d*„Z‡ZS)0Ú HtmlMixinNcstt|ƒ ||¡dS)z÷set(self, key, value=None) Sets an element attribute. If no value is provided, or if the value is None, creates a 'boolean' attribute without value, e.g. "
" for ``form.set('novalidate')``. N)rQÚ HtmlElementÚset)rCÚkeyrJ)rSr#r$rdñsz HtmlMixin.setcCs t|jƒS)zB A set-like wrapper around the 'class' attribute. )r=Úattrib)rCr#r#r$rKúszHtmlMixin.classescCsBt|tƒst‚| ¡}|r(| d|¡n| d¡dk r>|jd=dS)Nr>)r6r=ÚAssertionErrorrBrdrArf)rCrKrJr#r#r$rKs cCs | ¡jjS)zŸ Returns the base URL, given when the page was parsed. Use with ``urlparse.urljoin(el.base_url, href)`` to get absolute URLs. )Z getroottreeÚdocinfoÚURL)rCr#r#r$Úbase_url szHtmlMixin.base_urlcCst|ƒS)z0 Return a list of all the forms )Ú _forms_xpath)rCr#r#r$ÚformsszHtmlMixin.formscCs|jddtid�dS)zt Return the element. Can be called from a child element to get the document's head. z//body|//x:bodyr&)r'r)Úxpathr9)rCr#r#r$ÚbodyszHtmlMixin.bodycCs|jddtid�dS)zu Returns the element. Can be called from a child element to get the document's head. z//head|//x:headr&)r'r)rmr9)rCr#r#r$Úhead#szHtmlMixin.headcCs2| d¡}|sdSt||d�}|s&dS|dSdS)zN Get or set any