
    k7i#                         S r SSKrSSKrSSKJr  SSKJr  SSKJ	r	  \	(       a  SSK
Jr  SSKJr  \S 5       rS	\\-  S
\S\4   4S jrg)z.Load Cyclopts App objects from Python scripts.    N)contextmanager)Path)TYPE_CHECKINGApp)CommandSpecc               #   n   #    SSK Jn   U R                  nS n X l        Sv   Xl        g! Xl        f = f7f)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                     g)z9No-op replacement for App.__call__ during module loading.N )selfargskwargss      I/home/james-whalen/.local/lib/python3.13/site-packages/cyclopts/loader.py_dummy_call,_suppress_app_execution.<locals>._dummy_call   s        N)cycloptsr   __call__)r   original_callr   s      r   _suppress_app_executionr      s/      LLM%"$}s   5
* 525scriptreturnr   c                 N  ^ SSK Jn  Sn[        U 5      nSU;   aP  UR                  SS5      u  nmT(       a(  [	        U4S jS 5       5      (       d  Tn[        U5      nO[        U 5      nO[        U 5      nUR                  5       nUR                  5       (       d2  [        SU S	3[        R                  S
9  [        R                  " S5        UR                  S:X  d2  [        SU S3[        R                  S
9  [        R                  " S5        [        R                  R                  SU5      nUb  UR                   c2  [        SU S3[        R                  S
9  [        R                  " S5        [        R                  R#                  U5      nU[        R$                  S'   ['        5          UR                   R)                  U5        SSS5        U(       a  [+        Xr5      (       d5  [        SU SU S3[        R                  S
9  [        R                  " S5        [-        Xr5      n[/        X5      (       d2  [        SU S3[        R                  S
9  [        R                  " S5        X4$ / n	[1        U5       HJ  n
U
R3                  S5      (       a  M  [-        Xz5      n[/        X5      (       d  M8  U	R5                  X45        ML     U	(       d2  [        SU S3[        R                  S
9  [        R                  " S5        [7        U	5      S:  a  / nU	 HH  u  p[+        US5      (       d  M  UR9                  S UR:                  R=                  5        5       5        MJ     U	 V
Vs/ s H  u  pX;  d  M  X4PM     nn
nU(       a  Un	[7        U	5      S:  ao  SR?                  S U	 5       5      n[/        U [
        5      (       a  [        U 5      OU n[        SU SU S3[        R                  S
9  [        R                  " S5        U	S   u  pX4$ ! , (       d  f       GNM= fs  snn
f )a  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   ,   >#    U  H	  oT;   v   M     g 7fNr   ).0seppotential_app_names     r   	<genexpr>'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   T   #    U  H  n[        U[        5      (       a  M  Uv   M      g 7fr   )
isinstancer   )r   cmds     r   r!   r"      s      *u:P3XbcfhsXt33:Ps   (	(z, c              3   *   #    U  H	  u  pUv   M     g 7fr   r   )r   namer'   s      r   r!   r"      s     !Bk74$ks   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_scriptrU   %   s`   ,  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'(	 	"' 
# v((,XJl;-rRY\YcYcdHHQK&+'''HXJ&EFSZZXHHQK   KD??3''f+c''&&{3	   =k]"MTWT^T^_HHQK{a !O%3,,#***u#--:N:N:P*uu & ;Fd+YTIc[d[+Md+;!#		!Bk!BB,6vt,D,DS[&
9%@\]g\hhst #A}i 
#	"J es   -P%P!4P!
P)__doc__importlib.utilr8   r4   
contextlibr   pathlibr   typingr   r   r   cyclopts.command_specr   r   r.   tuplerU   r   r   r   <module>r]      sW    4  
 %    - % %*qt qeSj0A qr   