K i*02ddlZddlZddlmZmZmZmZmZmZm Z m Z m Z m Z ddl mZddlmZmZmZmZmZgdidfdidfd id fd id fd idfdidfdidfdidfdidfdidfdidfdidfdidfdid fd!id"fd#id$fd%id&fd'd(d)d*gid+fd,d(d*gid-fd.id/fd0id1fd2id3fd4id5fd6d(d)d7gid8fd9id:fd;idfd=d?d@id=fdAd@d@dBdCfdDdEd@idFfdGidHfdGd(dIgidJfdKdLdMidNfdOdLdPidQfdKdLdRidNfZGdSdTej,Zy)UN) utf8 xhtml_escapexhtml_unescape url_escape url_unescape to_unicode json_decode json_encodesqueezerecursive_unicode) unicode_type)ListTupleUnionDictAnyzhello http://world.com/!z8hello http://world.com/!z0hello http://world.com/with?param=true&stuff=yeszqhello http://world.com/with?param=true&stuff=yesz>http://url.com/w(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz]http://url.com/w(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz>http://url.com/withmany.......................................zdhttp://url.com/withmany.......................................z;http://url.com/withmany((((((((((((((((((((((((((((((((((a)zahttp://url.com/withmany((((((((((((((((((((((((((((((((((a)zhttp://foo.com/blah_blahz?http://foo.com/blah_blahzhttp://foo.com/blah_blah/zAhttp://foo.com/blah_blah/z)(Something like http://foo.com/blah_blah)zP(Something like http://foo.com/blah_blah)z$http://foo.com/blah_blah_(wikipedia)zWhttp://foo.com/blah_blah_(wikipedia)z+http://foo.com/blah_(blah)_(wikipedia)_blahzehttp://foo.com/blah_(blah)_(wikipedia)_blahz5(Something like http://foo.com/blah_blah_(wikipedia))zh(Something like http://foo.com/blah_blah_(wikipedia))zhttp://foo.com/blah_blah.z@http://foo.com/blah_blah.zhttp://foo.com/blah_blah/.zBhttp://foo.com/blah_blah/.zzG<http://foo.com/blah_blah>zzI<http://foo.com/blah_blah/>zhttp://foo.com/blah_blah,z@http://foo.com/blah_blah,z&http://www.example.com/wpstyle/?p=364.zZhttp://www.example.com/wpstyle/?p=364.z rdar://1234permitted_protocolshttprdarz%rdar://1234z rdar:/1234z#rdar:/1234z'http://userid:password@example.com:8080z]http://userid:password@example.com:8080zhttp://userid@example.comzAhttp://userid@example.comzhttp://userid@example.com:8080zKhttp://userid@example.com:8080z"http://userid:password@example.comzShttp://userid:password@example.comzFmessage://%3c330e7f8409726r6a4ba78dkf1fd71420c1bf6ff@mail.gmail.com%3emessagezmessage://%3c330e7f8409726r6a4ba78dkf1fd71420c1bf6ff@mail.gmail.com%3euhttp://➡.ws/䨹u1http://➡.ws/䨹zhttp://example.comzJ<tag>http://example.com</tag>zJust a www.example.com link.zAJust a www.example.com link.require_protocolTz:A http://reallylong.com/link/that/exceedsthelenglimit.html)rshortenzA http://reallylong.com/link...z6A http://reallylongdomainnamethatwillbetoolong.com/hi!rzA http://reallylongdomainnametha...!z/A file:///passwords.txt and http://web.com linkzLA file:///passwords.txt and http://web.com linkfilezSA file:///passwords.txt and http://web.com linkzwww.external-link.com extra_paramsrel="nofollow" class="external"z`www.external-link.comz;www.external-link.com and www.internal-link.com/blogs extrac,|jdrdSdS)Nzhttp://www.internal-link.comzclass="internal"r) startswithhrefs ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/tornado/test/escape_test.pyr!s#??#AB#7zwww.external-link.com and www.internal-link.com/blogs extracy)Nz% rel="nofollow" class="external" rs r r!r!sr"cNeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z y ) EscapeTestCasectD]8\}}}tjj|fi|}|j ||:y)N) linkify_teststornadoescapelinkify assertEqual)selftextkwargshtmllinkeds r test_linkifyzEscapeTestCase.test_linkifysA"/ + D&$^^++D;F;F   VT * +r"c gd}|D]_\}}|jtt|t||jt|tt|ay)N)zz <foo>r4)ss <foo>)z<>&"'z<>&"')z&z &amp;)u<é>u <é>)s<é>s <é>)r,rrrr-tests unescapedescapeds r test_xhtml_escapez EscapeTestCase.test_xhtml_escapes] #( M Iw   T,y"9:DM J   T)_d>'3J.K L Mr"cVgd}|D] \}}|j|t|"y)N))z foo barfoo bar)z foo barr;)z foo barr;)z foo઼baru foo઼bar) foo&#xyz;barr<) foo&#;barr=) foo&#x;barr>)r,r)r-r6r8r7s r test_xhtml_unescape_numericz*EscapeTestCase.test_xhtml_unescape_numerics6 #( A GY   Yw(? @ Ar"cdjdfdjddfdg}|D] \}}|jt||"y)Né%C3%A9latin1z%E9)rArB)encoder,rr5s r test_url_escape_unicodez&EscapeTestCase.test_url_escape_unicodesY__  ) __X & .  #( = Iw   Z 2G < =r"cdddtddfg}|D]P\}}}|jtt||||jtt|||Ry)N)rBrAr)rBuérCrBrA)rr,rr)r-r6r8r7encodings r test_url_unescape_unicodez(EscapeTestCase.test_url_unescape_unicodesp ( 0 tH~t ,  -2 O (GY   \*W*=xH) T   \$w-BI N  Or"cd}d}d}|jt|||jt|d||jt|||jt|d||jt|dt||jt|ddt|y)Nz+ #%z %2B+%23%25z %2B%20%23%25F)plus)rG)rGrJ)r,rrr)r-r7 plus_escapedr8s r test_url_escape_quote_plusz)EscapeTestCase.test_url_escape_quote_pluss #   I. = IE:GD l3Y? gE:IF lTBDOT  4e J *5=9E5>J *5>:NK *5>:EBr"N)__name__ __module__ __qualname__r2r9r?rErHrLrRrTrZr\rdr$r"r r&r&s@+ M A = O  B BH Cr"r&)unittestr)tornado.escaperrrrrrr r r r tornado.utilr typingrrrrrr(TestCaser&r$r"r rms   &00 # B ; { I g( I n'2 F k1@ # I?J $ KIT 4 ZS^ / a]h 6 ogr @ rq| $ J{F % LEP % QOZ & SYd $ Jcn 1 dmx   01/wB  )-AL 2 gKV $ KU` ) U_j - ]it Q  34 Us@ " GJ ( TIT ' KS^ ' T"&]h E!d3 ngt A D ns@ : VJ : )]IT :;jS^ F   s ]v MNju DnCX&&nCr"