o
    1j{                     @   s   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 zd dlZ	W n   e 
d d dl	Z	Y d dlmZ edd Zddefd	d
ZdedefddZdefddZdd Zdd ZdefddZd defddZd!ddZdd ZdS )"    N)FileLockz*failed to import ujson, using json instead)contextmanagerc                 c   sV   |dkrt j| std| t| ddd}zmz|  |d |V  W nP tyx   t| ddd}z|  |d |V  W n1 tyu   t| d}t	
| d }W d	   n1 sdw   Y  t| d|d}|V  Y nw Y nw W |  d	S W |  d	S |  w |d
krt| d
dd}|V  |  d	S |dkr$d}t j| rt| d|d}zYz|  |d W nG ty   d}t| d|d}z|  |d W n( ty   t| d}t	
| d }W d	   n1 sw   Y  Y nw Y nw W |  n|  w t| d|d}|V  |  d	S td|)uk  
    自定义打开文件函数

    Args:
        file_path (str): 文件路径
        mode (str): 文件打开模式，'r'，'w' 或 'a'

    Returns:
        Any: 返回文件对象

    Raises:
        FileNotFoundError: 当文件不存在时，raise FileNotFoundError
        ValueError: 当 mode 参数不是 'r'， 'w' 和 'a' 时，raise ValueError
    rzfile {} not foundutf-8encodingr   gbkrbr   Nwaz(mode must be 'r', 'w' or 'a', but got {})ospathexistsFileNotFoundErrorformatopenreadseekUnicodeDecodeErrorchardetdetectclose
ValueError)	file_pathmodefilefr    r   ]/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/utils/file_interface.pycustom_open!   sv   




 

r   T	yaml_pathc                 C   s   zt | ddd}t|}W d   n1 sw   Y  W n% tyC   t | ddd}t|}W d   n1 s<w   Y  Y nw |rLt|}|S |}|S )zread from yaml filer   r   r   Nr   )r   yamlZ	full_loadr   dict)r    to_dictr   Zyaml_contentr   r   r   read_yaml_fileg   s   r$   	yaml_dictc              	   C   s   t j }t|d }|. t|ddd}|| | W d   n1 s&w   Y  W d   dS W d   dS 1 s>w   Y  dS )zwrite to config yaml filez.lockr
   r   r   N)ruamelr!   YAMLr   r   dump)r%   r    r!   lockr   r   r   r   write_config_files   s   
"r*   
key_valuesc                 C   s    t | }|| t||  dS )z>update yaml file with key_values
    key_values is a dict
    N)r$   updater*   )r    r+   r%   r   r   r   update_yaml_file_with_dict}   s   
r-   c                 C   s   t | }| S )zget all keys of yaml file)r$   keys)r    r%   r   r   r   get_yaml_keys   s   r/   c                 C   s:   d}|   }|d| 7 }|tj7 }|ddg7 }dS )generate_markdown_from_dict z| |z :----: N)r.   joinr   linesep)Zmetricsmkr.   r   r   r   r0      s
   
r0   
jsonl_pathc                 C   s>   t | d}dd |D }W d   |S 1 sw   Y  |S )zread from jsonl filer   c                 S   s   g | ]}t |qS r   )jsonloads).0liner   r   r   
<listcomp>   s    z#read_jsonl_file.<locals>.<listcomp>N)r   )r6   r   Zjsonl_contentr   r   r   read_jsonl_file   s   
r<   Fc                 K   sH   t |d}tj| |fd|i| W d   dS 1 sw   Y  dS )zwrite to json filer
   ensure_asciiN)r   r7   r(   )contentr6   r=   kwargsr   r   r   r   write_json_file   s   "r@   c                 C   s   |du rg n|}|  D ]T}|| vrtd| d  dS t|| t| | sBtd| dt||  dt| |    dS t|| tr`t| | tr`||vr`t| | || |  S qt|   t|  krttd dS d	S )
zcheck if all keys of to_checked_dict is the same as standard_dict, and the value is the same type
    Args:
        escape_list: if set, will not check the keys in white_list
    Nzkey z not in yaml fileFzvalue type of key z is not the same as standard: z, zyaml file has extra keysT)r.   loggingerror
isinstancetyper"   check_dict_keyslen)Zto_checked_dictZstandard_dictZescape_listkeyr   r   r   rE      s6   


rE   c                 C   s8   | durt | dkr| D ]}tj|s dS qdS dS )z1check if dataset valid in path_list for datset_uiNr   FT)rF   r   r   r   )	path_listr   r   r   r   check_dataset_valid   s   rI   )T)F)N)rA   r   r   Zruamel.yamlr&   r!   filelockr   Zujsonr7   warning
contextlibr   r   strr$   r"   r*   r-   r/   r0   r<   r@   rE   rI   r   r   r   r   <module>   s.   


E
		
	 