
    MhD                    4   d Z ddlmZ ddlZddlZddlmZ ddl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 ddlmZ ddlmZmZmZmZmZ dZd5dZd6dZd7dZ 	 	 	 	 d8d9d%Z!d:d&Z"	 d;d<d)Z#d=d+Z$	 	 	 	 	 d>d?d/Z%	 d@dAd2Z& G d3 d4e          Z'dS )Bz Frontend config storage helpers.    )annotationsN)glob)Any)Draft7Validator)ValidationError)_tz)
APIHandler)ConfigManagerrecursive_update)web   )DEFAULT_LOCALEL10N_SCHEMA_NAMEPSEUDO_LANGUAGE
SYS_LOCALEis_valid_localez.jupyterlab-settingsschemas_dirstrschema_name	overridesdict[str, Any]labextensions_pathlist[str] | Nonereturntuple[dict[str, Any], str]c           
        d}d}d}d}||                     d          \  }}	}
|D ]l}t          j                            ||d||
dz             }t          j                            |          r%t          j                            ||d          } |} nm|t          | |          }t          j                            |          st          j        d||z            t          |d	
          5 }	 t          j
        |          }n<# t          $ r/}|}t          j        d||t          |          fz            dd}~ww xY w	 ddd           n# 1 swxY w Y   t          |||          }	 t          j        |           n<# t          $ r/}|}t          j        d||t          |          fz            dd}~ww xY wt!          | |          }||fS )z=Returns a dict containing a parsed and validated JSON schema.zSchema not found: %szFailed parsing schema (%s): %sz!Failed validating schema (%s): %sN:schemas.json  utf-8encoding  )	partitionospathjoinexists_pathr   	HTTPErroropenjsonload	Exceptionr   	_override	Validatorcheck_schema_get_version)r   r   r   r   notfound_errorparse_errorvalidation_errorr'   ext_name_plugin_nameext_pathtargetfidschemaenameversions                     `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyterlab_server/settings_utils.py_get_schemarB       sX    ,N2K:D %#.#8#8#=#= ![* 	 	HW\\(Hi;Y`K`aaFw~~f%%  gll8XyII |[+..7>>$ 8mC$!6777	dW	%	%	% M	MYs^^FF 	M 	M 	MD-[D#a&&>%ABBL	M M M M M M M M M M M M M M M M {FI66FNv&&&& N N NmC!1T3q66N!BCCMN ;44G7?sN   -E/DE
D=*D88D==EEE*E? ?
F8	*F33F8settings_dirr=   r   c           
     n   t          | |dt                    }d}i }d}d}d}d}	d}
t          j                            |          rt          j        |          }t          j        |j                  	                                }	t          j        |j
                  	                                }
t          |d          5 }	 |                                p|}t          j        |          }n:# t          $ r-}t!          j        d||t%          |          fz            dd}~ww xY w	 ddd           n# 1 swxY w Y   t'          |          rUt)          |          }	 |                    |           n/# t,          $ r"}||t%          |          fz  }d}i }Y d}~nd}~ww xY wt/          ||||	|
	          S )
z
    Returns a dictionary containing the raw user settings, the parsed user
    settings, a validation warning for a schema, and file times.
    Fz{}Nz#Failed validating settings (%s): %sz Failed loading settings (%s): %sr!   r"   r$   )rawsettingswarninglast_modifiedcreated)r*   SETTINGS_EXTENSIONr&   r'   r)   stattzutcfromtimestampst_mtime	isoformatst_ctimer,   readjson5loadsr/   r   r+   r   lenr1   validater   dict)rC   r   r=   r'   rE   rF   rG   validation_warningr5   rH   rI   rK   r<   r>   	validators                  rA   _get_user_settingsrY   U   s-   
 {E3EFFD
CHG>4KMG	w~~d 	Xwt}}+DM::DDFF%dm44>>@@$))) 	XSXhhjj'C ;s++ X X XmCSVV7L)LMMSWWX 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 8}} f%%		x(((( 	 	 	(KQ+@@GCHHHHHH	
 (G=Za   sN    D4*C-,D4-
D$7(DD$$D44D8;D8E4 4
F >FF c                Z   t          | |          }t          j                            t          j                            |          d         d          }	 t          |d          5 }t          j        |          }|d         cddd           S # 1 swxY w Y   dS # t          $ r Y dS w xY w)zEReturns the package version for a given schema or 'N/A' if not found.r   zpackage.json.origr!   r"   r@   NzN/A)	r*   r&   r'   r(   splitr,   r-   r.   r/   )r   r   r'   package_pathr<   packages         rA   r3   r3   }   s     k**D7<<d 3 3A 68KLLL,111 	&SinnG9%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&    uus6   B &BB BB BB 
B*)B*r   F	extension
translatorids_onlybooltuple[list[Any], list[Any]]c           	        i i }g }t           j                            |           s
d| z  g}g |fS | dz   |z   }	d t          |	d          D             }
|
                                 |
D ]}t           j                            ||           }t           j                            |          \  }}d                    ||dt          |                    g          	                    dd	          x}}|rt          |
          |<   t          | ||d          \  }}| ||          }t          |||          }|d         r(|                    |                    d                     t          d|||d||<   |zg }
|D ]8}|dz   |z   }	|
                    d t          |	d          D                        9|
                                 |
D ]%}|	                    t           j        d	          }|                    d          \  }}t           j                            |          \  }}d                    ||dt          |                    g          	                    dd	          x}}||v r|rt          |
          ||<   t          | |||          \  }}t          |||          }|d         r(|                    |                    d                     t          d|||d|||<   '                    |           fdt%                                          d          D             }||fS )ac  
    Returns a tuple containing:
     - the list of plugins, schemas, and their settings,
       respecting any defaults that may have been overridden if `ids_only=False`,
       otherwise a list of dict containing only the ids of plugins.
     - the list of warnings that were generated when
       validating the user overrides against the schemas.
    z'Settings directory does not exist at %sz/**/*c                    g | ]}|S  re   .0r'   s     rA   
<listcomp>z"_list_settings.<locals>.<listcomp>   s    JJJTDJJJ    T)	recursiver   N\/)idrG   rm   r=   r@   z/**/schemas/**/*c              3     K   | ]}|V  d S Nre   rf   s     rA   	<genexpr>z!_list_settings.<locals>.<genexpr>   s"      VVVVVVVVri   zschemas/r   c                     g | ]
}|         S re   re   )rg   keyrF   s     rA   rh   z"_list_settings.<locals>.<listcomp>   s    TTTsXc]TTTri   )reversere   )r&   r'   r)   r   sortrelpathr[   r(   rT   replacerV   rB   rY   appendpopextendsepupdatesortedkeys)r   rC   r   r^   r   r_   r`   federated_settingswarningsschema_patternschema_pathsschema_pathrel_pathrel_schema_dirschema_base_idr   r=   r@   user_settingsext_dirschema_path_base_dirsettings_listrF   s                           @rA   _list_settingsr      s   $  "H)+H7>>+&& =KLH~ 7*Y6NJJT.D%I%I%IJJJL# Z Z7??;<<&(gmmH&=&=#HH[):C	NN?):;<
 

'$

	k  	Z CLLLHSMM)+{ItTTOFG%#F++.|[&QQMY' > 1 1) < <=== !YCYY=YYHSMM%) 	W 	WG$'99IENVVnPT1U1U1UVVVVVVV( 	 	L&..rvs;;K!,!2!2:!>!>Hh +-'--*A*A'NK #->I->!?@! !gdC  !C+
 ((( *.#,,,"3''"-iL^# # # !3<f U U + BOOM$5$5i$@$@AAA +/ +67+ +>K+ +"3'' OO&'''TTTTfX]]__d.S.S.STTTM8$$ri   c                .   | |v r||          }|D ]}||d         v rZ|d         |         d         }t          |t                    rt          |||                    n||         }||d         |         d<   ft          ||                   |d         |<   |S )z3Override default values in the schema if necessary.
propertiesdefault)r   )
isinstancerV   r   )r   r=   r   defaultsrt   new_defaultss         rA   r0   r0      s     i[) 	H 	HCf\***%l3C8ClD11 1$\8C=AAAA#+C=L7C|$S))44,0#,G,G,G|$S))Mri   root_dir	make_dirsc           	        d}d}	 |                     d          \  }}t          j                            | |          }t          j                            |||z             }	n'# t          $ r t          j        d||z            dw xY w|rot          j                            |          sP	 t          j        |           n:# t          $ r-}
t          j        d||t          |
          fz            dd}
~
ww xY w|	S )a1  
    Returns the local file system path for a schema name in the given root
    directory. This function can be used to filed user overrides in addition to
    schema files. If the `make_dirs` flag is set to `True` it will create the
    parent directory for the calculated path if it does not exist.
    zSettings not found (%s)z Failed writing settings (%s): %sr   r    Nr$   )
r[   r&   r'   r(   r/   r   r+   r)   makedirsr   )r   r   r   r^   r4   write_errorpackage_dirplugin
parent_dirr'   r>   s              rA   r*   r*     s    /N4KI)//44VW\\(K88
w||J(:;; I I ImC+!=>>DHI  T
33 T	TK
#### 	T 	T 	T-[KQ3H%HIItS	T Ks$   AA" "$B+C   
C7
(C22C7app_settings_dirc           	     6   i d}}t           j                            | d          }t          g t	          t           j                            |d                    t	          t           j                            |d                              }|t           j                            | d          t           j                            | d          gz  }|D ]}t           j                            |          s"t          |d          5 }	 |                    d	          rt          j	        |          }nt          j	        |          }|                                D ])\  }}	t          |                    |i           |	           *n# t          $ r}
|
}Y d
}
~
nd
}
~
ww xY wd
d
d
           n# 1 swxY w Y   t          d          }|                    d                                          D ])\  }}	t          |                    |i           |	           *||fS )zGet overrides settings from `app_settings_dir`.

    The ordering of paths is:
    - {app_settings_dir}/overrides.d/*.{json,json5} (many, namespaced by package)
    - {app_settings_dir}/overrides.{json,json5} (singleton, owned by the user)
     zoverrides.dz*.jsonz*.json5zoverrides.jsonzoverrides.json5r!   r"   z.json5N	labconfig)config_dir_namedefault_setting_overrides)r&   r'   r(   r~   r   r)   r,   endswithrR   r.   r-   itemsr   
setdefaultr/   r
   get)r   r   erroroverrides_dall_override_pathsoverrides_pathr<   path_overrides	plugin_idconfigr>   cms               rA   _get_overridesr     se    2uI',,/??K  	
27<<X6677	
27<<Y7788	
  
%'788
%'899 
 -  w~~n-- 	.7333 		s!**844 4%*Z__NN%)Ys^^N)7)=)=)?)? R R%Iv$Y%9%9)R%H%H&QQQQR   		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 
{	3	3	3BVV$?@@FFHH F F	6--i<<fEEEEes=   F*A<FF*
FFF*FF**F.	1F.	r   dict[str, Any] | None tuple[dict[str, Any], list[Any]]c                   i }g }	|t          |           \  }}
|rRt          ||||          \  }}| ||          }t          |||          }|                    d          g}	|||d|}nt	          ||||||          \  }}	d|i}||	fS )aK  
    Get settings.

    Parameters
    ----------
    app_settings_dir:
        Path to applications settings.
    schemas_dir: str
        Path to schemas.
    settings_dir:
        Path to settings.
    schema_name str, optional
        Schema name. Default is "".
    overrides: dict, optional
        Settings overrides. If not provided, the overrides will be loaded
        from the `app_settings_dir`. Default is None.
    labextensions_path: list, optional
        List of paths to federated labextensions containing their own schema files.
    translator: Callable[[Dict], Dict] or None, optional
        Translate a schema. It requires the schema dictionary and returns its translation

    Returns
    -------
    tuple
        The first item is a dictionary with a list of setting if no `schema_name`
        was provided (only the ids if `ids_only=True`), otherwise it is a dictionary
        with id, raw, scheme, settings and version keys.
        The second item is a list of warnings. Warnings will either be a list of
        i) strings with the warning messages or ii) `None`.
    NrG   rn   )r   r_   r`   rF   )r   rB   rY   rz   r   )r   r   rC   r   r   r   r_   r`   resultr   _errorr=   r@   r   r   s                  rA   get_settingsr   R  s    P FH*+;<<	6 
%k;	K]^^!Z''F*<fMM!%%i001#v'[[]["01!#
 #
 #
x 
 8ri   raw_settingsNonec                P   t          j        |          }t          | |||          \  }}t          |          }	|	                    |           t          ||dt                    }
t          |
dd          5 }|                    |           ddd           dS # 1 swxY w Y   dS )a  
    Save ``raw_settings`` settings for ``schema_name``.

    Parameters
    ----------
    schemas_dir: str
        Path to schemas.
    settings_dir: str
        Path to settings.
    schema_name str
        Schema name.
    raw_settings: str
        Raw serialized settings dictionary
    overrides: dict
        Settings overrides.
    labextensions_path: list, optional
        List of paths to federated labextensions containing their own schema files.
    rr   Twr!   r"   N)	rR   rS   rB   r1   rU   r*   rJ   r,   write)r   rC   r   r   r   r   payloadr=   r8   rX   r'   r<   s               rA   save_settingsr     s    4 k,''G [)@R  IFA &!!Iw {D2DEED	dC'	*	*	*  c		,                                   s   8BB"Bc                  0     e Zd ZdZ	 dd fdZddZ xZS )SchemaHandlerz6Base handler for handler requiring access to settings.Nr   r   r   rC   r   r   r   r   kwargsr   r   r   c                     t                      j        di | d}|st          |          \  }}|| _        || _        || _        || _        || _        |rd}| j        	                    ||           dS dS )zInitialize the handler.NzFailed loading overrides: %sre   )
super
initializer   r   r   r   rC   r   logrG   )
selfr   r   rC   r   r   r   r   overrides_warning	__class__s
            rA   r   zSchemaHandler.initialize  s     	$$V$$$ 	@-.>??Iu" 0&("4 	7 >H.66666	7 	7ri   c                   	 t          | j        | j        | j        t          | j        | j                  \  }}n;# t          j        $ r)}d}| j	        
                    ||           i }Y d}~nd}~ww xY w|                    di                               d          pt          }|dk    rt          }t          |          s|t          k    rt          }|S )aQ  
        Get the current locale as specified in the translation-extension settings.

        Returns
        -------
        str
            The current locale string.

        Notes
        -----
        If the locale setting is not available or not valid, it will default to jupyterlab_server.translation_utils.DEFAULT_LOCALE.
        )r   r   r   z4Missing or misshapen translation settings schema:
%sNrF   localer   )r   r   r   rC   r   r   r   r   r+   r   rG   r   r   r   r   r   )r   rF   r8   r>   schema_warningcurrent_locales         rA   get_current_localez SchemaHandler.get_current_locale  s    	&% !,.#'#:  KHaa } 	 	 	TNH^Q///HHHHHH		 "j"5599(CCQzY&&'N~.. 	,>_3T3T+Ns   69 A1A,,A1rp   )r   r   r   r   rC   r   r   r   r   r   r   r   r   r   )r   r   )__name__
__module____qualname____doc__r   r   __classcell__)r   s   @rA   r   r     sa        @@ ,07 7 7 7 7 7 70" " " " " " " "ri   r   )
r   r   r   r   r   r   r   r   r   r   )rC   r   r   r   r=   r   r   r   )r   r   r   r   r   r   )r   NNF)r   r   rC   r   r   r   r^   r   r   r   r_   r   r`   ra   r   rb   )r   r   r=   r   r   r   r   r   )Fr   )
r   r   r   r   r   ra   r^   r   r   r   )r   r   r   r   )r   NNNF)r   r   r   r   rC   r   r   r   r   r   r   r   r_   r   r`   ra   r   r   rp   )r   r   rC   r   r   r   r   r   r   r   r   r   r   r   )(r   
__future__r   r-   r&   r   typingr   rR   
jsonschemar   r1   r   jupyter_serverr   rL   jupyter_server.base.handlersr	   &jupyter_server.services.config.managerr
   r   tornador   translation_utilsr   r   r   r   r   rJ   rB   rY   r3   r   r0   r*   r   r   r   r   re   ri   rA   <module>r      sU   & & # " " " " "  				              3 3 3 3 3 3 & & & & & & $ $ $ $ $ $ 3 3 3 3 3 3 R R R R R R R R                    , 2 2 2 2j% % % %P   $ +/^% ^% ^% ^% ^%B   . PW    :0 0 0 0n '++/B B B B BV ,0&  &  &  &  & R= = = = =J = = = = =ri   