Ë
    *Càe»  ã                   ór   — d Z ddlZddlZddlZddlZddlZ G d„ de«      Z G d„ de«      Z	 G d„ de«      Z
y)	z
Terminal / input handling
é    Nc                   óF   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zdd„Z	dd	„Z
dd
„Zy)ÚTerminalz@
    Do minimal terminal mangling to prompt users for input
    c                 óN   — || _         d | _        d | _        | j                  «        y ©N)ÚfdÚ
orig_flagsÚ	orig_termÚsave)Úselfr   s     ú*/usr/share/netplan/netplan_cli/terminal.pyÚ__init__zTerminal.__init__"   s    € ØˆŒØˆŒØˆŒØ�	‰	�ó    c                 óB  — t         j                  j                  «       r�t        j                  | j
                  «      }|d   t        j                  z  |d<   |d   t        j                  z  |d<   t        j                  | j
                  t        j                  |«       y y ©Né   ©
ÚsysÚstdinÚisattyÚtermiosÚ	tcgetattrr   ÚICANONÚECHOÚ	tcsetattrÚTCSANOW©r   Úattrss     r   Úenable_echozTerminal.enable_echo(   sq   € Ü�9‰9×ÑÔÜ×%Ñ% d§g¡gÓ.ˆEØ˜Q‘x¤'§.¡.Ñ0ˆE�!‰HØ˜Q‘x¤'§,¡,Ñ.ˆE�!‰HÜ×Ñ˜dŸg™g¤w§¡¸Õ>ð	 r   c                 óF  — t         j                  j                  «       rƒt        j                  | j
                  «      }|d   t        j                   z  |d<   |d   t        j                   z  |d<   t        j                  | j
                  t        j                  |«       y y r   r   r   s     r   Údisable_echozTerminal.disable_echo/   su   € Ü�9‰9×ÑÔÜ×%Ñ% d§g¡gÓ.ˆEØ˜Q‘x¤7§>¡> /Ñ1ˆE�!‰HØ˜Q‘x¤7§<¡< -Ñ/ˆE�!‰HÜ×Ñ˜dŸg™g¤w§¡¸Õ>ð	 r   c                 óà   — t        j                   | j                  t         j                  «      }t        j                   | j                  t         j                  |t        j
                  z  «       y r   ©Úfcntlr   ÚF_GETFLÚF_SETFLÚosÚ
O_NONBLOCK©r   Úflagss     r   Úenable_nonblocking_iozTerminal.enable_nonblocking_io6   s;   € Ü—‘˜DŸG™G¤U§]¡]Ó3ˆÜ�‰�D—G‘GœUŸ]™]¨E´B·M±MÑ,AÕBr   c                 óâ   — t        j                   | j                  t         j                  «      }t        j                   | j                  t         j                  |t        j
                   z  «       y r   r"   r(   s     r   Údisable_nonblocking_iozTerminal.disable_nonblocking_io:   s=   € Ü—‘˜DŸG™G¤U§]¡]Ó3ˆÜ�‰�D—G‘GœUŸ]™]¨E´R·]±]°NÑ,BÕCr   Nc           
      ón  — t        d«       t        «       }| j                  |«       | j                  «        | j	                  «        |sd}t        dj                  |«      «       |}|dkD  r¡t        dj                  |t        t        |«      «      «      d¬«       t        j                  t        j                  gg g d«       	 t        j                  j                  «       }|d	k(  r| j                  |«       t        «       ‚	 |dz  }|dkD  rŒ¡| j                  |«       t        «       ‚# t        $ r Y Œ1w xY w)
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_inputzTerminal.get_confirmation_input>   s  € ô 	Ð7Ô8ä“6ˆØ�	‰	�(ÔØ×ÑÔØ×"Ñ"Ô$áØ4ˆGäÐ8×?Ñ?ÀÓHÔIØˆØ˜QŠÜÐ9×@Ñ@ÀÌcÔRUÐV]ÓR^ÓN_Ó`ÐfjÕkô �M‰Mœ3Ÿ9™9˜+ r¨2¨qÔ1ðô —I‘I—N‘NÓ$�Ø˜’IØ—J‘J˜xÔ(ä'›/Ð)ð ð ˜1ÑˆKð% ˜Q‹ð. 	�
‰
�8ÔÜ‹oÐøô ò ñ ð	ús   Ã>D( Ä(	D4Ä3D4c                 ó(  — t        j                   | j                  t         j                  «      }d}t        j                  j                  «       rt        j                  | j                  «      }|�|j                  ||dœ«       y|| _	        || _
        y)z•
        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
   zTerminal.savep   sq   € ô —[‘[ §¡¬%¯-©-Ó8ˆ
Øˆ	Ü�9‰9×ÑÔÜ×)Ñ)¨$¯'©'Ó2ˆIØÐØ�K‰K *Ø!*ñ,õ -ð )ˆDŒOØ&ˆD�Nr   c                 ó~  — d}d}|�#|j                  d«      }|j                  d«      }n| j                  }| j                  }t        j                  j                  «       r/t        j                  | j                  t        j                  |«       t        j                  | j                  t        j                  |«       y)z¢
        Reset the terminal to its original attributes and flags

        Optional argument:
            - orig: if set, reset to settings from this dict
        NrD   r)   )Úgetr	   r   r   r   r   r   r   r   Ú	TCSAFLUSHr#   r%   )r   Úorigr	   r   s       r   r9   zTerminal.reset‚   s†   € ð ˆ	Øˆ
ØÐØŸ™ Ó(ˆIØŸ™ 'Ó*‰JàŸ™ˆIØŸ™ˆJÜ�9‰9×ÑÔÜ×Ñ˜dŸg™g¤w×'8Ñ'8¸)ÔDÜ�‰�D—G‘GœUŸ]™]¨JÕ7r   )éx   Nr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r    r*   r,   rB   r
   r9   © r   r   r   r      s2   „ ñòò?ò?òCòDó0ód'ô$8r   r   c                   ó   — e Zd ZdZy)r:   z Denotes has accepted inputN©rL   rM   rN   rO   rP   r   r   r:   r:   –   s   „ Ù%Ør   r:   c                   ó   — e Zd ZdZy)r<   z) Denotes that the user has rejected inputNrR   rP   r   r   r<   r<   ›   s   „ Ù3Ør   r<   )rO   r#   r&   r   r7   r   Úobjectr   Ú	Exceptionr:   r<   rP   r   r   ú<module>rV      sB   ðñ$ó Û 	Û Û Û 
ôv8ˆvô v8ôr	�Iô 	ô
	�Iõ 	r   