
    Ji                         d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
mZmZmZ d dlmZ d dlmZ erd dlmZ  G d	 d
      Z e       Ze G d d             Zy)    )	dataclass)Lock)TYPE_CHECKINGOptional)IdentityWeakKeyDict)ControlLoopFunctionPluginRegisteredWorkflowWorkflowRuntime)StepWorkerFunction)Workflow)Contextc                       e Zd ZdZddZdedededee	e
f   def
d	Zd
e	dededddee	e
f   ddfdZd
e	ded   fdZd
e	ddfdZy)WorkflowPluginRegistryzY
    Ensures that plugins register each workflow once and only once for each plugin.
    returnNc                 N    t               | _        t               | _        i | _        y N)r   	workflowsr   lockrun_contexts)selfs    u/var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/lib/python3.12/site-packages/workflows/runtime/workflow_registry.py__init__zWorkflowPluginRegistry.__init__   s$    
  ! 	 F	=?    workflowpluginworkflow_functionstepsc                 |   t        |      }| j                  j                  |      }|	||v r||   S | j                  5  | j                  j                  |      }|||v r||   cd d d        S |j	                  |||      }|t        ||      }|i }|| j                  |<   |||<   |cd d d        S # 1 sw Y   y xY wr   )typer   getr   registerr
   )r   r   r   r   r   plugin_type
plugin_mapregistered_workflows           r   get_registered_workflowz.WorkflowPluginRegistry.get_registered_workflow!   s     6l ^^''1
!kZ&?k**YY 	'++H5J%+*C!+.		' 	' #)//(<Mu"U"*&89JE&R#!
+5x(&9J{#&	' 	' 	's   &B2.:B22B;run_idcontextr   c                 >    t        |||||      | j                  |<   y )N)r'   r   r   r(   r   )RegisteredRunContextr   )r   r'   r   r   r(   r   s         r   register_runz#WorkflowPluginRegistry.register_run=   s(     %9%
&!r   r*   c                 8    | j                   j                  |      S r   )r   r!   r   r'   s     r   get_runzWorkflowPluginRegistry.get_runM   s      $$V,,r   c                 <    | j                   j                  |d        y r   )r   popr-   s     r   
delete_runz!WorkflowPluginRegistry.delete_runP   s    fd+r   )r   N)__name__
__module____qualname____doc__r   r   r	   r   dictstrr   r
   r&   r   r+   r   r.   r1    r   r   r   r      s    @'' ' /	'
 C++,' 
'8

 
  	

 
 C++,
 

 -c -h/E&F -, , ,r   r   c                   J    e Zd ZU eed<   eed<   eed<   ded<   eeef   ed<   y)r*   r'   r   r   r   r(   r   N)	r2   r3   r4   r7   __annotations__r   r   r6   r   r8   r   r   r*   r*   W   s*    K''((r   r*   N)dataclassesr   	threadingr   typingr   r   *workflows.runtime.types._identity_weak_refr   workflows.runtime.types.pluginr   r	   r
   r   %workflows.runtime.types.step_functionr   workflows.workflowr   workflows.context.contextr   r   workflow_registryr*   r8   r   r   <module>rD      sY    !  * J  E '1>, >,B +,  ) ) )r   