a
    e	g                     @   s  d dl 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 d dlm	Z	 dd	l
mZ G d
d deZG dd deZG dd deZG dd deZG dd deZG dd dZe	eef dddZdddZd ddZeG dd dZdS )!    N)	dataclass)Path)Callable)ClassVar)Optional)Union   )	make_pathc                   @   s   e Zd ZdS )ConfigErrorN__name__
__module____qualname__ r   r   W/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/mako/testing/_config.pyr
      s   r
   c                   @   s   e Zd ZdS )MissingConfigNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )MissingConfigSectionNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )MissingConfigItemNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )ConfigValueTypeErrorNr   r   r   r   r   r      s   r   c                   @   s*   e Zd ZedddZdd Zdd ZdS )	_GetterDispatch)default_getterc                 C   s   || _ || _d S N)r   data)selfZinitialdatar   r   r   r   __init__"   s    z_GetterDispatch.__init__c                 C   s   | j || jS r   )r   getr   )r   type_r   r   r   get_fn_for_type&   s    z_GetterDispatch.get_fn_for_typec                 C   s   |  |}||S r   )r   )r   r   nameZget_fnr   r   r   get_typed_value)   s    
z_GetterDispatch.get_typed_valueN)r   r   r   r   r   r   r   r   r   r   r   r   !   s   r   filespecc              
   C   s   t  }zt| dd}W n4 tyL } ztd|  |W Y d }~nDd }~0 0 t|dd}|| W d    n1 sz0    Y  |S d S )NT)Zcheck_existszNo config file found at zutf-8)encoding)configparserConfigParserr	   FileNotFoundErrorr   open	read_file)r!   cfgfilepathefr   r   r   _parse_cfg_file.   s    &(r,   c                    s    fdd}|S )Nc              
      s  zt  | fi |}W n tjyR } ztd |W Y d }~nd }~0  tjy } ztd|  |W Y d }~nd }~0  ty } ztd|  |W Y d }~nXd }~0 0 rz|}W n6 ty } ztd|  |W Y d }~n
d }~0 0 |S d S )NzNo config section named zNo config item for zWrong value type for )	getattrr#   NoSectionErrorr   NoOptionErrorr   
ValueErrorr   	Exception)optionkwargsrvZnseZnoever*   cfg_objcfg_section	convertermethodr   r   caller;   s4    $z_build_getter.<locals>.callerr   )r7   r8   r:   r9   r;   r   r6   r   _build_getter:   s    r<   c              	      sh   |pi }t  d}tt  dtt  dtt  dt|i}| fdd| D  t||S )Nr   getint
getbooleangetfloatc              	      s"   i | ]\}}|t  d |dqS )r   )r9   )r<   ).0r   Zconverter_fnr7   r8   r   r   
<dictcomp>f   s   z*_build_getter_dispatch.<locals>.<dictcomp>)r<   intboolfloatstrupdateitemsr   )r7   r8   
convertersr   Zgettersr   rA   r   _build_getter_dispatchW   s    	rJ   c                   @   sH   e Zd ZU ee ed< dZeee  ed< e	e
eef dddZdS )ReadsCfgsection_headerNrI   r    c                    s@   t |}t|| j| jd  fddt| D }| f i |S )N)rI   c                    s    i | ]}|j  |j|j qS r   )r   r   type)r@   fielddispatchr   r   rB   |   s   z*ReadsCfg.from_cfg_file.<locals>.<dictcomp>)r,   rJ   rL   rI   dataclassesfields)clsr!   r(   r3   r   rO   r   from_cfg_filev   s    

zReadsCfg.from_cfg_file)r   r   r   r   rF   __annotations__rI   r   dictclassmethodr   r   rT   r   r   r   r   rK   q   s   
rK   )N)N)r#   rQ   r   pathlibr   typingr   r   r   r   Zhelpersr	   BaseExceptionr
   r   r   r   r   r   rF   r,   r<   rJ   rK   r   r   r   r   <module>   s&   

