
    !<i*                         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	m
Z
 ddez  ee         z  deedf         fd	Z e	d
           G d d                      ZdS )    N)IterableSequence)Any)field)frozento_tuple_convertervaluereturn.c                 N    t          d t          |           D                       S )Nc              3   d   K   | ]+}|                                                     d           V  ,dS ).N)lowerlstrip).0es     /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/cyclopts/validators/_path.py	<genexpr>z ext_converter.<locals>.<genexpr>   s8      JJ1!!#&&JJJJJJ    )tupler   )r	   s    r   ext_converterr   
   s(    JJ0B50I0IJJJJJJr   T)kw_onlyc                       e Zd ZU dZdZeed<   	 dZeed<   	 dZeed<   	  e	de
          Zeee         z  ed	<   	 d
 ZdedefdZdS )Pathu  Assertions on properties of :class:`pathlib.Path`.

    Example Usage:

    .. code-block:: python

        from cyclopts import App, Parameter, validators
        from pathlib import Path
        from typing import Annotated

        app = App()


        @app.default
        def main(
            # ``src`` must be a file that exists.
            src: Annotated[Path, Parameter(validator=validators.Path(exists=True, dir_okay=False))],
            # ``dst`` must be a path that does **not** exist.
            dst: Annotated[Path, Parameter(validator=validators.Path(dir_okay=False, file_okay=False))],
        ):
            "Copies src->dst."
            dst.write_bytes(src.read_bytes())


        app()

    .. code-block:: console

        $ my-script foo.bin bar.bin  # if foo.bin does not exist
        ╭─ Error ───────────────────────────────────────────────────────╮
        │ Invalid value "foo.bin" for "SRC". "foo.bin" does not exist.  │
        ╰───────────────────────────────────────────────────────────────╯

        $ my-script foo.bin bar.bin  # if bar.bin exists
        ╭─ Error ───────────────────────────────────────────────────────╮
        │ Invalid value "bar.bin" for "DST". "bar.bin" already exists.  │
        ╰───────────────────────────────────────────────────────────────╯
    FexistsT	file_okaydir_okayN)default	converterextc                 V    | j         r| j        s| j        st          d          d S d S d S )NzK(exists=True, file_okay=False, dir_okay=False) is an invalid configuration.)r   r   r   
ValueError)selfs    r   __attrs_post_init__zPath.__attrs_post_init__W   sT    ; 	lt~ 	ldm 	ljkkk	l 	l 	l 	l 	l 	lr   type_pathc                    t          |t                    r/t          |t                    rt          |D ]} | ||           d S t          |t          j                  sd S | j        r|j                                        	                    d          | j        vryt          | j                  dk    r!t          d| d| j        d          d          dd                    d	 | j        D                       z   d
z   }t          d| d| d          |                                r| j        sA|                                r-| j        rt          d| d          t          d| d          | j        sA|                                r/| j        rt          d| d          t          d| d          d S d S | j        rt          d| d          d S )Nr      "z" must have extension "r   z".{z, c              3   "   K   | ]
}d | d V  dS )r(   N )r   xs     r   r   z Path.__call__.<locals>.<genexpr>j   s*      0L0LaQ0L0L0L0L0L0Lr   }z-" does not match one of supported extensions z Only directory is allowed, but "z" is a file.z" already exists.zOnly file is allowed, but "z" is a directory.z" does not exist.)
isinstancer   str	TypeErrorpathlibr   r   suffixr   r   lenr!   joinr   r   is_filer   is_dir)r"   r$   r%   p
pretty_exts        r   __call__zPath.__call__[   s9   dH%% 	>$$$    UA  dGL11 x kDK--//66s;;48KKtx==A%%$%U%U%Udhqk%U%U%UVVV!$tyy0L0L480L0L0L'L'L!Ls!RJ$%i%i%i\f%i%i%ijjj{{}} >~ F$,,.. F} F()^D)^)^)^___()DT)D)D)DEEE} F F~ F()^t)^)^)^___()DT)D)D)DEEE	F F F F
  > !<T!<!<!<===> >r   )__name__
__module____qualname____doc__r   bool__annotations__r   r   r   r   r   r/   r   r#   r   r9   r+   r   r   r   r      s         % %N FDRIt Hd  %uT]KKKCx}	KKK
l l l>c > > > > > > >r   r   )r1   collections.abcr   r   typingr   attrsr   cyclopts.utilsr   r   r   r/   r   r   r+   r   r   <module>rD      s     . . . . . . . .             5 5 5 5 5 5 5 5Khsm3 Kc3h K K K K k> k> k> k> k> k> k> k> k> k>r   