
    lKj                     N   d dl Z d dlZd dlmZ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mZ d dlmZmZ d d	lmZmZ d d
lmZ d dlmZ dee   deedf   fdZerd dlmZ  ed       G d de             Z G d d      Z e G d de             Z!e G d de             Z"y)    N)ABCabstractmethod)Iterable)suppress)chain)Path)TYPE_CHECKINGAny)definefield)ArgumentCollectionupdate_argument_collection)CycloptsErrorto_tuple_convertervaluereturn.c                     t        |       S Nr   )r   s    h/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/cyclopts/config/_common.py_root_keys_converterr      s    e$$    )AppT)kw_onlyc                       e Zd ZU dZ ede      Zee   e	d<    ed      Z
ee	d<    ed      Zee	d	<    ed
d      Zed
z  e	d<   eedeeef   fd              Zeedefd              Zdddeedf   defdZy
)
ConfigBasezBase class for configuration sources.

    Handles the common logic of processing configuration dictionaries
    and updating ArgumentCollections.
     )default	converter	root_keysF)r   allow_unknownTuse_commands_as_keysNsource)r   alias_sourcer   c                     t         )z$Return the configuration dictionary.NotImplementedErrorselfs    r   configzConfigBase.config&   
     "!r   c                     t         HReturn a string identifying the configuration source for error messages.r'   r)   s    r   r#   zConfigBase.source,   r,   r   appr   commands.	argumentsc                 
   | j                   j                         }	 t        | j                  | j                  r|nd      D ]  }||   }	 	 | j                  r|}n't        d |j                  j                  D        |      }|j                         D ci c]  \  }}||vs|| }}}t        || j                  ||j                  j                  d   | j                  | j                         y # t
        $ r Y y w xY wc c}}w )Nr   c              3   :   K   | ]  }|j                   r|  y wr   )_meta_parent).0as     r   	<genexpr>z&ConfigBase.__call__.<locals>.<genexpr>C   s     \*EQQ^^q*Es   )r    r!   )r+   copyr   r    r"   KeyErrornext	app_stackcurrent_frameitemsr   r#   stackr!   )	r*   r0   r1   r2   r+   key
filter_appkvs	            r   __call__zConfigBase.__call__2   s     "&!1!1!3	T^^9R9RXXZ[ \ $$J\#--*E*E\^abJ#)<<>I>41aQj5H!Q$>I"KKMM#nn,,	
  		 Js   .C0 C?!C?0	C<;C<)__name__
__module____qualname____doc__r   r   r    r   str__annotations__r!   boolr"   r%   propertyr   dictr
   r+   r#   tupler   rE   r   r   r   r   r      s      %R;OPIx}P.M4.!&t!4$4H=GS4Z="S#X "  " " "  "

 S/
 &	
r   r   c                   (    e Zd ZdZdeez  fdZd Zy)FileCacheKeyzAbstraction to quickly check if a file needs to be read again.

    If a newly instantiated ``CacheKey`` doesn't equal a previously instantiated ``CacheKey``,
    then the file needs to be re-read.
    pathc                 
   t        |      j                         | _        | j                  j                         r=| j                  j	                         }|j
                  | _        |j                  | _        y d | _        d | _        y r   )	r   absoluterR   existsstatst_mtime_mtimest_size_size)r*   rR   rV   s      r   __init__zFileCacheKey.__init__W   sZ    J'')	9999>>#D--DKDJDKDJr   c                     t        |t        |             sy| j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S )NF)
isinstancetyperX   rZ   rR   )r*   others     r   __eq__zFileCacheKey.__eq__a   sM    %d,{{ell*dtzzU[[/HdTYYZ_ZdZdMddr   N)rF   rG   rH   rI   rJ   r   r[   r`   r   r   r   rQ   rQ   P   s    S4Z er   rQ   c                   R   e Zd ZU dZ ee      Zeez  ed<    edd      Z	e
ed<    edd      Ze
ed<    ed	dd
      Zeeef   d	z  ed<   	  ed	dd
      Zed	z  ed<   	 ededeeef   fd       Zedeeef   fd       Zedefd       Zej,                  dedd	fd       Zy	)ConfigFromFilezlConfiguration source that loads from a file.

    Supports file caching and parent directory searching.
    )r   rR   FT)r   r   
must_existsearch_parentsN)r   initrepr_config_config_cache_keyr   c                     t         )a>  Load the config dictionary from path.

        Do **not** do any downstream caching; ``ConfigFromFile`` handles caching.

        Parameters
        ----------
        path: Path
            Path to the file. Guaranteed to exist.

        Returns
        -------
        dict
            Loaded configuration.
        r'   )r*   rR   s     r   _load_configzConfigFromFile._load_configy   s
      "!r   c                 l   t        | j                  t              sJ | j                  j                         j	                         j                         j                  D ]  }|| j                  j                  z  }|j                         rXt        |      }| j                  |k(  r| j                  xs i c S 	 | j                  |      | _        || _
        | j                  c S | j(                  r| j*                  st-        t.        j0                  t3        j4                  t.        j0                        t7        | j                               | j*                  rOt-        t.        j0                  t3        j4                  t.        j0                        t7        | j                              i | _        | j                  S # t        $ r  t        $ rh}t        t!        |      dd      }t#        t$              5  |j&                  d   }|r|dz  }||z  }d d d        n# 1 sw Y   nxY wt        |      |d }~ww xY w)NrF    r   z: )msg)r]   rR   r   
expanduserresolverT   parentsnamerU   rQ   rh   rg   rj   r   	Exceptiongetattrr^   r   
IndexErrorargsrd   rc   FileNotFoundErrorerrnoENOENTosstrerrorrJ   )r*   parent	candidate	cache_keyerm   exception_msgs          r   r+   zConfigFromFile.config   s   $))T***ii**,446??AIIF/I!(3	))Y6<<-2-8#'#4#4Y#?DL-6D* ||#$$'bkk%,,6OQTUYU^U^Q_``3 J8 ??#ELL"++ell2KSQUQZQZ^\\||- %   8!$q':r:C!*-()q	4KC},	 .--
 (C0a78s0   6F99H3%H.0H	H.HH..H3c                     | j                   | j                   S t        | j                  t              sJ t	        | j                  j                               S r.   )r%   r]   rR   r   rJ   rT   r)   s    r   r#   zConfigFromFile.source   sD     <<#<<$))T***499%%'((r   r   c                     || _         y r   r%   r*   r   s     r   r#   zConfigFromFile.source   	    r   )rF   rG   rH   rI   r   r   rR   rJ   rK   rc   rL   rd   rg   rN   r
   rh   rQ   r   rj   rM   r+   r#   setterr   r   r   rb   rb   h   s   
 t,D#*,UD9J9 =ND=%*4e%%PGT#s(^d"PZ-24eRW-X|d*X4" "$sCx. " "" "S#X " "H ) ) ) ]]C D  r   rb   c                       e Zd ZU dZeeef   ed<   edeeef   fd       Z	edefd       Z
e
j                  deddfd       Z
y)	DictzrConfiguration source from an in-memory dictionary.

    Useful for programmatically generated configurations.
    datar   c                     | j                   S r   )r   r)   s    r   r+   zDict.config   s    yyr   c                 4    | j                   | j                   S y)r/   rN   r   r)   s    r   r#   zDict.source   s     <<#<<r   r   Nc                     || _         y r   r   r   s     r   r#   zDict.source   r   r   )rF   rG   rH   rI   rN   rJ   r
   rK   rM   r+   r#   r   r   r   r   r   r      sy    
 sCx.S#X      ]]C D  r   r   )#rw   ry   abcr   r   collections.abcr   
contextlibr   	itertoolsr   pathlibr   typingr	   r
   attrsr   r   cyclopts.argumentr   r   cyclopts.exceptionsr   cyclopts.utilsr   rJ   rO   r   cyclopts.corer   r   rQ   rb   r   r   r   r   <module>r      s     	 # $    %  L - -% %%S/ % ! 3
 3
 3
le e0 QZ Q Qh :  r   