
    i                       S SK Jr  S SKJrJrJrJrJrJrJ	r	J
r
Jr  S SKr\R                  S:  a  S SKJr  OS SKJr  S SKJrJrJr  SSKJr  SS	KJr  SS
KJrJrJr  \(       a  SSKJr  SSKJr   " S S\5      r \" S5      r!\	" S5      r"\	" SSS9r# " S S\\\!\#4   5      r$\SS j5       r%\SSSS.       SS jj5       r% SSSSS.         SS jjjr% S        S!S jjr&g)"    )annotations)	TYPE_CHECKINGAnyCallableGenericProtocolTypeTypeVarcastoverloadN)   
   )	ParamSpec)	BaseModel
ConfigDictField   )WorkflowValidationError)ResourceDefinition)inspect_signatureis_free_functionvalidate_step_signature)Workflow)RetryPolicyc                  ~    \ rS rSr% \" SS9rS\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   \" SS9rS\S'   Sr	g)
StepConfig(   T)arbitrary_types_allowedz	list[Any]accepted_eventsstr
event_namereturn_typesz
str | Nonecontext_parameterintnum_workersRetryPolicy | Noneretry_policyzlist[ResourceDefinition]	resourcesN)defaultzType[BaseModel] | Nonecontext_state_type )
__name__
__module____qualname____firstlineno__r   model_config__annotations__r   r*   __static_attributes__r+       N/home/james-whalen/.local/lib/python3.13/site-packages/workflows/decorators.pyr   r   (   sF    d;LO!!$$''16t1D.Dr3   r   PRR_coT)	covariantc                  B    \ rS rSr% SrS\S'   S\S'   S\S'   SS jrS	rg
)StepFunction:   zRA decorated function, that has some _step_config metadata from the @step decoratorr   _step_configr    r,   r.   c                    g Nr+   )selfargskwargss      r4   __call__StepFunction.__call__B   s    3r3   r+   N)r@   zP.argsrA   zP.kwargsreturnr7   )r,   r-   r.   r/   __doc__r1   rB   r2   r+   r3   r4   r:   r:   :   s    \MFr3   r:   c                    g r>   r+   )funcs    r4   steprH   E   s    69r3      workflowr%   r'   c                    g r>   r+   rJ   s      r4   rH   rH   I   s     69r3   c               6   ^^^ SUUU4S jjnU b  U" U 5      $ U$ )a  
Decorate a callable to declare it as a workflow step.

The decorator inspects the function signature to infer the accepted event
type, return event types, optional `Context` parameter (optionally with a
typed state model), and any resource injections via `typing.Annotated`.

When applied to free functions, provide the workflow class via
`workflow=MyWorkflow`. For instance methods, the association is automatic.

Args:
    workflow (type[Workflow] | None): Workflow class to attach the free
        function step to. Not required for methods.
    num_workers (int): Number of workers for this step. Defaults to 4.
    retry_policy (RetryPolicy | None): Optional retry policy for failures.

Returns:
    Callable: The original function, annotated with internal step metadata.

Raises:
    WorkflowValidationError: If signature validation fails or when decorating
        a free function without specifying `workflow`.

Examples:
    Method step:

    ```python
    class MyFlow(Workflow):
        @step
        async def start(self, ev: StartEvent) -> StopEvent:
            return StopEvent(result="done")
    ```

    Free function step:

    ```python
    class MyWorkflow(Workflow):
        pass

    @step(workflow=MyWorkflow)
    async def generate(ev: StartEvent) -> NextEvent: ...
    ```
c                   > [        T[        5      (       a  TS::  a  [        S5      e[        U TT5      n [	        U R
                  5      (       a/  Tc  SU R                   S3n[        U5      eTR                  U 5        U $ )Nr   z-num_workers must be an integer greater than 0zTo decorate z5 please pass a workflow class to the @step decorator.)
isinstancer$   r   make_step_functionr   r.   r,   add_step)rG   msgr%   r'   rK   s     r4   	decoratorstep.<locals>.decorator   s    +s++{a/?)?  "$\B D--..$T]]O3hi-c22d#r3   rG   Callable[P, R]rD   StepFunction[P, R]r+   )rG   rK   r%   r'   rS   s    ``` r4   rH   rH   R   s&    f " r3   c                B   [        U 5      n[        U5        [        [        UR                  R                  5       5      5      u  pE[        [        [        [        4   U 5      n[        UUUR                  UR                  UR                  UUUR                  S9Ul        U$ )N)r   r!   r"   r#   r*   r%   r'   r(   )r   r   nextiterr   itemsr   r:   r5   r6   r   r"   r#   r*   r(   r<   )rG   r%   r'   specr!   r   casteds          r4   rP   rP      s     T"DD!"&tD,@,@,F,F,H'I"JJ,q!t$d+F$'&&0022!..	F Mr3   rU   )rK   Type['Workflow'] | Noner%   r$   r'   r&   rD   z.Callable[[Callable[P, R]], StepFunction[P, R]]r>   )
rG   zCallable[P, R] | NonerK   r^   r%   r$   r'   r&   rD   zCCallable[[Callable[P, R]], StepFunction[P, R]] | StepFunction[P, R])rI   N)rG   rV   r%   r$   r'   r&   rD   rW   )'
__future__r   typingr   r   r   r   r   r	   r
   r   r   sysversion_infor   typing_extensionspydanticr   r   r   errorsr   resourcer   utilsr   r   r   rK   r   r'   r   r   r5   r6   r7   r:   rH   rP   r+   r3   r4   <module>rh      sn   #
 
 
 w + 1 1 + (  " %
E 
E cNCLv&G8WQW- G 
 9 
 9 
 )-'+	9%9 9 %	9
 49 
9 #'G )-'+G
G &G 	G
 %G IGV TX
'*>Pr3   