
    Ki*                         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y)    N)IterableSequence)Any)field)frozento_tuple_convertervaluereturn.c                 8    t        d t        |       D              S )Nc              3   Z   K   | ]#  }|j                         j                  d        % yw).N)lowerlstrip).0es     e/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/cyclopts/validators/_path.py	<genexpr>z ext_converter.<locals>.<genexpr>   s!     J1!!#&Js   )+)tupler   )r	   s    r   ext_converterr   
   s    J0B50IJJJ    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y)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                 f    | j                   r%| j                  s| j                  st        d      y y y )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   s+    ;;t~~dmmjkk 7D~;r   type_pathc                 ~   t        |t              r't        |t              rt        |D ]  } | ||        y t        |t        j
                        sy | j                  r|j                  j                         j                  d      | j                  vrqt        | j                        dk(  rt        d| d| j                  d    d      ddj                  d	 | j                  D              z   d
z   }t        d| d| d      |j                         r| j                  s:|j                         r*| j                   rt        d| d      t        d| d      | j                   s;|j#                         r*| j                  rt        d| d      t        d| d      y y | j                  rt        d| d      y )Nr      "z" must have extension "r   z".{z, c              3   (   K   | ]
  }d | d   yw)r(   N )r   xs     r   r   z Path.__call__.<locals>.<genexpr>j   s     0La1QCq0Ls   }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__[   s   dH%$$ UA dGLL1xxDKK--/66s;488Ktxx=A%$q.Edhhqk]RT%UVV!$tyy0L4880L'L!Ls!RJ$q.[\f[ggh%ijj{{}~~$,,.}}(+KD6Q])^__(1TF2C)DEE}}~~(+FtfL])^__(1TF2C)DEE	 *7}
  1TF*;!<== r   )__name__
__module____qualname____doc__r   bool__annotations__r   r   r   r   r   r/   r   r#   r   r9   r+   r   r   r   r      sq    %N FDRIt Hd  %T]KCx}	K
l>c > >r   r   )r1   collections.abcr   r   typingr   attrsr   cyclopts.utilsr   r   r   r/   r   r   r+   r   r   <module>rD      s`     .   5Khsm3 Kc3h K k> k> k>r   