
    g                     r    S r SSKrSSKrSSKrSSKrSSKr " S S\5      r " S S\5      r	 " S S\5      r
g)	z
Terminal / input handling
    Nc                   T    \ rS rSrSrS rS rS rS rS r	SS	 jr
SS
 jrSS jrSrg)Terminal   z8
Do minimal terminal mangling to prompt users for input
c                 L    Xl         S U l        S U l        U R                  5         g N)fd
orig_flags	orig_termsave)selfr   s     */usr/share/netplan/netplan_cli/terminal.py__init__Terminal.__init__"   s    		    c                 P   [         R                  R                  5       (       a  [        R                  " U R
                  5      nUS   [        R                  -  US'   US   [        R                  -  US'   [        R                  " U R
                  [        R                  U5        g g N   
sysstdinisattytermios	tcgetattrr   ICANONECHO	tcsetattrTCSANOWr   attrss     r   enable_echoTerminal.enable_echo(   st    99%%dgg.EQx'..0E!HQx',,.E!Hdggw>	 r   c                 T   [         R                  R                  5       (       a  [        R                  " U R
                  5      nUS   [        R                  ) -  US'   US   [        R                  ) -  US'   [        R                  " U R
                  [        R                  U5        g g r   r   r   s     r   disable_echoTerminal.disable_echo/   sx    99%%dgg.EQx7>>/1E!HQx7<<-/E!Hdggw>	 r   c                     [         R                   " U R                  [         R                  5      n[         R                   " U R                  [         R                  U[        R
                  -  5        g r   fcntlr   F_GETFLF_SETFLos
O_NONBLOCKr   flagss     r   enable_nonblocking_ioTerminal.enable_nonblocking_io6   s;    DGGU]]3DGGU]]EBMM,ABr   c                     [         R                   " U R                  [         R                  5      n[         R                   " U R                  [         R                  U[        R
                  ) -  5        g r   r&   r,   s     r   disable_nonblocking_ioTerminal.disable_nonblocking_io:   s=    DGGU]]3DGGU]]ER]]N,BCr   Nc           
      ~   [        S5        [        5       nU R                  U5        U R                  5         U R	                  5         U(       d  Sn[        SR                  U5      5        UnUS:  a  [        SR                  U[        [        U5      5      5      SS9  [        R                  " [        R                  // / S5         [        R                  R                  5       nUS	:X  a  U R                  U5        [        5       e US-  nUS:  a  M  U R                  U5        [        5       e! [         a     N4f = f)
a]  
Get a "confirmation" input from the user, for at most (timeout)
seconds. Optionally, customize the message to be displayed.

timeout -- timeout to wait for input (default 120)
message -- optional customized message ("Press ENTER to (message)")

raises:
InputAccepted -- the user confirmed the changes
InputRejected -- the user rejected the changes
z%Do you want to keep these settings?

zaccept the new configurationz&Press ENTER before the timeout to {}

r   z%Changes will revert in {:>{}} seconds)end   
)printdictr   r#   r.   formatlenstrselectr   r   readresetInputAccepted	TypeErrorInputRejected)r   timeoutmessagesettingstimeout_nowcs         r   get_confirmation_inputTerminal.get_confirmation_input>   s    	786		(""$4G8??HIQ9@@cRUV]R^N_`fjk MM399+r2q1 IINN$IJJx('/)  1K% Q. 	

8o   	s   ?D/ /
D<;D<c                 4   [         R                   " U R                  [         R                  5      nSn[        R                  R                  5       (       a   [        R                  " U R                  5      nUb  UR                  UUS.5        gX l	        X0l
        g)zu
Save the terminal's current attributes and flags

Optional argument:
    - dest: if set, save settings to this dict
N)r-   term)r'   r   r(   r   r   r   r   r   updater	   r
   )r   destr	   r
   s       r   r   Terminal.savep   sp     [[%--8
	99))$''2IKK*!*, - )O&Nr   c                    SnSnUb#  UR                  S5      nUR                  S5      nOU R                  nU R                  n[        R                  R                  5       (       a0  [        R                  " U R                  [        R                  U5        [        R                  " U R                  [        R                  U5        g)z
Reset the terminal to its original attributes and flags

Optional argument:
    - orig: if set, reset to settings from this dict
NrK   r-   )getr
   r	   r   r   r   r   r   r   	TCSAFLUSHr'   r)   )r   origr
   r	   s       r   r?   Terminal.reset   s     	
(I'*JIJ99dggw'8'8)DDGGU]]J7r   )r   r	   r
   )x   Nr   )__name__
__module____qualname____firstlineno____doc__r   r    r#   r.   r1   rH   r   r?   __static_attributes__ r   r   r   r      s2    ??CD0d'$8r   r   c                       \ rS rSrSrSrg)r@      zDenotes has accepted inputr[   NrU   rV   rW   rX   rY   rZ   r[   r   r   r@   r@      s    %r   r@   c                       \ rS rSrSrSrg)rB      z(Denotes that the user has rejected inputr[   Nr^   r[   r   r   rB   rB      s    3r   rB   )rY   r'   r*   r   r=   r   objectr   	Exceptionr@   rB   r[   r   r   <module>rc      sB   $  	   
v8v v8r	I 	
	I 	r   