bgdZddlmZgdZddlZddlZddlZddlmZ ddl m Z m Z n#e $r ddl m Z m Z YnwxYwddlmZd d lmZd d lmZ dd lmZn#e $r dd lmZYnwxYw en #e$reZYnwxYw en#e$reefZYnwxYwd ZdZejddeiZejddeiZejddeiZ ejdZ!ejdZ"ejdZ#ej$dej%j&Z'ej$dj&Z(ejddeiZ)ej$dZ*ej$dej%j+Z,dZ-dZ.dZ/Gdd e Z0Gd!d"e1Z2Gd#d$e1Z3e3d%d&'Z4e3d(d&'Z5e3d)d*'Z6e3d+d*'Z7e3d,d&'Z8e3d-d*'Z9Gd.d/e2ej:Z;Gd0d1e2ej<Z=Gd2d3e2ej>Z?Gd4d5e2ej@ZAGd6d7ejBZCej$ed8ej%jDZEej$d8Fd9ej%jDZGdld:ZH dmd;ZI dmd<ZJdnd=ZKdnd>ZLd?ZMd@ZNGdAdBe=ZOeOeCjPdC<dndDZQdEZRGdFdGe ZSGdHdIe1ZTGdJdKe1ZUGdLdMeUe=ZVeVeCjPdN<GdOdPeUe=ZWeWeCjPdQ<GdRdSeZXGdTdUeYZZGdVdWeYZ[GdXdYeZ\GdZd[eUe=Z]e]eCjPd\<Gd]d^e=Z^e^eCjPd_<d`Z_daZ`ej$dbjaZbej$dbFdcjaZc dodeZdeedjed_dpdfZeGdgdhejfZfGdidjejgZhdkZiefZjehZkdS)qz.The ``lxml.html`` tool set for HTML handling. )absolute_import)document_fromstringfragment_fromstringfragments_fromstring fromstringtostringElementdefsopen_in_browser submit_formfind_rel_links find_classmake_links_absoluteresolve_base_href iterlinks rewrite_linksparseN)partial)MutableMapping MutableSet)etree)r )SetMixinurljoinc|s|Stjddkr%tjdtjj}n$tjdtjj}|d|S)Nrz^(\s*)u'z^(\s*)b'z\1')sys version_inforecompileMsub)sr$s e/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib64/python3.11/site-packages/lxml/html/__init__.py__fix_docstringr'Ks`  ajbd++/jbd++/ 3vq>>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.*)$c|dddkr|dddks|dddkr|dddkr|dd|dzfS||fS)Nr"')r%poss r&_unquote_matchr2jsb!u||"### 2A2#!BCC&C--2wA~u r(ct|trt|dSt|trt|dS|S)z1Convert the result back into the input type. zutf-8)encodingunicode) issubclassbytesrr5)typresults r&_transform_resultr:qsS#u1111 C ! !3333 r(ct|trO|ddkrC|dttdztkr|ddS|S)Nr{r}r.) isinstance basestringlenXHTML_NAMESPACEsplit)tags r&_nonsrD|s\#z""& q6S==S3#7#7#9!9:oMM99S>>"% % Jr(cReZdZdZdZdZdZfdZdZdZ dZ d Z d Z xZ 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' cJ||_t|jdd|_dS)Nclass) _attributesrget_get_class_value)self attributess r&__init__zClasses.__init__s&% '  D Dr(c|rtjd|rtd|z|}||vrdS||d||jd<dS)z[ Add a class. This has no effect if the class is already present. \sInvalid class name: %rN rH)r!search ValueErrorrLrBappendjoinrJrMvalueclassess r&addz Classes.adds  ? %// ?5=>> >''))//11 G   Fu$'HHW$5$5!!!r(c&rtjdrtdzfd|D}|rd||jd<dSd|jvr |jd=dSdS)zn Remove a class if it is currently present. If the class is not present, do nothing. rQrRc g|] }|k| Sr0r0).0namerYs r& z#Classes.discard..s)%%%Demm#mmr(rSrHN)r!rTrUrLrBrWrJrXs ` r&discardzClasses.discards  ? %// ?5=>> >%%%%D$9$9$;$;$A$A$C$C%%%  *(+(9(9D W % % % ( ( ( )))) (r(c|rtjd|rtd|ztt||dS)zw Remove a class; it must currently be present. If the class is not present, raise a KeyError. rQrRN)r!rTrUsuperrFremove)rMrY __class__s r&rdzClasses.removesX  ? %// ?5=>> > gt##E*****r(c^|}||vo||vSN)rLrB)rMr_rZs r& __contains__zClasses.__contains__s/''))w:47==??#::r(cht|Srg)iterrLrBrMs r&__iter__zClasses.__iter__s(D))++1133444r(cht|Srg)r@rLrBrks r&__len__zClasses.__len__s(4((**0022333r(c|}d}|D]}||vr||d}|rd||jd<dSdS)z. Add all names from 'values'. FTrSrHN)rLrBrVrWrJ)rMvaluesrZextendedrYs r&updatezClasses.updates''))//11  EG##u%%%  :(+(9(9D W % % % : :r(ct|rtjd|rtd|z|} ||d}n'#t$r||d}YnwxYw|rd||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). rQrRFTrSrH) r!rTrUrLrBrdrVrWrJ)rMrYrZenableds r&togglezClasses.toggles ? %// ?5=>> >''))//11  NN5 ! ! !GG    NN5 ! ! !GGG   *(+(9(9D W % % )sA))!B  B )__name__ __module__ __qualname____doc__rOr[rardrhrlrnrrru __classcell__res@r&rFrFs EEE 6 6 6 * * *+++++;;;555444 : : :r(rFcVeZdZdfd ZedZejdZedZedZedZ edZ ed Z e jd Z e j d Z d Z d ZdZdZdZdZddZ ddZddZdZ ddZxZS) HtmlMixinNcZtt|||dS)zset(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)rcr}set)rMkeyrYres r&rz HtmlMixin.sets+ i""3.....r(c*t|jS)zB A set-like wrapper around the 'class' attribute. )rFattribrks r&rZzHtmlMixin.classess t{###r(ct|tsJ|}|r|d|dS|d |jd=dSdS)NrH)r>rFrLrrKr)rMrZrYs r&rZzHtmlMixin.classessu'7+++++((**  % HHWe $ $ $ $ $ XXg   * G$$$+ *r(c>|jjS)z Returns the base URL, given when the page was parsed. Use with ``urlparse.urljoin(el.base_url, href)`` to get absolute URLs. ) getroottreedocinfoURLrks r&base_urlzHtmlMixin.base_url s!!)--r(c t|S)z0 Return a list of all the forms ) _forms_xpathrks r&formszHtmlMixin.formss D!!!r(cJ|ddtidS)zt Return the element. Can be called from a child element to get the document's head. z//body|//x:bodyr)r*rxpathrArks r&bodyzHtmlMixin.body% zz+_8MzNNqQQr(cJ|ddtidS)zu Returns the element. Can be called from a child element to get the document's head. z//head|//x:headr)r*rrrks r&headzHtmlMixin.head#rr(cn|d}|sdSt||}|sdS|dS)zN Get or set any