
    Je)                         d Z ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZmZ  G d	 d
ee      Zy)z#
External Kernel connection widget
    N)jupyter_runtime_dir)getopenfilename)Qt)	QCheckBoxQDialogQDialogButtonBoxQGridLayout	QGroupBoxQHBoxLayoutQLabel	QLineEditQPushButtonQRadioButtonQSpacerItemQVBoxLayout)SpyderConfigurationAccessor)_get_home_dirc                   R     e Zd ZdZdZd	 fd	Zd Zd Zd Zd Z	e
d
d       Z xZS )KernelConnectionDialogz?Dialog to connect to existing kernels (either local or remote).zexisting-kernelc                    t         t        |   |       | j                  t	        d             t        t	        d            }|j                  d       |j                  t        j                         |j                  d       t        t	        d            }t               | _        | j                  j                  t	        d             | j                  j                  d       t        t	        d            }|j                   j#                  | j$                         t'               }|j)                  |       |j)                  | j                         |j)                  |       t+        t	        d            | _        t        t	        d	            }t               | _        t        t	        d
            }t               | _        | j0                  j3                  d       t        t	        d            }t               | _        t+        t	        d            }	t7               | _        t        t	        d            }
t7               | _        t        t	        d            }t               | _        | j<                  j?                  t        j@                         | j8                  jB                  j#                  | j<                  jD                         | j:                  jB                  j#                  | j<                  jF                         t               | _$        t        t	        d            }|j                   j#                  | jJ                         t'               }|j)                  | jH                         |j)                  |       t        t	        d            }t               | _&        | jL                  j                  t	        d             | jL                  j?                  t        j@                         | j:                  jB                  j#                  | jH                  jD                         | j:                  jB                  j#                  | jL                  jD                         | j:                  jB                  j#                  |jD                         | j:                  jB                  j#                  |jD                         | j8                  jB                  j#                  | jH                  jF                         | j8                  jB                  j#                  | jL                  jF                         | j8                  jB                  j#                  |jF                         | j8                  jB                  j#                  |jF                         tO               }|j)                  |dddd       |j)                  | j.                  dd       |j)                  |dd       |j)                  | j0                  dd       |j)                  |dddd       |j)                  | j4                  dddd       tO               }|j)                  | j8                  dd       |j)                  |
dd       |j)                  | j<                  dd       |j)                  | j:                  dd       |j)                  |dd       |jQ                  |dd       |j)                  |dd       |j)                  | jL                  dd       |	jS                  |       tU               }|jQ                  |       |jW                  tY        dd             |j)                  |	       | j,                  jS                  |       | j,                  j[                  d       | j,                  jB                  j#                  | j8                  j\                         t_        t^        j`                  t^        jb                  z  t        jd                  |       | _3        | jf                  jh                  j#                  | jj                         | jf                  jh                  j#                  | jl                         | jf                  jn                  j#                  | jp                         ts        |       | _:        | jt                  jw                  t	        d             t'               }|j)                  | jt                         |j)                  | jf                         tU        |       }|j)                  |       |jW                  tY        dd             |jQ                  |       |jW                  tY        dd             |j)                  | j,                         |jQ                  |       | j                  jy                          | j{                          y )NzConnect to an existing kernelah  <p>Please select the JSON connection file (<i>e.g.</i> <tt>kernel-1234.json</tt>) of the existing kernel, and enter the SSH information if connecting to a remote machine. To learn more about starting external kernels and connecting to them, see <a href="https://docs.spyder-ide.org/5/panes/ipythonconsole.html#using-external-kernels">our documentation</a>.</p>TzConnection file:zKernel connection file pathi^  Browsez!This is a remote kernel (via SSH)z	Hostname:zPort:K   z	Username:zAuthentication method:z	Password:zSSH keyfile:z
Passphase:Optionalr                  zSave connection settings   )>superr   __init__setWindowTitler   r   setWordWrapsetAlignmentr   AlignJustifysetOpenExternalLinksr   cfsetPlaceholderTextsetMinimumWidthr   clickedconnectselect_connection_filer   	addWidgetr
   rm_grouphnpnsetMaximumWidthunr   pw_radiokf_radiopwsetEchoModePasswordtoggled
setEnabledsetDisabledkfselect_ssh_keykfpr	   	addLayout	setLayoutr   addSpacerItemr   setCheckable
setCheckedr   OkCancel
Horizontalaccept_btnsacceptedsave_connection_settingsacceptrejectedrejectr   save_layoutsetTextsetFocusload_connection_settings)selfparent
main_labelcf_labelcf_open_btn	cf_layouthn_labelpn_labelun_label
auth_grouppw_labelkf_labelkf_open_btn	kf_layout	kfp_label
ssh_layoutauth_layout	rm_layoutbtns_layoutlayout	__class__s                       U/usr/lib/python3/dist-packages/spyder/plugins/ipythonconsole/widgets/kernelconnect.pyr"   zKernelConnectionDialog.__init__!   s   $d4V<A=>?A)* +
 	t$0''- !./0+""1%B#CD$!!H+.##D$?$?@M	H%DGG$K( "!$G"HI !K.)+!G*%+#!K.)+ q!9:;
$!K.)$!N+,+I../%%dgg&8&89%%dgg&9&9:+!!H+.##D$7$78M	DGG$K(1\?+	;##AjM2Y//0%%dgg&8&89%%dhh&9&9:%%k&<&<=%%i&:&:;%%dgg&9&9:%%dhh&:&:;%%k&=&=>%%i&;&;< !]
Xq!Q2TWWa+Xq!,TWWa+Xq!Q2TWWaAq1 "mdmmQ2h1-dggq!,dmmQ2h1-iA.iA.dhh1-[)  M	J'Aq 12J'	*""4(%%dmm&>&>? ,"2"9"99MM4! 	!!))$*G*GH!!))$++6!!))$++6 %T?  #=!>?!md../d../ T"$[A./#[B/0'%%%'    c                    | j                  di       }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }t        |j                  dd	            }|j                  d
d      }|j                  dd      }|dk7  r| j                  j	                  |       |dk7  r| j
                  j	                  |       |dk7  r| j                  j	                  |       |dk7  r| j                  j	                  |       | j                  j                  |       | j                  j	                  |       | j                  j                  |       | j                  j                  |        	 ddl}	|	j                  dd      }
|	j                  dd      }|
r| j                  j	                  |
       |r| j                   j	                  |       yy# t"        $ r Y yw xY w)z<Load the user's previously-saved kernel connection settings.settingsjson_file_path 	is_remoteFusernamehostnameport   is_ssh_keyfilessh_key_file_pathr   Nspyder_remote_kernelssh_key_passphrasessh_password)get_confgetstrr(   rN   r3   r0   r<   r/   rC   r1   r5   r4   keyringget_passwordr>   r6   	Exception)rQ   existing_kernelconnection_file_pathrl   rm   rn   ro   	is_ssh_kfssh_kfry   ssh_passphraseru   s               rf   rP   z/KernelConnectionDialog.load_connection_settings   s   --
B7.223CRH#''U;	"&&z26"&&z26?&&vr23#''(8%@	 $$%8"=2%GGOO01r>GGOOH%r>GGOOH%R<GGOOF#  +  +  Y/	$112H2FHN"//0F0>@L  0-  		s   A"G, ,	G87G8c                    | j                   j                         syt        | j                  j                               }| j                  j                         | j                  j                         | j                  j                         | j                  j                         | j                  j                         || j                  j                         d}| j                  d|       	 ddl}|r,|j                  dd| j                  j                                y|j                  dd| j                  j                                y# t         $ r Y yw xY w)z'Save user's kernel connection settings.N)rj   rl   rm   rn   ro   rq   rr   ri   r   rs   rt   ru   )rM   	isCheckedboolr5   r(   textr/   r3   r0   r1   r<   set_confry   set_passwordr>   r6   r{   )rQ   
is_ssh_keyconnection_settingsry   s       rf   rI   z/KernelConnectionDialog.save_connection_settings   s     ))+$--1134
"gglln002GGLLN(!%
 	j"56	$$%;%9%)XX]]_6 $$%;%3%)WW\\^5  		s   ,1E
 +E
 
	EEc                 ~    t        | t        d      t               d      d   }| j                  j	                  |       y )NzSelect kernel connection filez*.json;;*.*r   )r   r   r   r(   rN   )rQ   r(   s     rf   r-   z-KernelConnectionDialog.select_connection_file   s8    T1%D#E02MCCDFrg   c                 ~    t        | t        d      t               d      d   }| j                  j	                  |       y )NzSelect SSH keyfilez*.pem;;*r   )r   r   r   r<   rN   )rQ   r<   s     rf   r=   z%KernelConnectionDialog.select_ssh_key   s5    T1%9#:)^Z99:<rg   c                    |st        |       }|j                         }t        |j                  j	                               }|t
        j                  k(  }|rnd }|j                  j                         r|j                  j                         rz|j                  j                         r|j                  j                         nd}dj                  |j                  j                         |j                  j                         |      }nd }|j                  j	                         r# ||j                  j                               }d }	n_|j                  j	                         rA ||j                  j                               }	 ||j                   j                               }nd }	d }|j"                  j                         ||	||fS |j"                  j                         }
t%        j&                  |
      t%        j(                  |
      }}|dk(  r5|j+                  d      s$t%        j,                  t/               d|
z   dz         }
|
d d d |fS )Nc                     | r| S d S N )args    rf   falsy_to_nonezGKernelConnectionDialog.get_connection_parameters.<locals>.falsy_to_none   s    !s+t+rg   22z{0}@{1}:{2}rk   z.jsonzkernel-)r   exec_r   r/   r   r   Acceptedr0   r   r3   r1   formatr4   r6   r5   r<   r>   r(   ospdirnamebasenameendswithjoinr   )rR   dialogresultrl   rH   r   ro   rn   passwordkeyfilepath_dirfilenames                rf   get_connection_parametersz0KernelConnectionDialog.get_connection_parameters   s   +F3F2245	W---,yy~~FIINN$4+199>>+;vyy~~'(//		0@06		0@046  ((*()9:**,'		(89():;IINN$h8LL99>>#D [[.T0B(Drz("3"3G"<xx 3 5y~g7MN$dH55rg   r   )NN)__name__
__module____qualname____doc__CONF_SECTIONr"   rP   rI   r-   r=   staticmethodr   __classcell__)re   s   @rf   r   r      s;    I$LD(L$L>

  6  6rg   r   )r   os.pathr   r   jupyter_core.pathsr   qtpy.compatr   qtpy.QtCorer   qtpy.QtWidgetsr   r   r   r	   r
   r   r   r   r   r   r   r   spyder.api.config.mixinsr   spyder.config.baser   r   r   r   rg   rf   <module>r      sH   
  3 ' ) ) ) ) A .{6W&A {6rg   