
    '<i#                         d Z ddlZddlZddlmZ ddlmZ ddlm	Z	 e	rddl
mZ ddlmZ ed        Zd	eez  d
edef   fdZy)z.Load Cyclopts App objects from Python scripts.    N)contextmanager)Path)TYPE_CHECKINGApp)CommandSpecc               #   t   K   ddl m}  | j                  }d }	 || _        d || _        y# || _        w xY ww)zTemporarily disable App.__call__ to prevent execution during module loading.

    This context manager replaces App.__call__ with a no-op function, allowing
    scripts that call app() at module level to be imported without executing.
    r   r   c                      y)z9No-op replacement for App.__call__ during module loading.N )selfargskwargss      u/home/jay/workspace/.worktrees/task-2057-dev2/scripts/.codegraph-venv/lib/python3.12/site-packages/cyclopts/loader.py_dummy_callz,_suppress_app_execution.<locals>._dummy_call   s        N)cycloptsr   __call__)r   original_callr   s      r   _suppress_app_executionr      s6      LLM%"$}s   8, 8	58scriptreturnr   c                    ddl m} d}t        |       }d|v rE|j                  dd      \  }r"t	        fddD              s}t        |      }nt        |       }nt        |       }|j                         }|j                         s4t        d| d	t        j                  
       t        j                  d       |j                  dk(  s4t        d| dt        j                  
       t        j                  d       t        j                  j                  d|      }||j                   4t        d| dt        j                  
       t        j                  d       t        j                  j#                  |      }|t        j$                  d<   t'               5  |j                   j)                  |       ddd       |rt+        ||      s7t        d| d| dt        j                  
       t        j                  d       t-        ||      }t/        ||      s4t        d| dt        j                  
       t        j                  d       ||fS g }	t1        |      D ]@  }
|
j3                  d      rt-        ||
      }t/        ||      s.|	j5                  |
|f       B |	s4t        d| dt        j                  
       t        j                  d       t7        |	      dkD  rg }|	D ]B  \  }}t+        |d      s|j9                  d |j:                  j=                         D               D |	D 
cg c]  \  }
}||vs|
|f }}
}|r|}	t7        |	      dkD  rldj?                  d |	D              }t/        | t
              rt        |       n| }t        d| d| dt        j                  
       t        j                  d       |	d   \  }
}||
fS # 1 sw Y   !xY wc c}}
w )aG  Load a Cyclopts App object from a Python script.

    Parameters
    ----------
    script : str | Path
        Python script path, optionally with ``':app_object'`` notation to specify
        the :class:`App` object. If not specified, will search for :class:`App`
        objects in the script's global namespace.

    Returns
    -------
    tuple[App, str]
        The loaded :class:`App` object and its name.

    Raises
    ------
    SystemExit
        If the script cannot be loaded, no App objects are found, or multiple
        App objects exist without specification.
    r   r   N:   c              3   &   K   | ]  }|v  
 y wNr   ).0seppotential_app_names     r   	<genexpr>z'load_app_from_script.<locals>.<genexpr>E   s     )[#1C*C)[s   )/\zError: Script 'z' not found.)filez.pyzError: 'z' is not a Python file.__cyclopts_doc_modulez#Error: Could not load module from 'z'.zError: No object named 'z' found in 'z' is not a Cyclopts App object._z)Error: No Cyclopts App objects found in '	_commandsc              3   B   K   | ]  }t        |t              r|  y wr   )
isinstancer   )r   cmds     r   r    z'load_app_from_script.<locals>.<genexpr>   s     *u3XbcfhsXt3*us   z, c              3   &   K   | ]	  \  }}|  y wr   r   )r   namer%   s      r   r    z'load_app_from_script.<locals>.<genexpr>   s     !B74$!Bs   z#Error: Multiple App objects found: z. Please specify one using 'z:app_name'.) r   r   strrsplitanyr   resolveexistsprintsysstderrexitsuffix	importlibutilspec_from_file_locationloadermodule_from_specmodulesr   exec_modulehasattrgetattrr(   dir
startswithappendlenextendr&   valuesjoin)r   r   app_name
script_strscript_path_strscript_pathspecmoduleapp_objapp_objectsr+   objregistered_appsr%   appfiltered_appsnamesr   s                    @r   load_app_from_scriptrS   %   ss   ,  HVJ
j.8.?.?Q.G++ c)[{)[&[)H/K v,K6l%%'K}L9

K&%<=CJJO >>112I;WD|t{{*3K=C#**U^^,,T2F+1CKK'(	 	" ('( vx(,XJl;-rRY\YcYcdHHQK&(+'3'HXJ&EFSZZXHHQK   K 	4D??3'fd+c3'&&c{3		4 =k]"MTWT^T^_HHQK{a !O% v33,#***u#--:N:N:P*uuv ;FdYT3TcIcdC[dMd+;!#		!Bk!BB,6vt,DS[&
9%@\]g\hhst #Ag}i( (J es   O9O&O&O#)__doc__importlib.utilr6   r2   
contextlibr   pathlibr   typingr   r   r   cyclopts.command_specr   r   r,   tuplerS   r   r   r   <module>r[      sW    4  
 %    - % %*qt qeSj0A qr   