
    &=d7T                     Z   d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ ddlmZmZmZmZ d dlmZ 	 d dlZd dlZn# e$ r  ed          w xY wej                                        ZeZd Zd	 Z G d
 de          Zd Z G d dej                  Z  G d de!          Z" G d de"          Z# G d de"          Z$ G d de"          Z% G d de%          Z&d Z'd Z(e(Z)e(Z*	 	 d.dZ+d/dZ,	 	 d0d Z-	 	 d1d!Z.d2d"Z/	 	 	 d3d%Z0d4d&Z1d5d'Z2	 	 d6d)Z3	 	 	 	 d7d*Z4g d+Z5d, Z6d- Z7dS )8    N)UINotImportable	NoPackageNoBugsNoReportQuertBTSError)launch_browser   )display_reportewritespawn_editorsystem)VERSIONz?Please install the python3-urwid package to use this interface.c                      t           j                                        } |                     t                     |                     d           | S )Ng?)max_wait)urwidraw_displayScreenregister_palettepaletteset_input_timeouts)uis    7/usr/lib/python3/dist-packages/reportbug/ui/urwid_ui.pyinitialize_urwid_uir   7   sF    			!	!	#	#B   3'''I    c                      d S N r   r   r   nullfuncr   @   s    Dr   c                       e Zd ZdS )
buttonpushN)__name__
__module____qualname__r   r   r   r    r    E   s        Dr   r    c                 *    t          | j                  r   r    exitcode)buttons    r   button_pressr(   I   s    
V_
%
%%r   c                       e Zd Zd ZdS )SelectableTextc                     dS )NFr   )selfchs     r   
valid_charzSelectableText.valid_charN   s    ur   N)r!   r"   r#   r.   r   r   r   r*   r*   M   s#            r   r*   c                   B    e Zd Z	 	 ddZddZd Zd Zd	 Zd
 ZddZ	dS )dialogN c                    || _         d| _        |sx|rIt          |          }|                    d           t	          j        |g          x| _         }d| _        n-t	          j        t	          j                    d          x| _         }|sd}|sd}t	          j        |d          | _	        |rCt	          j
        t	          j        |          t	          j                    g          | j	        _        | j	        }t	          j        |d	d
          }t	          j        |dd          }t	          j        |d          }|r/t	          j        |          }t	          j        d|f          |_        t	          j        |ddt	          j        t	          j        t	          j        d          d          d          fg          }t	          j        |t	          j        t	          j        d          d                    }t	          j        |d|          }t	          j        |d|          }t	          j        |d          }|| _        d S )NF)	edit_textr   TtoprelativeP   footer)
focus_part)z
fixed left   )zfixed rightr:   )z	fixed topr	   )zfixed bottomr	   bodytitlefixedr	   )border shadow)r8   centermiddler>   )r;   
scrollmoder*   set_edit_posr   ListBoxFillerDividerFrameframePileTextheaderPaddingAttrWrapColumnsview)	r,   messager;   widthheightr<   long_messageboxws	            r   __init__zdialog.__init__S   s
   	 	H H$|<<<  ####(=##7#77	D"&#(<#G#GG	D 	%$E 	&%F[(;;;
 	> %
EJw,?,?,1MOO,= !> !>DJ JM!.0BCCL,.ABBN1f%% 	4AAz7E"233AH M1w5>%,uzRaGbGbdi:j:jlt+u+uvwxxK%.O1L1Lh"W"WXXXM!Xu--LHf--N1h''			r   r   Fc                 (   g }|D ]\  }}|dk    r*t          j        |          }t          j        |d          }n7t          j        || j                  }||_        t          j        |dd          }|                    |           |rt          j        |          }|                    |pd           t          j	        t          j        |d                    | _
        t          j        | j
        t          t          |          d                    | j        _        d S t          j        |ddd	d
          | _
        | j
                            |pd           t          j        t          j                    | j
        gd	          | j        _        d S )N---scrolllabel
selectablefocusr   
         r	   rA   )
focus_item)r   rK   rN   Buttonr(   r&   appendrE   	set_focusrH   buttons
BoxAdapterminlenrI   r8   GridFlowrJ   rG   )	r,   rd   defaultverticallinamer&   brU   s	            r   add_buttonszdialog.add_buttons   se   % 		 		ND(5  Jt$$N1m44Lt'899%
N1lG<<IIaLLLL 		9-##CMM',Q''' ;u~c<'H'HIIDL % 0s3r77B?O?O P PDJ >"b!QAADLL""7<a000 %
EMOOT\+J67!9 !9 !9DJr   c                 *    t          |j                  r   r%   )r,   r'   s     r   r(   zdialog.button_press   s    )))r   c           	         | j                                         }	 	 | j                            |d          }| j                             ||           d }|s| j                                         }||D ]}t          j                            |          r'|\  }}}}| j        	                    |||||d           |dk    r| j                                         }| j        
                    ||          }|r|                     ||           # t          $ r*}	|                     |	j        d                   cY d }	~	S d }	~	ww xY w)NTr\   zwindow resizer   )r   get_cols_rowsrP   renderdraw_screen	get_inputr   utilis_mouse_eventmouse_eventkeypressunhandled_keyr    on_exitargs)
r,   sizecanvaskeyskeventr'   colrowes
             r   runz
dialog.run   s   w$$&&	+4))$d);;##D&111 /7,,..D  / 
4 
4Az0033 :23/vsC	--d.3VS#48 . : : : O++#w4466	**433A 4**4333!4"  	+ 	+ 	+<<q	********	+s   C5D 
ED?9E?Ec                     |S r   r   r,   r&   s     r   r{   zdialog.on_exit   s    r   c                 
   |dv rG| j         j        }|dk    r| j                             d           n| j                             d           |dv rv| j        r6| j                             d           | j                            ||           n9|dv r| j                             d           n| j                             d           |dk    r7| j                             d           | j                            ||           d S d S )N)tabz	shift tabr8   r;   )uppage updownz	page down)r   r   enter)rI   r9   rc   rC   r;   ry   rP   )r,   r}   r   r\   s       r   rz   zdialog.unhandled_key   s   $$$J)E  
$$V,,,,
$$X...666 /
$$V,,,	""4++++'''
$$V,,,,
$$X...<<J  ***ItQ''''' <r   c                 z    |r|| _         nt                      | _         | j                             | j                  S r   )r   r   run_wrapperr   )r,   r   s     r   mainzdialog.main   s8     	,DGG)++DGw""48,,,r   )NNNr1   r1   )r   Fr   )
r!   r"   r#   rW   rn   r(   r   r{   rz   r   r   r   r   r0   r0   R   s        >B(** * * *X9 9 9 90* * *+ + +0  ( ( (,- - - - - -r   r0   c                       e Zd ZddZdS )
displayboxNc                 D   |r|| _         nt                      | _         | j                                         }| j                            |d          }| j                                          | j                             ||           | j                                          d S )NTrq   )r   r   rr   rP   rs   startrt   stop)r,   r   r}   r~   s       r   showzdisplaybox.show   s     	,DGG)++DGw$$&&!!$d!33D&)))r   r   )r!   r"   r#   r   r   r   r   r   r      s(        	 	 	 	 	 	r   r   c                        e Zd Z	 	 ddZd ZdS )	textentryNFr1   c                    t          j        ||          | _        t          j        | j        g          }t          j        |dd          }|s>t          j        dd|ft          j                    g          }t          j        |          }t          	                    | |||||           | j
                            d           d S )N)r3   	multiliner[   	focustextr=   r	   r;   )r   EditeditrE   rN   rJ   rG   rF   r0   rW   rI   rc   )r,   textrR   rS   r   r<   r3   r;   s           r   rW   ztextentry.__init__   s    JiHHH	}di[))~dL+>> 	&:D15=??CDDD<%%DdD%???
V$$$$$r   c                 8    || j                                         fS r   )r   get_edit_textr   s     r   r{   ztextentry.on_exit   s    002222r   )NNFr1   r1   r!   r"   r#   rW   r{   r   r   r   r   r      s=        @E%'% % % %3 3 3 3 3r   r   c                        e Zd Z	 	 ddZd ZdS )
listdialogFNr1   r^   c                    g }g | _         |D ]x\  }	}
| j                             |	           |
r,t          j        d||	ft          j        |
          gd          }	t          j        |	dd          }	|                    |	           yt          j        |          }t          j        |d          }t                              | |||||           | j	        
                    d           d S )Nr=   r:   r[   r\   )rS   rR   r;   r<   r;   )itemsrb   r   rO   rK   rN   rE   r0   rW   rI   rc   )r,   r   widgetshas_defaultrR   rS   r<   buttonwidthrk   rV   labellbs               r   rW   zlistdialog.__init__   s    
! 	 	JQJa    :MG[!#<#(:e#4#4#678: :q,88AIIaLLLL]2^B--d6R# 	 	% 	% 	% 	
V$$$$$r   c                     |r|dfS | j         D ]>}t          |d          r,|                                r||                                fc S ?|dfS )z#Print the tag of the item selected.N	get_state)r   hasattrr   	get_label)r,   r&   is      r   r{   zlistdialog.on_exit  sj     	"T>! 	/ 	/Aq+&& /1;;== /....~r   )FNNr1   r^   r   r   r   r   r   r      s=        ?C46% % % %&    r   r   c                       e Zd Zd ZdS )checklistdialogc                     |r|g fS g }| j         D ]=}|                                r'|                    |                                           >||fS )z{
        Mimic dialog(1)'s --checklist exit.
        Put each checked item in double quotes with a trailing space.
        )r   r   rb   r   )r,   r&   rk   r   s       r   r{   zchecklistdialog.on_exit  sa    
  	 R< 	) 	)A{{}} )		!++--(((|r   N)r!   r"   r#   r{   r   r   r   r   r     s#            r   r   c                 V   |r| t          |          z  } d|v r	|d         }nd}d|v r	|d         }nd }t          j        d|           }d |D             }d                    |                                          } t          d| |pt                    }|                    |           d S )Nr<   r1   r   z

+c                 ^    g | ]*}t          j        d d|                                          +S \s+r?   resubstrip.0xs     r   
<listcomp>z#display_message.<locals>.<listcomp>1  2    ===bfVS!$$**,,===r   

rT   r<   )tupler   splitjoinr   r   r   r   rQ   r|   kwargsr<   r   chunksrU   s          r   display_messager   !  s     (E$KK'&wv~~D\ Xgw''F==f===Fkk&!!''))G
RgU5Eg
F
F
FCHHRLLLLLr   c                    |r| t          |          z  } d|v r	|d         }nd}d|v r	|d         }nd }t          j        d|           }d |D             }d                    |                                          } t          d| |pt                    }|                    dg           |                    |           d S )	Nr<   r1   r   z
+c                 ^    g | ]*}t          j        d d|                                          +S r   r   r   s     r   r   z long_message.<locals>.<listcomp>H  r   r   r   r   OKr   )	r   r   r   r   r   r0   r   rn   r   r   s          r   rT   rT   8  s     (E$KK'&wv~~D\ XeW%%F==f===Fkk&!!''))G
'1A'
B
B
BCOOYK   HHRLLLLLr   Fc                 
   t          j        t           j                  }|                     |d                              d          }t          d|d|pt                    }	|si }g }
d }t          |          D ]Z\  }}|                                r|}|	                                }|

                    |                    ||          |f           [|	                    |
|d           |	                    |          }|S )Nreplace)errorsr1   r5   )rT   rS   r<   T)rj   )localenl_langinfoCODESETencodedecoder0   r   	enumerateisupperlowerrb   getrn   r   )msgokhelpallow_numbersnowrapr   r<   locsafe_msgrU   rd   ri   r   optionresults                  r   select_optionsr   T  s   

V^
,
,Czz#iz0077y7IIH
(3C') ) )C GGr]] ; ;	6>> 	$G\\^^F00&9::::OOGWtO444XXb\\FMr   Tc                     t          d| t                    }|                    ddgdt          |          z
             |                    |          }|S )Nr1   r   )YesT)NoFr	   )ri   )r0   r   rn   intr   )r   yeshelpnohelpri   r   r   rU   r   s           r   yes_nor   j  sP    
#W
5
5
5COO]M2AG<LOMMMXXb\\FMr   r1   c                     |rt           d|}nt           }t          | ||          }|                    dg           |                    |          \  }}	|	p|S )N: )r<   r3   r   )r   r   rn   r   )
promptoptionsr<   empty_okforce_promptri   r   rU   coder   s
             r   
get_stringr   q  sf     #GGUU+
F%7
;
;
;COOYK   "JD$?7r   c                     |rt           d|}nt           }t          | d          }|                    dg           |                    |          \  }}|                    d          }|S )Nr   T)r   r   
)r   r   rn   r   r   )	r   r   r<   r   r   rU   r   r   rk   s	            r   get_multiliner   ~  sp     #GGUU+
Fd
+
+
+COOYK   "JD$	D		BIr   c                 *    t          j         |           S r   )getpass)r   s    r   get_passwordr     s    ?6"""r   OkCancelc           	      (   |sg }nt          |          }sd|rt          d|}nt          }t          |t                    r|                                }|r}g }|D ]&}||v r |                    |||         f           ||= 't          |                                          }|                                 |D ]}|                    |           |}n5t          |                                          }|                                 g }|D ]J\  }}|r,|                    |t          j	        dd|          f           3|                    ||f           K|}|rfd|D             }t          | |d|          }|r|                    |df|d	f|d
fg           n|                    |df|d	fg           |                    |
          \  }}|dk     rd S |S d }g }g }|D ]\  }}|dk    r,t          j        |          }t          j        |d          }d}nBt          j        | |||          |k              }||_        t          j        |dd          }|                    ||f           t%          | |d|d          }|r|                    |df|d	f|d
fg           n|                    |df|d	fg           d}r%t'          |          D ]\  }}|d         k    r|} n|                    |
          \  }}|dk     r|S |S )Nr1   r   r   r?   c                 R    g | ]#\  }}t          j        ||k               |pdf$S )stater1   )r   CheckBox)r   r   descri   s      r   r   zmenu.<locals>.<listcomp>  sM     ? ? ?$2VT N6&G2CEEEJB  ? ? ?r   r5   )rS   r<   r   c                     | S r   r   )r   r   s     r   label_buttonzmenu.<locals>.label_button  s    r   rY   rZ   r   r[   r\   r^   )rS   r<   r   )listr   
isinstancedictcopyrb   r   sortr   r   r   rn   r   r   rK   rN   RadioButtonr&   r   r   )parr   r   ri   r<   any_okorderextrasmultipler   r   oklabelcancellabel	quitlabelolistkeyr   optsr   r   rU   r   chosenr  rlistrm   r\   r   opts      `                         r   menur    s     f  #GGUU+'4   ,,.. 	E % %'>>LL#ws|!4555 7==??++GLLNNN! % %V$$$$GG7==??++GLLNNND ( ( 	(KKT!:!:;<<<<KK''''G ? ? ? ?6=? ? ?c73C$)+ + + 	?OOgq\K+<'_. / / / / OOgq\K+<=>>>"A::4   GE 
" 
"U??
4  Aq-00ADD!%fd)C)CFV]L]___AAJq,88A4y!!!!
S'*: b2 2 2C ;'1R'89b/JKKKK'1R'89:::E (( 	 	FAs1v   ! XXb\\NFFzzMr   c                 (    t          | |||          S )N)r<   r   ri   )r   )r   r<   r   ri   s       r   get_filenamer    s"    fE%' ' ' 'r   c           
      0    t          | |||||dd          S )NTF)r<   r  r  r  r   )r  )r
  r   r   r<   r  r  s         r   select_multipler    s*    WfEv/ / / /r   noc
                    ddl m}
 |}|st                      }|
j        |         }t	          d| |d         ||           |
                    | |||||          }|st          d| ||           d S t          dd	d
d          }d}	 |\  }}|d         }t          |||j	        ||          }d }|r|dk    rn5|dk    rdS |dk    r|S t          |
                    || |                     fd S )Nr   debbugsz4Retrieving report #%d from %s bug tracking system...rl   )r<   r   )mirrors
http_proxyarchivedzBug report #%d not found.r   zMore details (launch browser)zSubmit more informationQuit)odmqOdmqr	   )r<   r   r   r%  r(  r   r'  )	reportbugr   r   SYSTEMSr   
get_reportrT   r  r   subjectr   get_report_url)numberbtsr!  r"  timeoutscreen	queryonlyr<   r#  mbox_reader_cmdr   r   sysinfoinfor   validbuginfobodiesr;   rs                       r   show_reportr;    sl    "!!!!!	B # ""oc"GJGFO5RA A A A fgsG)3h  H HD 0&"MMMMT<.&: : :GEF &ay4go"7SSS 	Q#XX#XX2#XXNw--c68DDEEEF Fr   c                 2  # ddl m} |j        |         }|                    d          }|st	          d|d                    d S |}|st                      }t          | t                    r/| }|	r|dz  }t          d|j        |         d         |||           nBt          d	|j        |         d         d
	                    d | D                       ||           d }	 |
                    | ||||
|||	          \  }}}nW# t          $ rJ}|                    t                     d|d         dt          |          d}t          |          d }~ww xY w	 |s*|                    t                     |t           t"          |dk    rd|fz  }nd|fz  }g }|D ]\  }}|                    d|f           i #|D ]#}d}|j        dk    rd}|j        |z   #|j        <   $t-          t/          |j        #fdt1          #|          D                                  |d         d         }|rd}d } nd}d} 	 t3          t5          d|d|||d|| 	  	                  }!d }|!dk     r3|!d k    rd }n)|!d!k    rt6          |                    |!|          d         }nt;          |!|||||"          }"|"r|"}n{n@# t           $ r3 |                    t                     t=          d#|$           t           w xY w|r!t          ||j        j                   st6          |S )%Nr   r  btsrootz8%s bug tracking system has no web URL; bypassing query.
rl   z	 (source)z1Querying %s bug tracking system for reports on %s)r   r<   z.Querying %s bug tracking system for reports %sr?   c                 ,    g | ]}t          |          S r   strr   s     r   r   z$handle_bts_query.<locals>.<listcomp>B  s    !:!:!:Q#a&&!:!:!:r   )r!  versionr"  r#  sourcezUnable to connect to z BTS (error: "z"); r	   z%d bug reports foundz%d bug report foundrY   r1   donez  [RESOLVED]c                 >    g | ]}t          |          |         fS r   r?  )r   r   buglist_tmps     r   r   z$handle_bts_query.<locals>.<listcomp>f  s(    )v)v)vq3q66;q>*B)v)v)vr   )reverseExitzNew bugr$  TzPSelect a bug to read (and possibly report more information) or report a new bug:zRead bug)r   r<   ri   r  r  r  r   r  )r3  z No record of this package found.)r<   )!r*  r   r+  r   r   r   r  r@  r   r   get_reports	Exceptionr   r   reprr   r   r   rb   pendingr-  bug_numr  mapsortedr   r  r   r,  r;  rT   	debianbts	Bugreport)$packager0  r1  r!  r"  r3  r2  r<   r#  rB  rA  mboxbuglistr4  latest_firstr   r5  rootr   pkgnamer   countsectitle	hierarchyr   errmsgtbugsbugrC  pr  r  r6  resrE  s$                                      @r   handle_bts_queryr`  &  s5    "!!!!!oc"G;;y!!D Jv	  	  	 	B # ""'3 Q 	#{"GK,V4gU	, 	, 	, 	, 	, 	H,V4!:!:'!:!:!:;;%	Q 	Q 	Q 	Q F$'.':':Wc7G!HV (; (E (E$))  $ $ $
x    BI&///SWXYSZSZSZSZ[F###$
> 8	NN8$$$ qyy1UH<0E8;G& 
y 
y	Dqz***  B BCD{f,,-/2{T/AK,,S)v)v)v)vFS^htLuLuLu)v)v)vwwxxxx
1A #$ 		'"	4 r '(A(2,7*3	5 5 5 6 6
 !88rzz!%& ")!3!3D'!B!B1!E%dC*&-D D DC !$-0    
x   7uEEEE  j):)DEE Ms&   !D 
EAEEEJ4 4=K1))r;   black
light graystandout)r>   ra  	dark blue)r@   whitera  )r[   ra  	dark cyan)r\   re  rd  bold)r   rb  rd  )r<   zdark redrb  )rZ   re  rf  c                      dS )NTr   r   r   r   
initializeri    s    4r   c                  >    t           j                                        S r   )sysstdinisattyr   r   r   	can_inputrn    s    9r   )NFFNN)TFN)NNFFr1   N)NNFNr   )NNFNNFFNr   r   N)NFr1   )NNN)NFr1   r  N)Nr1   FNr1   r  FNFNNF)8r   rk  r   r   reportbug.exceptionsr   r   r   r   r   reportbug.urlutilsr   text_uir
   r   r   r   r*  r   urwid.raw_displayr   ImportErrorrl  rm  ISATTYlog_messager   r   rI  r    r(   r   r*   objectr0   r   r   r   r   r   rT   final_messagedisplay_failurer   r   r   r   r   r  r  r  r;  r`  r   ri  rn  r   r   r   <module>ry     s  4  



 				               . - - - - -                 ]LLLL ] ] ]
/[
\
\\] 
				  	 	 	
	 	 	 	 	 	 	 	& & &    UZ   
~- ~- ~- ~- ~-V ~- ~- ~-B
 
 
 
 
 
 
 
3 3 3 3 3 3 3 3$       >    j      .  0  DI"&   ,    OT"
 
 
 
 BG   # # # # AFEI7;_ _ _ _F' ' ' '
/ / / / JL/3% % % %P FHFJEI8=m m m m`	 	 	      s   A A