
    :j                     &   d Z ddlmZmZ ddlmZmZmZmZm	Z	 ddl
mZ ddlmZ  ed      Ze G d d	             Z G d
 d      Z e       Z	 	 	 	 ddedeee      deee      dededefdZdefdZdedee   fdZdee   fdZ G d d      Zy)z
Stage registry system for dynamic pipeline management.
Provides registration, discovery, and metadata management for pipeline stages.
    )	dataclassfield)CallableDictListOptionalType)
get_logger   )BasePipelineStagestagec                       e Zd ZU dZeed<   ed   ed<    ee      Z	e
e   ed<    ee      Ze
e   ed<   dZeed	<   d
Zeed<   d Zy)StageDefinitionz=Definition of a pipeline stage with metadata and dependenciesnamer   stage_class)default_factory
depends_onproduces_forTrequired descriptionc                 `    | j                   st        d      | j                  st        d      y)zValidate stage definitionzStage name cannot be emptyzStage class cannot be NoneN)r   
ValueErrorr   selfs    5/root/.openclaw/workspace/harvester/stage/registry.py__post_init__zStageDefinition.__post_init__   s/    yy9::9::      N)__name__
__module____qualname____doc__str__annotations__r	   r   listr   r   r   r   boolr   r    r   r   r   r      sU    G
I)**!$7JS	7#D9L$s)9HdK;r   r   c                   x    e Zd ZdZd ZdeddfdZdedee   fdZ	de
e   fd	Zde
e   fd
ZdedefdZddZy)StageRegistryz0Registry for managing pipeline stage definitionsc                      i | _         d| _        y )NF)_stages_initializedr   s    r   __init__zStageRegistry.__init__(   s    35!r   
definitionreturnNc                     |j                   | j                  v r"t        j                  d|j                           || j                  |j                   <   t        j	                  d|j                           y)zRegister a stage definitionz&Overriding existing stage definition: zRegistered stage: N)r   r+   loggerwarningdebug)r   r.   s     r   registerzStageRegistry.register,   sV    ??dll*NNCJOOCTUV(2Z__%)*//):;<r   r   c                 8    | j                   j                  |      S zGet stage definition by name)r+   getr   r   s     r   r7   zStageRegistry.get4   s    ||%%r   c                 H    t        | j                  j                               S )z$Get all registered stage definitions)r%   r+   valuesr   s    r   list_allzStageRegistry.list_all8   s    DLL'')**r   c                 H    t        | j                  j                               S )zGet all registered stage names)r%   r+   keysr   s    r   
list_nameszStageRegistry.list_names<   s    DLL%%'((r   c                     || j                   v S )zCheck if stage is registered)r+   r8   s     r   existszStageRegistry.exists@   s    t||##r   c                 b    | j                   j                          t        j                  d       y)zClear all registered stageszCleared all stage registrationsN)r+   clearr1   r3   r   s    r   rB   zStageRegistry.clearD   s    67r   )r/   N)r   r    r!   r"   r-   r   r4   r#   r   r7   r   r;   r>   r&   r@   rB   r'   r   r   r)   r)   %   sn    :"=? =t =& & 9 &+$/ +)DI )$3 $4 $8r   r)   Nr   r   r   r   r   r/   c                 H     dt         d   dt         d   f fd}|S )z)Decorator for registering pipeline stagesr   r   r/   c                 d    t        | xs g xs g       }t        j                  |       | S )N)r   r   r   r   r   r   )r   	_registryr4   )r   r.   r   r   r   r   r   s     r   	decoratorz!register_stage.<locals>.decoratorW   s?    $#!'R%+#

 	:&r   )r	   )r   r   r   r   r   rF   s   ````` r   register_stagerG   N   s/    
t$78 
TBU=V 
 
 r   c                      t         S )zGet the global stage registryrE   r'   r   r   get_registryrJ   f   s    r   c                 ,    t         j                  |       S r6   )rE   r7   )r   s    r   get_stage_definitionrL   k   s    ==r   c                  *    t         j                         S )zList all registered stage names)rE   r>   r'   r   r   list_registered_stagesrN   p   s    !!r   c                   L    e Zd ZdZedefd       Zdedee	   fdZ
dedefdZy)StageRegistryMixinz7Mixin to provide registry access to pipeline componentsr/   c                     t         S )zGet the stage registryrI   r   s    r   registryzStageRegistryMixin.registryx   s
     r   r   c                 8    | j                   j                  |      S r6   )rR   r7   r8   s     r   get_stage_defz StageRegistryMixin.get_stage_def}   s    }}  &&r   c                 8    | j                   j                  |      S )z!Check if stage exists in registry)rR   r@   r8   s     r   stage_existszStageRegistryMixin.stage_exists   s    }}##D))r   N)r   r    r!   r"   propertyr)   rR   r#   r   r   rT   r&   rV   r'   r   r   rP   rP   u   sI    A-  '# '(?*C '* * *r   rP   )NNTr   )r"   dataclassesr   r   typingr   r   r   r   r	   tools.loggerr
   baser   r1   r   r)   rE   r#   r&   rG   rJ   rL   rN   rP   r'   r   r   <module>r\      s   
 ) 7 7 # #	G	 ; ; ;$"8 "8L O	
 '+(,
c# 49% 	
  0m 
s x'@ 
"S	 "
* *r   