
    jjJ              	      v   d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlmZ ddlmZmZmZ ddlmZmZ ddlmZ ej6                  rdd	lmZ dd
lmZ  ej@                         Z! ejD                  e#      jH                  Z%e%jM                  d      jO                  d      Z(dZ)dZ*dZ+dZ,dZ-dZ.i dddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2Z/d3d4ja                   e1d5d6      D  cg c]
  }  e2|        c}       z   Z3e%jM                  d7      jO                  d      Z4d8d9e4z   d:z   d;e(z   d<z   gZ5 G d= d>e      Z6dJdKd?Z7dLd@Z8dLdAZ9ejt                   G dB dC             Z; e;       Z<e!dDdEf	 	 	 	 	 	 	 	 	 dMdFZ= G dG dH      Z>dNdIZ?yc c} w )Oz&
Urwid web application display module
    )annotationsN)suppress)calc_text_pos
calc_widthmove_next_char)StoppingContextget_encoding   )
BaseScreen)Literal)Canvasz_web.jsutf-8<         d   i   i @  black0zdark red1z
dark green2brown3z	dark blue4zdark magenta5z	dark cyan6
light gray7z	dark gray8z	light red9zlight greenAyellowBz
light blueCzlight magentaDz
light cyanEwhiteFz ????????????????????????????????        z_web.cssz<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Urwid Web Display - z!</title>
<style type="text/css">
a  
</style>
</head>
<body id="body" onload="load_web_display()">
<div style="position:absolute; visibility:hidden;">
<br id="br"\>
<pre>The quick brown fox jumps over the lazy dog.<span id="testchar">X</span>
<span id="testchar2">Y</span></pre>
</div>
Urwid Web Display - <b>z[</b> -
Status: <span id="status">Set up</span>
<script type="text/javascript">
//<![CDATA[
z7
//]]>
</script>
<pre id="text"></pre>
</body>
</html>
c                  "    e Zd Zd fdZedd       ZddZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZdddZd Z	ddZ
ddZdd	Zdd
ZddZddZddZddZddZddZddZej,                  d d       Zej,                  d!d       Zd"d#dZ xZS )$Screenc                L    t         |           i | _        d| _        d| _        y )NTF)super__init__palette	has_color_started)self	__class__s    Z/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/urwid/display/web.pyr/   zScreen.__init__~   s#        c                    | j                   S N)r2   r3   s    r5   startedzScreen.started   s    }}r6   c                    |D ]y  }t        |      dv r | j                  |   t        |      dk7  rt        d|      |\  }}|| j                  vrt	        d| d      | j                  |   | j                  |<   { y)zRegister a list of palette entries.

        palette -- list of (name, foreground, background) or
                   (name, same_as_other_name) palette entries.

        calls self.register_palette_entry for each item in l
        >   r         z Invalid register_palette usage: zpalette entry 'z' doesn't existN)lenregister_palette_entry
ValueErrorr0   KeyError)r3   r0   itemname	like_names        r5   register_palettezScreen.register_palette   s      		9D4yF"+++T24yA~ #CD8!LMM"OD),?KLL!%i!8DLL		9r6   c                D    |dk(  rd}|dk(  rd}|||f| j                   |<   y)a  Register a single palette entry.

        name -- new entry/attribute name
        foreground -- foreground colour
        background -- background colour
        mono -- monochrome terminal attribute

        See curses_display.register_palette_entry for more info.
        defaultr   r   N)r0   )r3   rC   
foreground
backgroundmonoforeground_highbackground_highs          r5   r?   zScreen.register_palette_entry   s3    $ " J"%J(*d;Tr6   c                     y)zNot yet implementedN )r3   enables     r5   set_mouse_trackingzScreen.set_mouse_tracking       r6   c                     y)zDo nothing.NrN   )r3   argsvargss      r5   tty_signal_keyszScreen.tty_signal_keys   rQ   r6   c                   | j                   rt        |       S t        j                  j	                  d      }|j                  d      st        |      |j                  dd      \  }}}}t        |      }t        |      }| j                  ||       i | _
        d| _        t        j                  d   | _        | j                  dvrt        | j                        | j                  dk(  rDt        j                   s4t        j"                  j%                  d	       t        j&                  d       t)        j(                  t        j*                  j-                  t        j.                  d
            }t1        |      t        j2                  k\  r4t        j"                  j%                  d       t        j&                  d       t5        j6                  d      dt5        j6                  d      d}t        j*                  j-                  t        j.                  d|       | _        t        j:                  | j8                   dd       t=        j<                  t<        j>                  | j@                         t        jB                  | j8                   dt        jD                  t        jF                  z        | _$        d| _%        d| d| _&        | j                  dk(  rd| d| _&        t=        j<                  t<        jN                  | jP                         t=        jR                  tT               d| _         t        |       S )z
        This function reads the initial screen size, generates a
        unique id and handles cleanup when fn exits.

        web_display.set_preferences(..) must be called before calling
        this function for the preferences to take effect
        2   window resize  r   r   HTTP_X_URWID_METHOD>   polling	multipartr[   Status: 403 Forbidden

z	urwid*.inzStatus: 503 Sever Busy

i ʚ;09durwid.ini  r(   zAContent-type: multipart/x-mixed-replace;boundary=ZZ
X-Urwid-ID: z


--ZZ
z&Content-type: text/plain
X-Urwid-ID: z


T)+r2   r   sysstdinread
startswithr@   splitint_set_screen_sizelast_screenlast_screen_widthosenvironupdate_method_prefsallow_pollingstdoutwriteexitglobpathjoinpipe_dirr>   max_clientsrandom	randrange	pipe_namemkfifosignalSIGTERM_cleanup_pipeopen
O_NONBLOCKO_RDONLYinput_fd
input_tailcontent_headSIGALRM_handle_alarmalarmALARM_DELAY)r3   client_init_ignore1_ignore2xyclientsurwid_ids           r5   startzScreen.start   sd    =="4((iinnR(%%&67[))#.#4#4S!#< (AqFFa#!"ZZ(=>%==T//00*63G3GJJ<=HHQK))BGGLL+FGw<6---JJ=>HHQK&&u-c263C3CE3J32OPfooxj7IJ
		T^^$C(%0fnnd&8&894>>"2# 68STQRZQ[[op 	 *"J8*T` aDfnnd&8&89[!t$$r6   c                   | j                   syt        t              5  | j                          ddd       t	        j                  t        j
                  t        j                         | j                          d| _         y# 1 sw Y   SxY w)z0
        Restore settings and clean up.
        NF)r2   r   	Exception_close_connectionr{   r|   SIG_DFLr}   r9   s    r5   stopzScreen.stop   sb     }} i  	%""$	%fnnfnn5		% 	%s   B  B	c                     y r8   rN   r3   rS   s     r5   set_input_timeoutszScreen.set_input_timeouts   s    r6   c                n   | j                   dk(  rY| j                  j                  d       | j                  j                         \  }}|j	                  d       |j                          | j                   dk(  r>t        j                  j                  d       t        j                  j                          y y )Npolling childr      Zr\   z
Z
--ZZ--
)
rl   server_socket
settimeoutacceptsendallclosera   ro   rp   flush)r3   sock_addrs      r5   r   zScreen._close_connection   s    0))!,,,335KD%LLJJL,JJ23JJ -r6   c                    | j                   sy t        t              5  t        j                  | j                    d       t        j                  | j                    d       d d d        y # 1 sw Y   y xY w)Nr`   .update)ry   r   r   rj   remover   s     r5   r}   zScreen._cleanup_pipe  sY    ~~i  	2II(,-II(01	2 	2 	2s   AA++A4c                V    t        |t              }t        |t              }||f| _        y)z&Set the screen size (within max size).N)minMAX_COLSMAX_ROWSscreen_size)r3   colsrowss      r5   rg   zScreen._set_screen_size  s(     4"4":r6   c                   |\  }}|| j                   k7  ri | _        | j                  g}| j                  dk(  r|j                  }n| j                  dk(  r@t        j                  d       	 | j                  j                         \  }}j                  }n0t        j                  d       |j                  } |d       d| _        |j                         |k7  rt        |      |j                   |j                   \  }	}
ndx}	}
i }d}|j#                         D ]Y  }|dz  }t%        d	 |D              }g }|}||
k(  rg ||	}g |j'                  |g       |||<   | j                  j'                  |d      x}||v r|}n|d   } |d
|dd       |d}|D ]  \  }}|j)                  t*              }|d\  }}}n| j,                  |   \  }}}||
k(  rf||	k  rat/        |dt1        |            }||z   |	kD  r!|j	                  t3        ||||	|z
               n|j	                  t3        |||             ||z  }|j	                  t3        |||               |dj5                  |       d       \ || _        || _         | j                  dk(  r{t        j6                  j9                  dj5                  |             t        j6                  j;                          t        j6                  j=                          | j?                          nt| j                  dk(  rj=                          nT |d       t        j6                  j9                  dj5                  |             t        j6                  j;                          t        j                  t@               y# t        j                  $ r t        j                  d       Y =w xY w)z#Send a screen update to the client.r[   r   r   z
r(   Nr
   c              3  Z   K   | ]#  \  }}}||j                  t                     f % y wr8   )decoder	   ).0attr__lines       r5   	<genexpr>z%Screen.draw_screen.<locals>.<genexpr>@  s&     Y>5!T5$++ln"=>Ys   )+<d
)r   r   Nz
--ZZ
)!ri   rh   r   rl   appendr{   r   r   r   sockettimeoutra   rq   r   r   r@   cursorcontenttupleget	translate_trans_tabler0   r   r>   	code_spanrt   ro   rp   r   r   _fork_childr   )r3   sizecanvasr   r   sendqsendsr   cxcy
new_screenr   rowl_rowr   sigold_line_numbersold_linecolarunt_runfgbg_mono	run_widths                              r5   draw_screenzScreen.draw_screen  sb    t4)))!D""#*<<D?2LLO--4465 99DLLO<<DL "D;;=D T""==$]]FBNB
>># $	'CFAYUXYYEDCBw jRj;
sB 7;;JsO$($4$4$8$8d$CC P(( H/2Hq!B'(C :3l39$?MBE$(LLOMBE7sby *5!SZ @IY+IeRR#X$FGIeR$<=9$CKK	%R 89:  BGGDM?"%&I$	'J &!%*JJRWWU^,JJJJ?2GGI JJRWWU^,JJ[!Q >> s   *N (OOc                     y)z
        Force the screen to be completely repainted on the next
        call to draw_screen().

        (does nothing for web_display)
        NrN   r9   s    r5   clearzScreen.cleart  rQ   r6   c                   t        | j                   d       t        j                  | j                   dt        j                  t        j
                  z        | _        d| _        t        j                  t        j                  t        j                        }|j                  | j                   d       |j                  d       |j                  t               || _        y)zw
        Fork a child to run CGI disconnected for polling update method.
        Force parent process to exit.
        z.errr`   r   r   r
   N)	daemonizery   rj   r~   r   r   r   rl   r   AF_UNIXSOCK_STREAMbindlistenr   POLL_CONNECTr   )r3   r   s     r5   r   zScreen._fork_child|  s    
 	T^^$D)*4>>"2# 68ST,MM&..&*<*<=	$..!)*		\"r6   c                   | j                   dvrt        | j                         | j                   dk(  r/	 | j                  j                         \  }}|j	                          n=t        j                  j                  d       t        j                  j                          t        j                  t               y # t
        j                  $ r t        j                  d       Y Dw xY w)N>   r\   r   r   r   z


--ZZ
)rl   r@   r   r   r   r   r   ra   rq   ro   rp   r   r{   r   r   )r3   r   framer   r   s        r5   r   zScreen._handle_alarm  s    %CCT//000--4465	
 JJ/0JJ[! >> s   -B9 9(C$#C$c                    | j                   S )zReturn the screen size.)r   r9   s    r5   get_cols_rowszScreen.get_cols_rows  s    r6   c                     y r8   rN   r3   raw_keyss     r5   	get_inputzScreen.get_input  s    @Cr6   c                     y r8   rN   r   s     r5   r   zScreen.get_input  s    QTr6   c                   g }d}t        j                         5 }|j                  | j                  t         j                         |j                  d      D cg c]  \  }}|j                   }}}ddd       s|rg g fS g S t        j                  | j                  t              j                  t                     }t        j                  | j                         t        j                  | j                   dt        j                  t        j                   z        | _        |j#                  d      }	| j$                  |	d   z   |	d<   |	d   | _        |	dd D ]f  }
|
j'                  d      rB|
j#                  d	d
      \  }}}}t)        |      }t)        |      }| j+                  ||       d}V|j-                  |
       h |r|j-                  d       |r|g fS |S c c}}w # 1 sw Y   txY w)zReturn pending input as a list.Fg      ?Nr`   r   r   r   rX   rY   r   Tzwindow resize)	selectorsDefaultSelectorregisterr   
EVENT_READselectfdrj   rc   MAX_READr   r	   r   r~   ry   r   r   re   r   rd   rf   rg   r   )r3   r   pending_inputresizedselectoreventr   ireadykeydatakeysk_ign1_ign2r   r   s                  r5   r   zScreen.get_input  s   &&( 	EHdmmY-A-AB/7s/CD85!ehhDFD	E
 2vI''$--299,.I
4>>"2# 68ST}}T"//DG+Qr(cr 	(A||,-%&WWS!_"uaFF%%a+$$Q'	(   1 "$$; E	E 	Es   ?G#G.G#G##G-)returnNoner   bool)NNN)rC   
str | NonerH   strrI   r  rJ   r  rK   r  rL   r  r   r   )T)rO   r  r   r   )r   r   )rS   z
typing.Anyr   r   )r   rf   r   rf   r   r   )r   tuple[int, int]r   r   r   r   )r   r  )r   zLiteral[False]r   z	list[str])r   zLiteral[True]r   ztuple[list[str], list[int]])F)r   r  r   z'list[str] | tuple[list[str], list[int]])__name__
__module____qualname__r/   propertyr:   rE   r?   rP   rU   r   r   r   r   r}   rg   r   r   r   r   r   typingoverloadr   __classcell__)r4   s   @r5   r,   r,   }   s      92  &*&*<< < 	<
 < $< $< 
<0"3%j	2&X"t"   __C C__T T$ $r6   r,   c                    t         |   }t         |   }|dk\  r\t        | dt        |       |      \  }}t        | |t        |             }||z   | d | z   dz   |z   |z   | || z   dz   |z   |z   | |d  z   dz   S ||z   | z    dS )Nr   r   )_code_coloursr   r>   r   )	r   r   r   r   code_fgcode_bgc_off_ignc2_offs	            r5   r   r     s    BGBG{#Aq#a&&9t5#a&1 i  	
  fo   	 j
 	
 !#$B''r6   c                 &    dt         j                  v S )z3
    Return True if this is a CGI web request.
    REQUEST_METHOD)rj   rk   rN   r6   r5   is_web_requestr    s     rzz))r6   c                 j   t               syt        j                  d   dk(  rWt        j                  j                  dt        j                  t        j                        j                  t              z          yt        j                  d   dk7  rydt        j                  vryt        j                  d   } t        |       dkD  r t        j                  j                  d	       y| D ]5  }|t        j                  vst        j                  j                  d
        y t        j                  j                  dd      dk(  rt!        j                   t         j"                  t         j$                        }	 |j'                  t        j(                  j                  t        j*                  d|  d             d|j-                  t.               }|r7t        j                  j                  |       |j-                  t.              }|r7y	 t        j2                  t        j(                  j                  t        j*                  d|  d      t        j4                        }t        j6                  j9                  t:              }t        j
                  ||j=                  d             t        j>                  |       t        j                  j                  d       y# t0        $ r" t        j                  j                  d       Y yw xY w# t0        $ r" t        j                  j                  d       Y yw xY w)ar  
    Handle short requests such as passing keystrokes to the application
    or sending the initial HTML page.  If returns True, then this
    function recognized and handled a short request, and the calling
    script should immediately exit.

    web_display.set_preferences(..) should be called before calling this
    function for the preferences to take effect
    Fr  GETzContent-type: text/html

TPOSTHTTP_X_URWID_ID   zStatus: 414 URI Too Long

r]   rZ   Nr[   r_   r   zContent-type: text/plain

zStatus: 404 Not Found

r`   ascii) r  rj   rk   ra   ro   rp   htmlescaperm   app_namert   
_html_pager>   stringdigitsr   r   r   r   connectrs   ru   recvBUF_SZOSErrorr~   O_WRONLYrb   rc   r   encoder   )r   cr   datar   r   s         r5   handle_short_requestr*    sM    	zz"#u,

:T[[=Y=^=^_i=jjk	zz"#v-

*zz+,H
8}r 	

;< FMM! JJ<= 
zz~~+T2i?MM&..&*<*<=	IIbggll6??eH:W4MNO5affVn5EFD

  &vvf~  WWbggll6??eH:S4IJR[[Y iinnX&GHHR()HHRLJJ78%  	JJ<=	  

89s&   4BK AL (LL(L21L2c                  F    e Zd ZU dZded<   eZded<   dZded<   dZd	ed
<   y)_PreferenceszUnnamed Applicationr  r  ru   Tr  rn   r  rf   rv   N)	r  r  r  r  __annotations__TEMP_DIRru   rn   rv   rN   r6   r5   r,  r,  1  s*    )Hc)HcM4Kr6   r,  Tr  c                \    | t         _        |t         _        |t         _        |t         _        y)a  
    Set web_display preferences.

    app_name -- application name to appear in html interface
    pipe_dir -- directory for input pipes, daemon update sockets
                and daemon error logs
    allow_polling -- allow creation of daemon processes for
                     browsers without multipart support
    max_clients -- maximum concurrent client connections. This
               pool is shared by all urwid applications
               using the same pipe_dir
    N)rm   r  ru   rn   rv   )r  ru   rn   rv   s       r5   set_preferencesr0  <  s"    $ FOFO(F$Fr6   c                      e Zd ZddZddZy)ErrorLogc                    || _         y r8   )errfile)r3   r4  s     r5   r/   zErrorLog.__init__U  s	    r6   c                    t        | j                  dd      5 }|j                  |       d d d        y # 1 sw Y   y xY w)Nr   r   encoding)r~   r4  rp   )r3   errfs      r5   rp   zErrorLog.writeX  s4    $,,g6 	!GGCL	 	 	s   4=N)r4  zstr | pathlib.PurePathr   r   )r8  r  r   r   )r  r  r  r/   rp   rN   r6   r5   r2  r2  T  s    r6   r2  c                   t        j                         rt        j                  d       t        j                          t	        j                  t        j
                  t        j                         t        j                  d       t        j                         rt        j                  d       t        j                  d       t        d      D ]/  }t        t              5  t        j                  |       ddd       1 t        dd      t        _        t        ddd      t        _        t#        |       t        _        y# 1 sw Y   }xY w)	z-
    Detach process and become a daemon.
    r   /r  Nz	/dev/nullr   r6  w)rj   fork_exitsetsidr{   SIGHUPSIG_IGNumaskchdirranger   r%  r   r~   ra   rb   ro   r2  stderr)r4  r   s     r5   r   r   ]  s     
wwy
IIK
MM&--0HHQK	wwy
HHSMBi g 	HHRL	 	 [73CIk39CJ'"CJ	 	s    EE	)r   )
r   r  r   r  r   r  r   rf   r   r  r   )
r  r  ru   r  rn   r  rv   rf   r   r   )r4  r  r   r   )@__doc__
__future__r   dataclassesrr   r  rj   pathlibrw   r   r{   r   r   ra   tempfiler	  
contextlibr   urwid.str_utilr   r   r   
urwid.utilr   r	   commonr   TYPE_CHECKINGtyping_extensionsr   r_   r   
gettempdirr.  Path__file__parentCURRENT_DIRjoinpath	read_text_js_coder   r   r   r   r   r$  r  rt   rD  chrr   
_css_styler  r,   r   r  r*  	dataclassr,  rm   r0  r2  r   )r   s   0r5   <module>r\     s  * #    	       
    D D 4 	)8 gll8$++	*44W=	S # S	
  C  #   3 c # S #  S!( "''5S>"Ba3q6"BCC!!*-77@

 		
 )!
HKZ K\
(4*BJ    

 	%%% % 	%
 
%0 #S #Cs   F6
