
    ces                        d Z ddlmZ ddlmZ ddlZddlZddlZddlZddl	Z	ddl
mZ ddlmZmZmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZ ddl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) ddl*m+Z+m,Z, ddl-m.Z. ddl-m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl6m;Z< ddgddZ= G d de7          Z> G d de>          Z? G d de>          Z@ G d de7          ZAdS ) zPreferences dialog.    )ConfigParser)deepcopyN)QtCore)QPointQtSignal)QCursorQPixmap)		QCheckBoxQGridLayoutQHBoxLayoutQLabel	QLineEditQScrollArea	QTextEditQVBoxLayoutQWidget)AnacondaAPI)CondaAPI)download_api)get_applications)CONFWINWIN7)	INFO_ICONWARNING_ICON)	telemetry)	url_utils)ButtonNormalButtonPrimaryComboBoxBaseSpacerHorizontalSpacerVertical)
DialogBaseMessageBoxError)DialogOfflineMode)loginTdefaults)
always_yeschannels
ssl_verifyc                   @     e Zd Z fdZd Zd Zed             Z xZS )SettingsDialogc                     t                      j        |i | t                      | _        | j                            dd           t          d          | _        | j        j                            | j	                   t          d          | _
        | j
        j                            | j                   t          d          | _        t                      | _        | j                            | j                   | j                                         | j                            | j
                   | j                            t%                                 | j                            | j                   t'                      | _        | j                            | j                   | j                            t+                                 | j                            | j                   |                     | j                   d S )NX  Reset to defaultsCancelzSave and Restart)super__init__r   	text_editsetFixedSizer   button_resetclickedconnectreset_to_defaultsbutton_cancel_cancelr    button_saver   buttons_layout	addWidget
addStretchr"   r   main_layoutr#   	addLayout	setLayoutselfargskwargs	__class__s      Nlib/python3.11/site-packages/anaconda_navigator/widgets/dialogs/preferences.pyr3   zSettingsDialog.__init__2   s   $)&)))"##C---()<==!))$*@AAA)(33"**4<888();<<)mm%%d&7888&&(((%%d&8999%%&6&8&8999%%d&6777&==""4>222"">#3#3444""4#6777t'(((((    c                     t                      N)NotImplementedErrorrD   s    rH   r9   z SettingsDialog.reset_to_defaultsN   s    !###rI   c                 .    |                                   d S rK   )closerD   es     rH   r;   zSettingsDialog._cancelQ   s    

rI   c                  "   t           j                                         t          r5t           j                            dt          j        d          d           d S t           j                            t          j        t          j                   d S )N"r   )	r   QCoreApplicationquitr   QProcessstartDetachedsysargv
executable rI   rH   _restart_applicationz#SettingsDialog._restart_applicationT   sp    $$&&& 	DO))*<chqk*<*<*<=====O))#.#(CCCCCrI   )	__name__
__module____qualname__r3   r9   r;   staticmethodr\   __classcell__rG   s   @rH   r-   r-   1   sx        ) ) ) ) )8$ $ $   D D \D D D D DrI   r-   c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )NavigatorSettingsDialogc                      t                      j        |i | |                     d           d | _        || _        | j        j                            | j                   d S )Nz+Navigator settings (anaconda-navigator.ini))	r2   r3   setWindowTitle	file_pathconfigr<   r7   r8   _save)rD   rh   rE   rF   rG   s       rH   r3   z NavigatorSettingsDialog.__init___   sd    $)&)))IJJJ ((44444rI   c                     t          | j                  }| j                            |                                           d S rK   )r   rh   r4   setTextget_defaults)rD   rh   s     rH   r9   z)NavigatorSettingsDialog.reset_to_defaultsh   s;    
 $+&&v224455555rI   c                     t           j                            |          r^|| _        t	          |d          5 }| j                            |                                           d d d            d S # 1 swxY w Y   d S d S )Nr)ospathexistsrg   openr4   rk   read)rD   rg   files      rH   setupzNavigatorSettingsDialog.setupq   s    7>>)$$ 	4&DNi%% 4&&tyy{{3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4s   -A11A58A5c                    | j                                         }t          j        |          }t	                      }|                    |           i }t          j                    D ]r}|                    |          sg ||<   t          j	        |          D ]A}|
                    ||          s)|                    |g                               |           Bs|S )z
        Validates the config data to not miss required fields
        in the config (anaconda-navigator.ini) file.
        Returns the dictionary with missing fields and sections.

        :return dict:
        )r4   toPlainTextioStringIOr   	read_filer   sectionshas_sectionoptions
has_option
setdefaultappend)rD   config_textbuffer
new_configmissing_datasectionoptions          rH   _validate_configz(NavigatorSettingsDialog._validate_configw   s     n0022[))!^^
V$$$} 	H 	HG))'22 +(*W%,w// H H!,,Wf== H ++GR88??GGGH rI   c                    |                                  }|r@d}t          d|t          j        |d          dd          }|                                 d	S | j        rt          j                            | j                  rrt          | j        d          5 }|
                    | j                                                   |                                  d	d	d	           d	S # 1 swxY w Y   d	S d	S d	S )
z
        Saves the data to the config (anaconda-navigator.ini) file if
        no missing data. Otherwise popup with missing data will arise.
        zpThe saved data missed some sections or attributes and could cause the issues with working Navigator! Please fix.zNavigator Settings Save Error   )indentFT)titletexterrorreportjsonwN)r   r%   r   dumpsexec_rg   ro   rp   rq   rr   writer4   rw   r\   )rD   rQ   r   r   msg_boxrt   s         rH   ri   zNavigatorSettingsDialog._save   sI   
 ,,.. 	0G  &5ja888  G MMOOOOO~ 0"'.."@"@ 0$.#.. 0$JJt~99;;<<<--///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0s   AC%%C),C))	r]   r^   r_   r3   r9   ru   r   ri   ra   rb   s   @rH   rd   rd   ^   st        5 5 5 5 56 6 64 4 4  40 0 0 0 0 0 0rI   rd   c                   4     e Zd ZdZ fdZd Zd Zd Z xZS )CondaSettingsDialogz"https://en.wikipedia.org/wiki/YAMLc                      t                      j        |i | t                      | _        |                     d           | j        j                            | j                   d S )NzConda settings (.condarc))	r2   r3   r   	conda_apirf   r<   r7   r8   ri   rC   s      rH   r3   zCondaSettingsDialog.__init__   sa    $)&)))!7888 ((44444rI   c                 h    | j                             t          j        t                               d S rK   )r4   rk   yamldumpCONDARC_DEFAULTrM   s    rH   r9   z%CondaSettingsDialog.reset_to_defaults   s(    ty99:::::rI   c                 h    | j                             | j                                                   d S rK   )r4   rk   r   load_rc_plainrM   s    rH   ru   zCondaSettingsDialog.setup   s,    t~;;==>>>>>rI   c                 R   | j                                         }	 t          j        |           | j                            |           |                                  dS # t          j        $ r8}t          dd|d| j	                  }|
                                 Y d}~dS d}~ww xY w)z
        Saves the data to config (.condarc) file if the data
        is a valid YAML format data. Otherwise the popup with
        error message will arise.
        zConda Settings Save Errorz6The saved data is not a valid yaml config! Please fix.F)r   r   r   r   
learn_moreN)r4   rw   r   	safe_loadr   save_rc_plainr\   	YAMLErrorr%   YAML_DOCS_URLr   )rD   rQ   r   	exceptionr   s        rH   ri   zCondaSettingsDialog._save   s     ~))++	(N4    N((...%%''''' ~ 	 	 	%1M-  G MMOOOOOOOOO	s   A B&.-B!!B&)	r]   r^   r_   r   r3   r9   ru   ri   ra   rb   s   @rH   r   r      sj        8M5 5 5 5 5; ; ;? ? ?( ( ( ( ( ( (rI   r   c                   N    e Zd ZdZ eee          Z e            Z e            Ze	df fd	Z
d Zd ZddZddZdd	Zdd
Z	 	 	 	 	 	 	 ddZ	 d dZd!dZd!dZd"dZd Zd Zd Zd#dZed             Zed#d            Zd Zed             Zd$dZd Z d Z! fdZ" xZ#S )%PreferencesDialogApplication preferences dialog.Nc                 

     t                      j        di | t                       _        t	                       _        g  _        i  _        | _        | _	        t          d           _        t          d           _        t          d           _        t          d           _        t          d           _        d _                             d                                d                                d	           t+                       _        t/                      }|                     j                   |                    t3                                 |                     j                   |                                 t/                      }|                     j                   |                                 |                     j                   |                    t3                                 |                     j                   |                    dd
dd           t9          |           _        t=                       _        tA                      }tC                      }|"                    d           |#                    tH          j%                   |&                    tH          j'                   tQ                      }|)                    |           tA          |          }	|	*                     j                   |                    |           |                    tW                                 |*                    |           |*                    |            ,                    |            j        j-        .                     j/                    j        j-        .                     j0                    j        j-        .                     j1                    j        j-        .                     fd            j        j-        .                     j2                    j        j-        .                     j3                    j        4                    d            5                                  j        6                    d            j        d         7                                  j        8                    d            j        9                    d           dS )r   Applyr1   r0   zConfigure NavigatorzConfigure Condar   ig  r/   Preferences
   Tc                  8     j                             d          S )NT)	button_ok
setEnabledrM   s   rH   <lambda>z,PreferencesDialog.__init__.<locals>.<lambda>!  s    $.2K2KD2Q2Q rI   Nr[   ):r2   r3   r   apisetwidgets_changedwidgetswidgets_dicrh   environmentsr    r   r   r:   r6   button_nav_settingsbutton_conda_settingsrowsetFixedWidthsetFixedHeightrf   r   grid_layoutr   r>   r"   r?   setContentsMarginsrd   nav_settingsr   conda_settingsr   r   setWidgetResizablesetVerticalScrollBarPolicyr   ScrollBarAsNeededsetHorizontalScrollBarPolicyScrollBarAlwaysOffr   	setWidgetrA   r#   rB   r7   r8   acceptrejectr9   show_navigator_settings_dialogshow_conda_settings_dialog
setSpacingru   setDisabledsetFocus
setDefaultsetAutoDefault)rD   rh   r   rF   settings_buttons_layoutr=   r@   scrollscroll_widgetcontent_layoutrG   s   `         rH   r3   zPreferencesDialog.__init__   sL   ""6"""=="uu( 'w//)(33()<==#01F#G#G %23D%E%E"3C    	M*** '=="---))$*BCCC))*:*<*<===))$*DEEE**,,,$  !2333!!###  !3444  !1!3!3444  000))!RA6663F;;133!mm!!$'''))"*>???++B,ABBB		'''$]33  !1222f%%%n..///5666n---{### 	&&t{333"**4;777!))$*@AAA!))*Q*Q*Q*QRRR (001TUUU"*2243RSSS 	##A&&&

""4(((Q  """!!$'''%%d+++++rI   c                     | j                             | j                                                   | j                                          d S rK   )r   ru   rh   filenamer   rP   s     rH   r   z0PreferencesDialog.show_navigator_settings_dialog-  sB     4 4 6 6777!!!!!rI   c                 j    | j                                          | j                                          d S rK   )r   ru   r   rP   s     rH   r   z,PreferencesDialog.show_conda_settings_dialog1  s2    !!###!!#####rI   mainc                 :    | j                             ||d          S )z-Get configuration option from `main` section.N)rh   getrD   r   r   s      rH   
get_optionzPreferencesDialog.get_option7  s    {w555rI   c                 >    | j                             |||           dS )z+Set configuration option in `main` section.N)rh   r   )rD   r   valuer   s       rH   
set_optionzPreferencesDialog.set_option;  s     /////rI   c                 8    | j                             ||          S )z9Get configuration option default value in `main` section.)rh   get_defaultr   s      rH   get_option_defaultz$PreferencesDialog.get_option_default?  s    {&&w777rI   c                 Z    |                      ||                     |          |           dS )z9Set configuration option default value in `main` section.N)r   r   r   s      rH   set_option_defaultz$PreferencesDialog.set_option_defaultC  s,     7 7 ? ?IIIIIrI   c                    |                      ||          }||_        t          |          |_        ||_        ||_        |                    |           t                      |_        |j                            d           |j        	                    d           |j        
                    d           |j                            d           t                      }	t                      }
|
                    d           |
                    |j        dt           j                   |
                    |dt           j                   |
                    t          |pd          dt           j                   |	                    |
           |r||_        nd |_        |r<|j        }t*                              |t.                    }|                    |           | j                            |           || j        |<   | j                            |j        | j        dt           j        t           j        z             | j                            |	| j        dt           j        t           j        z             | xj        dz  c_        dS )	z2Create preference option widget and add to layout.)r      r   r    c                     dS )N)Tr   r[   )r   s    rH   r   z1PreferencesDialog.create_widget.<locals>.<lambda>i  s    z rI      N)r   _textr   labelr   r   	set_valuelabel_informationsetMinimumWidthsetMaximumWidthsetMinimumHeightsetMaximumHeightr   r   
addSpacingr>   r   
AlignRight	AlignLeftrB   check_valuer   update_iconr   
setToolTipr   r   r   r   r   AlignCenter)rD   widgetr   r   hintcheckinfor   config_valueform_widgeth_layouts              rH   create_widgetzPreferencesDialog.create_widgetG  s-    vw??e}} &&&#)88  00444 00444 11"555 11"555ii==A63QFFF61bl3336$*"--q",???h''' 	:!&F!9!9F 	#,E%11%CCET"""F####) ""6<1bmbn>\]]]"";!R\BN=Z[[[ArI   c           	      p    t                      }|                    t          j        d           |                    d           |r|                    |           |fd|_        |fd|_        |fd|_        |j	        
                    d|f fd	                                |||||||           dS )	z-Create textbox (QLineEdit) preference option.F   c                 *    |                                  S rK   )r   r   s    rH   r   z2PreferencesDialog.create_textbox.<locals>.<lambda>  s    AFFHH rI   c                 ,    |                     |           S rK   )rk   r   r   s     rH   r   z2PreferencesDialog.create_textbox.<locals>.<lambda>  s    199U3C3C rI   c                 .    |                      dd          S )Nr   i  )setSelectionr  s    rH   r   z2PreferencesDialog.create_textbox.<locals>.<lambda>  s    annQ.E.E rI   Nc                 0                         |          S N)r   options_changedvr   rD   s     rH   r   z2PreferencesDialog.create_textbox.<locals>.<lambda>  s    D<P<PXY<P<Z<Z rI   )r   r   r   r   r   r   r   )r   setAttributer   WA_MacShowFocusRectr   setPlaceholderText	get_valuer   set_warningtextChangedr8   r   )	rD   r   r   r   r   r   placeholderr   r   s	   `        rH   create_textboxz PreferencesDialog.create_textboxv  s     B2E:::s### 	3%%k222$*444+1CCC&,EEE""DF#Z#Z#Z#Z#Z[[[ 	 	
 	
 	
 	
 	
rI   c                      t                      }|fd|_        |fd|_         j        d         |ffd	|_        |j                            d|f fd	                                ||||||           dS )z"Create checkbox preference option.c                 D    t          |                                           S rK   )bool
checkStater  s    rH   r   z3PreferencesDialog.create_checkbox.<locals>.<lambda>  s    D,@,@ rI   c                 v    t          |                    | rt          j        nt          j                            S rK   )r  setCheckStater   Checked	Uncheckedr  s     rH   r   z3PreferencesDialog.create_checkbox.<locals>.<lambda>  s*    4V[Hm

acam8n8n3o3o rI   anaconda_api_urlc                     S rK   r[   )r   
api_widgets    rH   r   z3PreferencesDialog.create_checkbox.<locals>.<lambda>  s    j rI   Nc                 0                         |          S r  r	  r  s     rH   r   z3PreferencesDialog.create_checkbox.<locals>.<lambda>  s    T=Q=QYZ=Q=[=[ rI   r   r   r   r   r   r   )r   r  r   r   r  stateChangedr8   r   )rD   r   r   r   r   r   r   r  s   `      @rH   create_checkboxz!PreferencesDialog.create_checkbox  s    $*@@@+1ooo%&89
&,88888##TV$[$[$[$[$[\\\ 	 	
 	
 	
 	
 	
rI   c                     t                      d _        ffd	_                             |          d}}t	           j                                                  D ]G\  }\  }	}
||	k    r|}                    |
|	                               ||	t          j
                   H                    |           j                            d f fd	                                |||||           d S )Nc                      d S rK   r[   )rE   rF   s     rH   r   z3PreferencesDialog.create_combobox.<locals>.<lambda>  s    4 rI   c                 ,                                     S rK   )currentData)r   r   s    rH   r   z3PreferencesDialog.create_combobox.<locals>.<lambda>  s    F,>,>,@,@ rI   r   c                 0                         |          S r  r	  r  s     rH   r   z3PreferencesDialog.create_combobox.<locals>.<lambda>  s    DDXDX`aDXDbDb rI   r!  )r!   r   r  r   	enumerater   itemsaddItemsetItemDatar   ToolTipRolesetCurrentIndexcurrentIndexChangedr8   r   )rD   r   r   r   r   r   default_envselected_idxiprefixnamer   s   `          @rH   create_comboboxz!PreferencesDialog.create_combobox  s   77$*@@@@@$(OOF$;$;Q\!*4+<+B+B+D+D!E!E 	: 	:A~f$$ NN4(((q&".9999|,,,"**DF+b+b+b+b+bccc&u4W\cghhhhhrI   c                 2   |                      |j        |j                  }||                                k    r| j                            |           n#|| j        v r| j                            |           | j                            | j                    dS )z5Callback helper triggered on preference value change.N)	r   r   r   r  r   addremover   r   )rD   r   r   r   s       rH   r
  z!PreferencesDialog.options_changed  s    v}fnEE6++---- $$V,,,,---$++F333""t';#;<<<<<rI   c                     | j         |         S )z'Return the widget for the given option.)r   )rD   r   s     rH   widget_for_optionz#PreferencesDialog.widget_for_option  s    ''rI   c                 <    | j                             d           dS )z
        Set configuration values found in other config files.

        Some options of configuration are found in condarc or in
        anaconda-client configuration.
        T)set_conda_sslN)r   client_get_sslrM   s    rH   set_initial_valuesz$PreferencesDialog.set_initial_values  s#     	d33333rI   c                 .   	 d7 fd		 fd} fd}                                                        dd	                                dd	d
	fd                                ddd
	fd                                dd|d                                dd|                                dd           d}                     dd|           t          j        }t          rdnd}                     dd||z                                   d d!                                d"d#                                d$d%                                d&d'                                d(d)                                d*d+                                d,d-            j                            d          }|j	        
                     j                    j                            d          }|                    d.           d/}t          d01          j                                        D ]K}|j        s
                     |j         d2|j         d3|                    |j                  d45           L                                  d6S )8zSet up the preferences dialog.Fc                 p   j                             d          }|r|                                nd}j                             d          }|r|                                }j                             d          }|s|r|                                }nd}|rd}n                    | ||          }|S )a8  
            Custom checker to use selected ssl option instead of stored one.

            This allows to set an unsafe api url directly on the preferences dialog. Without this, one would have to
            first disable, click accept, then open preferences again and change api url for it to work.
            ssl_verificationTssl_certificateoffline_modeF)FzFAPI Domain cannot be modified when working in <b>offline mode</b>.<br>)verifyallow_blankr   r   r  is_valid_api)	r   rE  
ssl_widgetrD  ssl_cert_widgetoffline_widgetrC  basic_checkrD   s	           rH   api_url_checkerz0PreferencesDialog.setup.<locals>.api_url_checker  s     )--.@AAJ/9CZ))+++tF #.223DEEO 5(2244 "-11.AAN %_ %-7799$ _o"//fR]/^^rI   c                     j                             d          }|                                }                    ||           S )zCounterpart to api_url_checker.r  )rD  rF  )r   api_url_widgetapi_urlrD   s      rH   ssl_checkerz,PreferencesDialog.setup.<locals>.ssl_checker  sD    !-112DEEN$..00G$$WU$;;;rI   c                     j                             d          }|r|                                nd}j                             d          }|                                }                    ||          S )z*Check if certificate path is valid/exists.rA  TrB  )r   r   r  is_valid_cert_file)r   rH  rD  rI  rp   rD   s        rH   ssl_certificate_checkerz8PreferencesDialog.setup.<locals>.ssl_certificate_checker  ss    )--.@AAJ/9CZ))+++tF".223DEEO",,..D**4888rI   zAnaconda.org API domainr  )r   zAnaconda Server API domainanaconda_server_api_urlzhttp(s)://example.comc                 L     | rt          j        | d          nd d          S )Nz
api/systemTrE  )r   joinbase_urlrL  s    rH   r   z)PreferencesDialog.setup.<locals>.<lambda>	  s4    ??:BL	x666 $ $ $ rI   )r  r   z"Enterprise 4 Repository API domainenterprise_4_repo_api_urlc                      | d          S )NTrV  r[   rX  s    rH   r   z)PreferencesDialog.setup.<locals>.<lambda>  s    ??8#N#N#N rI   zEnable SSL verificationrA  zH<i>Disabling this option is not <br>recommended for security reasons</i>)r   r   zSSL certificate path (Optional)rB  zDefault conda environmentr0  zTo help us improve Anaconda Navigator, fix bugs,
and make it even easier for everyone to use Python,
we gather anonymized usage information, just like
most web browsers and mobile apps.zQuality improvement reportingprovide_analytics)r   z<br><br>r   zEnable offline moderC  zHide offline mode dialoghide_offline_dialogzHide quit dialoghide_quit_dialogzHide update dialog on startuphide_update_dialogz Hide running applications dialoghide_running_apps_dialogzEnable high DPI scalingenable_high_dpi_scalingz'Show application startup error messagesshow_application_launch_errorsz$Show hidden Anaconda Server channels$anaconda_server_show_hidden_channelsz%Certificate to verify SSL connectionszDirectory path where {0} is installed on your machine. 
To see {0} on the home tab, you will also need to click 
the Refresh button on the home tab.T)cachedz path_pathapplications)r   r   N)F)r>  r  r#  r5  r&   MESSAGE_PREFERENCESr   r   r   r"  r8   enable_disable_certr  r   installable_appsvaluesis_availabledisplay_nameapp_nameformat)
rD   rP  rS  info_messageinfo_offlineextrassl_ver_widgetrI  app_specrL  s
   `        @rH   ru   zPreferencesDialog.setup  s   	 	 	 	 	 	<	< 	< 	< 	< 	<	9 	9 	9 	9 	9 	!!!%! 	 	
 	
 	

 	(%/   	 	 	
 	
 	
 	0'/NNNN	 	 	
 	
 	
 	%9	 	 	
 	
 	
 	-) 	 	
 	
 	
 	'	
 	
 	
& 	+ 	 	
 	
 	

 )<"*

!% 	 	
 	
 	

 	79NOOO/1CDDD<>RSSS?A[\\\68QRRRFHhiiiCEklll)--.@AA#++D,DEEE*../@AA**+RSSS2 	 )555FMMOO 		 		H( (///$+++!(()>??&	       	  """""rI   c                     | j                             d          }|rt          |          }n;| j                             d          }t          |                                          }|                    |           dS )z7Refresh enabled/disabled status of certificate textbox.rB  rA  N)r   r   r  r  r   )rD   r   rI  rr  s       rH   rh  z%PreferencesDialog.enable_disable_certV  sx    *../@AA 	6KKEE!-112DEEN224455E""5)))))rI   c                     t          |          }|                     d           |                     |                    ddt          j        t          j                             | S )z'Update icon for information or warning.Tr   )r
   setScaledContents	setPixmapscaledr   KeepAspectRatioSmoothTransformation)r   iconpixmaps      rH   r   zPreferencesDialog.update_icon`  sR     %%%b"b.@"BYZZ[[[rI   c                    | j         }|rt                              |t                    }|                    t          |                     | j                                         dz  }| j                                         dz  }| j                             t          ||                    }t          j        |           dS |                    t                                 |                    d           dS )z*Display warning for widget in preferences.   r   N)r   r   r   r   r   strwidthheightmapToGlobalr   r	   setPosrw  r
   )r   r   r   r   hpositions         rH   warnzPreferencesDialog.warnh  s     ( 		!%11%FFESYY'''(..00A5A(//11Q6A/;;F1aLLIIHN8$$$$$OOGII&&&R     rI   c                 N    | j                             |d          }d}|sd}||fS )z(Check if a given URL returns a 200 code.F)non_blockingr   zInvalid api url.)r   download_is_valid_url)rD   urloutputr   s       rH   is_valid_urlzPreferencesDialog.is_valid_urly  s8    //%/HH 	'&Eu}rI   c                     d}d}|                                  r%|r#t          j                            |           }|sd}||fS )z4"Check if ssl certificate file in given path exists.Tr   zFile not found.)stripro   rp   isfile)rp   rD  r  r   s       rH   rR  z$PreferencesDialog.is_valid_cert_file  sQ      ::<< 	*F 	*W^^D))F *)u}rI   TFc                 V   |dur2t          j        |          | j                            ddg           v rd}| j                            |d||          }|r|dfS |t          j        j        u rLt          j
        ||                                           r$| j                            |dd|          }|r|dfS d|vrg|                     |          d         rL|                    d	d
                              dd          }|                    d          dz   }d| d| d}nd}||fS )z6Check if a given URL is a valid anaconda api endpoint.Fssltrusted_servers)r  rD  rE  r   )parentz/apir   zhttps://zhttps://api.zhttp://zhttp://api./z.Invalid API url. <br><br><br>Try using:<br><b>z</b> or <br><b>z</b>zTInvalid API url. <br><br>Check the url is valid and corresponds to the api endpoint.)r   netlocrh   r   r   download_is_valid_api_urlr   ErrorDetail	ssl_errorlogin_dialogsTrustServerDialogr   r  replacerstrip)rD   r  rD  rE  r  	url_api_1	url_api_2r   s           rH   rG  zPreferencesDialog.is_valid_api  sZ   %i&6s&;&;t{uVgik?l?l&l&lF33CeTZhs3tt 	2:l.888m>]^ajn>o>o>o>u>u>w>w8X77%X]kv7wwF "rz! #4#4#4S#9#9!#<J??GG	S`aaI

3&0InYnn_hnnnEEjEu}rI   c                    g }| j         D ]}|                                }|                    |          \  }}|                    |           |r|                     |           [| j                            d           |                                 |                     ||            | j        	                                 |S )z
        Run all check functions on configuration options.

        This method checks and warns but it does not change/set values.
        T)
r   r  r   r   r  r   r   r  sig_check_readyemit)rD   checksr   r   r   r   s         rH   
run_checkszPreferencesDialog.run_checks  s     * 	 	F$$&&E!--e44LE5MM%    		&!!!!**4000""$$$		&%((( 	!!###rI   c                     | j         D ]N}|                     |j        |j                  }|                    |           |                     ||           O| j                                         dS )z,Reset the preferences to the default values.)r   r   N)r   r   r   r   r   r
  sig_reset_readyr  )rD   r   defaults      rH   r9   z#PreferencesDialog.reset_to_defaults  sy    l 	? 	?F--fmV^LLGW%%%   g >>>>!!#####rI   c                 j    d}d                                  }|rt          |          r j        D ]}|                                }                     |j        ||j                   |j        dk    r't          j        j	        
                    dddi           |j        dk    r| j                            |           d}|j        dv r j                            d	          } j                            d
          }|                                }|                                }|                                r|r|}n|} j                            ddd          }	 j                            ddg           }
t#          j        |	pd          |
v r j                            d            j                            |           |r<r: fd} j                                        }|j                            |           t/                                                       dS dS dS )zOverride Qt method.FNr0  zchange-preference
preferencer  T)rB  rA  rA  rB  r   logged_api_urlr  r  r   c                     |                     d          }	 j                            |           t          t                                                     d S # t          $ r Y d S w xY w)N	conda_url)r   sig_urls_updatedr  r2   r   r   RuntimeError)workerr  r   r  rG   r  rD   s       rH   	_api_infoz+PreferencesDialog.accept.<locals>._api_info  sx     &

; 7 7I-223CYOOO/66==?????'   s   AA 
A*)A*)r  allr   r  r   r   r   r   	ANALYTICSinstanceeventr   client_set_api_urlr   r   r  rh   r   r  client_set_sslapi_urlssig_chain_finishedr8   r2   r   )rD   sig_updatedr  r   r   ssl_verissl_certrD  rp   r  r  r  r  r  rG   s   `            @rH   r   zPreferencesDialog.accept  sb   ""  0	c&kk 0	. 7 7((**ufnEEE=M11'0667J\[hLijjj =$666',$H//666"&K =$KKK#/334FGGH#/334EFFH%//11F#--//Dzz|| ' ' $ &;?;??6Scei;j;jN8<O`bd8e8eO '(<"==PP//6666//666 =/ =       **,,)11)<<<GGNNa0	 0	 0	 0	rI   )r   )NNNNNNr   )NNNNr   )NNN)NNrK   )TF)$r]   r^   r_   __doc__r   r  r  r  r  r   r3   r   r   r   r   r   r   r   r  r#  r5  r
  r:  r>  ru   rh  r`   r   r  r  rR  rG  r  r9   r   ra   rb   s   @rH   r   r      se       ))vc3''fhhOfhhO" O, O, O, O, O, O,b" " "$ $ $6 6 6 60 0 0 08 8 8 8J J J J - - - -` ^d
 
 
 
4
 
 
 
$i i i i&
= 
= 
= 
=( ( (4 4 4C# C# C#J* * * *   \ ! ! ! \!    
 
 \
   2  0$ $ $7 7 7 7 7 7 7 7 7rI   r   )Br  configparserr   copyr   rx   r   ro   rX   typingqtpyr   qtpy.QtCorer   r   r   
qtpy.QtGuir	   r
   qtpy.QtWidgetsr   r   r   r   r   r   r   r   r   r   #anaconda_navigator.api.anaconda_apir    anaconda_navigator.api.conda_apir   anaconda_navigator.apir   $anaconda_navigator.api.external_appsr   anaconda_navigator.configr   r   r    anaconda_navigator.static.imagesr   r   anaconda_navigator.utilsr   r   anaconda_navigator.widgetsr   r    r!   r"   r#   "anaconda_navigator.widgets.dialogsr$   r%   *anaconda_navigator.widgets.dialogs.offliner&   r'   r  r   r-   rd   r   r   r[   rI   rH   <module>r     s     % % % % % %       				  				 



        * * * * * * * * * * ' ' ' ' ' ' ' '                       ; ; ; ; ; ; 5 5 5 5 5 5 / / / / / / A A A A A A 5 5 5 5 5 5 5 5 5 5 D D D D D D D D . . . . . . . . . . . . r r r r r r r r r r r r r r J J J J J J J J H H H H H H E E E E E E  *D *D *D *D *DZ *D *D *DZK0 K0 K0 K0 K0n K0 K0 K0\&( &( &( &( &(. &( &( &(Rk k k k k
 k k k k krI   