
    'j*M                        d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZmZ d d	lmZmZ d d
lmZ d dlmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z)  G d d          Z* G d d          Z+dde,dee         defdZ-ddee         defdZ.	 ddee         defdZ/dS )    )wraps)Logger)CallableUnionOptionalSequencePatternList)BoltContext)	BoltError)ListenerCustomListener)ListenerMatcherCustomListenerMatcher)workflow_step_editworkflow_step_saveworkflow_step_execute)CustomMiddleware
Middleware)BoltResponse)_is_used_without_argument)Complete	Configure)FailUpdate)	WebClientc                      e Zd ZU dZeeef         ed<   ee	         ed<   ee
         ed<   ee
         ed<   ee
         ed<   	 	 ddeeef         dee         d	ee	         fd
Zdddddeeedef         ef                  deeeef                  deeed                           fdZdddddeeedef         ef                  deeeef                  deeed                           fdZdddddeeedef         ef                  deeeef                  deeed                           fdZdd	ee	         ddfdZ	 	 ddedee
eee         f         deeedef         ef                  deeeef                  de
f
dZe	 ddedeeeedef         ef                           d	ee	         dee         fd            Ze	 ddedeeeeef                           d	ee	         dee         fd            ZdS )WorkflowStepBuilderzdSteps from apps
    Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
    callback_id_base_logger_edit_save_executeNapp_namebase_loggerc                 h    || _         |pt          | _        || _        d| _        d| _        d| _        dS )a  
        Deprecated:
            Steps from apps for legacy workflows are now deprecated.
            Use new custom steps: https://docs.slack.dev/workflows/workflow-steps/

        This builder is supposed to be used as decorator.

            my_step = WorkflowStep.builder("my_step")
            @my_step.edit
            def edit_my_step(ack, configure):
                pass
            @my_step.save
            def save_my_step(ack, step, update):
                pass
            @my_step.execute
            def execute_my_step(step, complete, fail):
                pass
            app.step(my_step)

        For further information about WorkflowStep specific function arguments
        such as `configure`, `update`, `complete`, and `fail`,
        refer to `slack_bolt.workflows.step.utilities` API documents.

        Args:
            callback_id: The callback_id for the workflow
            app_name: The application name mainly for logging
            base_logger: The base logger
        N)r!   __name__r&   r"   r#   r$   r%   )selfr!   r&   r'   s       _/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/slack_bolt/workflows/step/step.py__init__zWorkflowStepBuilder.__init__$   s:    D ' ,H'

    )matchers
middlewarelazyr.   .r/   r0   ).Nc                     t          |          r'|d         }                     d|           _        |S  fd}|S )a  
        Deprecated:
            Steps from apps for legacy workflows are now deprecated.
            Use new custom steps: https://docs.slack.dev/workflows/workflow-steps/

        Registers a new edit listener with details.

        You can use this method as decorator as well.

            @my_step.edit
            def edit_my_step(ack, configure):
                pass

        It's also possible to add additional listener matchers and/or middleware

            @my_step.edit(matchers=[is_valid], middleware=[update_context])
            def edit_my_step(ack, configure):
                pass

        For further information about WorkflowStep specific function arguments
        such as `configure`, `update`, `complete`, and `fail`,
        refer to `slack_bolt.workflows.step.utilities` API documents.

        Args:
            *args: This method can behave as either decorator or a method
            matchers: Listener matchers
            middleware: Listener middleware
            lazy: Lazy listeners
        r   editc                       gng z   }                     d|          _        t                      fd            }|S )Nr2   c                       | i |S N argskwargsfuncs     r+   _wrapperz:WorkflowStepBuilder.edit.<locals>._inner.<locals>._wrapper{       tT,V,,,r-   )_to_listenerr#   r   r:   	functionsr;   r0   r.   r/   r*   s   `  r+   _innerz(WorkflowStepBuilder.edit.<locals>._innerw   d    $*:$$CI**69h
SSDJ4[[- - - - [- Or-   )r   r=   r#   r*   r.   r/   r0   r8   r:   r@   s   ````   r+   r2   zWorkflowStepBuilder.editM   sq    J %T** 	7D**64:NNDJK	 	 	 	 	 	 	 	 r-   c                     t          |          r'|d         }                     d|           _        |S  fd}|S )a
  
        Deprecated:
            Steps from apps for legacy workflows are now deprecated.
            Use new custom steps: https://docs.slack.dev/workflows/workflow-steps/

        Registers a new save listener with details.

        You can use this method as decorator as well.

            @my_step.save
            def save_my_step(ack, step, update):
                pass

        It's also possible to add additional listener matchers and/or middleware

            @my_step.save(matchers=[is_valid], middleware=[update_context])
            def save_my_step(ack, step, update):
                pass

        For further information about WorkflowStep specific function arguments
        such as `configure`, `update`, `complete`, and `fail`,
        refer to `slack_bolt.workflows.step.utilities` API documents.

        Args:
            *args: This method can behave as either decorator or a method
            matchers: Listener matchers
            middleware: Listener middleware
            lazy: Lazy listeners
        r   savec                       gng z   }                     d|          _        t                      fd            }|S )NrD   c                       | i |S r5   r6   r7   s     r+   r;   z:WorkflowStepBuilder.save.<locals>._inner.<locals>._wrapper   r<   r-   )r=   r$   r   r>   s   `  r+   r@   z(WorkflowStepBuilder.save.<locals>._inner   rA   r-   )r   r=   r$   rB   s   ````   r+   rD   zWorkflowStepBuilder.save   sq    H %T** 	7D**64:NNDJK	 	 	 	 	 	 	 	 r-   c                     t          |          r'|d         }                     d|           _        |S  fd}|S )a  
        Deprecated:
            Steps from apps for legacy workflows are now deprecated.
            Use new custom steps: https://docs.slack.dev/workflows/workflow-steps/

        Registers a new execute listener with details.

        You can use this method as decorator as well.

            @my_step.execute
            def execute_my_step(step, complete, fail):
                pass

        It's also possible to add additional listener matchers and/or middleware

            @my_step.save(matchers=[is_valid], middleware=[update_context])
            def execute_my_step(step, complete, fail):
                pass

        For further information about WorkflowStep specific function arguments
        such as `configure`, `update`, `complete`, and `fail`,
        refer to `slack_bolt.workflows.step.utilities` API documents.

        Args:
            *args: This method can behave as either decorator or a method
            matchers: Listener matchers
            middleware: Listener middleware
            lazy: Lazy listeners
        r   executec                       gng z   }                     d|          _        t                      fd            }|S )NrH   c                       | i |S r5   r6   r7   s     r+   r;   z=WorkflowStepBuilder.execute.<locals>._inner.<locals>._wrapper   r<   r-   )r=   r%   r   r>   s   `  r+   r@   z+WorkflowStepBuilder.execute.<locals>._inner   sd    $*:$$CI --iHjYYDM4[[- - - - [- Or-   )r   r=   r%   rB   s   ````   r+   rH   zWorkflowStepBuilder.execute   sq    H %T** 	7D --ixTTDMK	 	 	 	 	 	 	 	 r-   returnWorkflowStepc                     | j         t          d          | j        t          d          | j        t          d          t	          | j        | j         | j        | j        | j        |          S )a  
        Deprecated:
            Steps from apps for legacy workflows are now deprecated.
            Use new custom steps: https://docs.slack.dev/workflows/workflow-steps/

        Constructs a WorkflowStep object. This method may raise an exception
        if the builder doesn't have enough configurations to build the object.

        Returns:
            WorkflowStep object
        Nzedit listener is not registeredzsave listener is not registeredz"execute listener is not registered)r!   r2   rD   rH   r&   r'   )r#   r   r$   r%   rL   r!   r&   )r*   r'   s     r+   buildzWorkflowStepBuilder.build   s}     :=>>>:=>>>= @AAA(M]#
 
 
 	
r-   namelistener_or_functionsc                     t                               | j        | j        |||                     | j        || j                  |                     | j        || j                  | j                  S )N)r!   r&   rP   rO   r.   r/   r'   )rL   build_listenerr!   r&   to_listener_matchersr"   to_listener_middleware)r*   rO   rP   r.   r/   s        r+   r=   z WorkflowStepBuilder._to_listener  sl     **(]"7..t}hHYZZ224=*dN_``) + 
 
 	
r-   c                     g }||D ]}t          |t                    r|                    |           -t          |t                    r&|                    t	          | ||                     ht          dt          |                     |S )Nr&   r:   r'   zInvalid matcher: )
isinstancer   appendr   r   
ValueErrortype)r&   r.   r'   	_matchersms        r+   rS   z(WorkflowStepBuilder.to_listener_matchers  s     	 D Da11 D$$Q''''8,, 	D$$-%-!"(3      %%Ba%B%BCCCr-   c                     g }||D ]}t          |t                    r|                    |           -t          |t                    r&|                    t	          | ||                     ht          dt          |                     |S )NrV   zInvalid middleware: )rW   r   rX   r   r   rY   rZ   )r&   r/   r'   _middlewarer\   s        r+   rT   z*WorkflowStepBuilder.to_listener_middleware3  s     ! G Ga,, G&&q))))8,, 	G&&(%-!"(3      %%EDGG%E%EFFFr-   )NNr5   )r)   
__module____qualname____doc__r   strr	   __annotations__r   r   r   r,   r   boolr   r   r
   r2   rD   rH   rN   r=   staticmethodrS   rT   r6   r-   r+   r    r       s          sG|$$$$6""""HHx    
 #'(,	' '3<(' 3-' f%	' ' ' 'X KO<@484 4 4 5#t)!4o!EFG4 U8Z#789	4
 tHY/014 4 4 4r KO<@483 3 3 5#t)!4o!EFG3 U8Z#789	3
 tHY/013 3 3 3p KO<@483 3 3 5#t)!4o!EFG3 U8Z#789	3
 tHY/013 3 3 3j
 
&!1 
^ 
 
 
 
D KO<@
 

  %Xxh%GH
 5#t)!4o!EFG	

 U8Z#789
 

 
 
 
"  )- 4hsDy&9?&J KLM f% 
o		   \,  )- T%*(<"=>? f% 
j		   \  r-   r    c                      e Zd ZU eeef         ed<   	 eed<   	 eed<   	 eed<   	 ddddeeef         deede	e
         f         eee         f         deede	e
         f         eee         f         deede	e
         f         eee         f         de	e         d	e	e         fd
Zeddeeef         d	e	e         defd            Ze	 	 	 ddeeef         dedeeeee         f         dede	ee                  de	ee                  d	e	e         defd            Ze	 ddedeeef         d	e	e         defd            Ze	 ddedeeef         d	e	e         defd            ZdS )rL   r!   r2   rD   rH   N)r&   r'   .r&   r'   c                    || _         |pt          }|                     |||d|          | _        |                     |||d|          | _        |                     |||d|          | _        dS )aC  
        Deprecated:
            Steps from apps for legacy workflows are now deprecated.
            Use new custom steps: https://docs.slack.dev/workflows/workflow-steps/

        Args:
            callback_id: The callback_id for this step from app
            edit: Either a single function or a list of functions for opening a modal in the builder UI
                When it's a list, the first one is responsible for ack() while the rest are lazy listeners.
            save: Either a single function or a list of functions for handling modal interactions in the builder UI
                When it's a list, the first one is responsible for ack() while the rest are lazy listeners.
            execute: Either a single function or a list of functions for handling step from app executions
                When it's a list, the first one is responsible for ack() while the rest are lazy listeners.
            app_name: The app name that can be mainly used for logging
            base_logger: The logger instance that can be used as a template when creating this step's logger
        r2   )r!   r&   rP   rO   r'   rD   rH   N)r!   r)   rR   r2   rD   rH   )r*   r!   r2   rD   rH   r&   r'   s          r+   r,   zWorkflowStep.__init__U  s    4 ''x''#"&# ( 
 
	 ''#"&# ( 
 
	 **#")# + 
 
r-   rK   c                 $    t          ||          S )z
        Deprecated:
            Steps from apps for legacy workflows are now deprecated.
            Use new custom steps: https://docs.slack.dev/workflows/workflow-steps/
        r'   )r    )clsr!   r'   s      r+   builderzWorkflowStep.builder  s!     ##
 
 
 	
r-   rP   rO   r.   r/   c           	      .   |t          | d| d          t          |t                    r|g}t          |t                    r|S t          |t                    r|r|ng }|                    d|                     |||                     |r|ng }|                    d|                     |||                     |}|                    d          }	t          ||||	||dk    |          S t          d| dt          |           d	| d          )
Nz$ listener is required (callback_id: )r   ri   rH   )r&   r.   r/   ack_functionlazy_functionsauto_acknowledgementr'   zInvalid z listener: z detected (callback_id: )r   rW   r   r   listinsert_build_primary_matcher_build_single_middlewarepopr   rZ   )
rj   r!   r&   rP   rO   r.   r/   r'   r?   rn   s
             r+   rR   zWorkflowStep.build_listener  s    !(tWWWWWXXX+X66 	<%:$;!+X66 !	}((-t44 	}#+3xxHOO** + +     (29rJ,, + -     .I$==++L!!!%)(%)Y%6'    {t{{=R8S8S{{mx{{{|||r-   c                     |dk    rt          ||          S |dk    rt          ||          S |dk    rt          ||          S t          d|           Nr2   ri   rD   rH   zInvalid name )r   r   r   rY   rj   rO   r!   r'   s       r+   rs   z#WorkflowStep._build_primary_matcher  sq     6>>%k{KKKKV^^%k{KKKKY(+NNNN3T33444r-   c                     |dk    rt          ||          S |dk    rt          |          S |dk    rt          |          S t          d|           rw   )_build_edit_listener_middleware_build_save_listener_middleware"_build_execute_listener_middlewarerY   rx   s       r+   rt   z%WorkflowStep._build_single_middleware  sm     6>>2;KXXXXV^^2{KKKKY5+NNNN3T33444r-   r5   )NNN)r)   r_   r`   r   rb   r	   rc   r   r   r   r   r   r   r,   classmethodr    rk   r
   r   r   rR   rs   rt   r6   r-   r+   rL   rL   K  s        sG|$$$$.
NNNE
NNN_E #'(,0
 0
 0
 3<(0
 HS(<"8898XhEWWX	0

 HS(<"8898XhEWWX0
 xXl%; ;<hQYHZZ[0
 3-0
 f%0
 0
 0
 0
d 	
 	
%W"5 	
HVDT 	
`s 	
 	
 	
 [	
  5915(,1} 1}3<(1} 1}  %Xxh%GH	1}
 1} 4011} T*-.1} f%1} 
1} 1} 1} [1}f 
 )-	5 55 3<(5 f%	5
 
5 5 5 [5 
 )-	5 55 3<(5 f%	5
 
5 5 5 [5 5 5r-   rL   Nr!   r'   rK   c           
           dt           dt          dt          dt          g t          f         f fd}t          t          ||          S )Ncontextclientbodynextc                 B    t          ||          | d<    |            S )N)r!   r   r   	configurer   )r   r   r   r   r!   s       r+   edit_listener_middlewarezA_build_edit_listener_middleware.<locals>.edit_listener_middleware  s4      )# 
  
  

 tvvr-   rV   r   r   dictr   r   r   r)   )r!   r'   r   s   `  r+   rz   rz     sq      r<'(	      %   r-   c           
          dt           dt          dt          dt          g t          f         fd}t          t          ||           S )Nr   r   r   r   c                 >    t          ||          | d<    |            S )Nr   r   updater   r   r   r   r   s       r+   save_listener_middlewarezA_build_save_listener_middleware.<locals>.save_listener_middleware  s0     #
 
 
 tvvr-   rV   r   )r'   r   s     r+   r{   r{     sf    


 
 r<'(	
 
 
 
 %   r-   c           
          dt           dt          dt          dt          g t          f         fd}t          t          ||           S )Nr   r   r   r   c                 f    t          ||          | d<   t          ||          | d<    |            S )Nr   completefail)r   r   r   s       r+   execute_listener_middlewarezG_build_execute_listener_middleware.<locals>.execute_listener_middleware#  sP     '
 
 

 
 
 
 tvvr-   rV   r   )r'   r   s     r+   r|   r|      sf      r<'(	     (   r-   r5   )0	functoolsr   loggingr   typingr   r   r   r   r	   r
   slack_bolt.context.contextr   slack_bolt.errorr   slack_bolt.listenerr   r   slack_bolt.listener_matcherr   r   $slack_bolt.listener_matcher.builtinsr   r   r   slack_bolt.middlewarer   r   slack_bolt.responser   #slack_bolt.workflows.step.internalsr   ,slack_bolt.workflows.step.utilities.completer   -slack_bolt.workflows.step.utilities.configurer   (slack_bolt.workflows.step.utilities.failr   *slack_bolt.workflows.step.utilities.updater   slack_sdk.webr   r    rL   rb   rz   r{   r|   r6   r-   r+   <module>r      sv               E E E E E E E E E E E E E E E E 2 2 2 2 2 2 & & & & & & 8 8 8 8 8 8 8 8 N N N N N N N N         
 ? > > > > > > > , , , , , , I I I I I I A A A A A A C C C C C C 9 9 9 9 9 9 = = = = = = # # # # # #o o o o o o o od	Z5 Z5 Z5 Z5 Z5 Z5 Z5 Z5D  8FCS _i    4 &1A Z    4 %) &!     r-   