*CerdZddlZddlZddlZddlZddlZGddeZGddeZ GddeZ y) z Terminal / input handling NcFeZdZdZdZdZdZdZdZd dZ d d Z d d Z y) Terminalz@ Do minimal terminal mangling to prompt users for input cN||_d|_d|_|jyN)fd orig_flags orig_termsave)selfrs */usr/share/netplan/netplan_cli/terminal.py__init__zTerminal.__init__"s  cBtjjrtj|j }|dtj z|d<|dtjz|d<tj|j tj|yyN sysstdinisattytermios tcgetattrrICANONECHO tcsetattrTCSANOWr attrss r enable_echozTerminal.enable_echo(sq 99   %%dgg.EQx'..0E!HQx',,.E!H   dggw > rcFtjjrtj|j }|dtj z|d<|dtjz|d<tj|j tj|yyrrrs r disable_echozTerminal.disable_echo/su 99   %%dgg.EQx7>>/1E!HQx7<<-/E!H   dggw > rctj|jtj}tj|jtj|tj zyrfcntlrF_GETFLF_SETFLos O_NONBLOCKr flagss r enable_nonblocking_iozTerminal.enable_nonblocking_io6s; DGGU]]3 DGGU]]EBMM,ABrctj|jtj}tj|jtj|tj zyrr"r(s r disable_nonblocking_iozTerminal.disable_nonblocking_io:s= DGGU]]3 DGGU]]ER]]N,BCrNc ntdt}|j||j|j |sd}tdj ||}|dkDrtdj |t t|dtjtjgggd tjj}|d k(r|j|t |dz}|dkDr|j|t#t$rY1wxYw) 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? zaccept the new configurationz&Press ENTER before the timeout to {} rz%Changes will revert in {:>{}} seconds )end )printdictr r r*formatlenstrselectrrreadreset InputAccepted TypeError InputRejected)r timeoutmessagesettings timeout_nowcs r get_confirmation_inputzTerminal.get_confirmation_input>s 786 (  ""$4G 8??HI Q 9@@cRUV]R^N_`fj k MM399+r2q 1 IINN$IJJx('/) 1 K%Q. 8o   s>D(( D43D4c(tj|jtj}d}tjj rt j|j}||j||dy||_ ||_ y)z Save the terminal's current attributes and flags Optional argument: - dest: if set, save settings to this dict N)r)term) r#rr$rrrrrupdaterr )r destrr s r r z Terminal.savepsq[[%--8  99   ))$''2I   KK*!*, -)DO&DNrc~d}d}|#|jd}|jd}n|j}|j}tjj r/t j|jt j|tj|jtj|y)z Reset the terminal to its original attributes and flags Optional argument: - orig: if set, reset to settings from this dict NrDr)) getr rrrrrrr TCSAFLUSHr#r%)r origr rs r r9zTerminal.resets   (I'*JIJ 99      dggw'8'8) D DGGU]]J7r)xNr) __name__ __module__ __qualname____doc__r rr r*r,rBr r9rr rrs2 ??CD0d'$8rrceZdZdZy)r:z Denotes has accepted inputNrLrMrNrOrPrr r:r:s%rr:ceZdZdZy)r<z) Denotes that the user has rejected inputNrRrPrr r<r<s3rr<) rOr#r&rr7robjectr Exceptionr:r<rPrr rVsB$  v8vv8r I  I r