o
    i)                     @  s  d Z ddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z	ddlZddlZddlZddlZddlmZmZ ddlmZmZ ddl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m Z m!Z!m"Z" ddl#Z$ddl%Z$ddl&Z'ddl(Z'ddl)Z'ddl*Z'ddl+Z'ddl,Z'ddl-Z'd
dl.m/Z/m0Z0m1Z1m2Z2 e3e4Z5G dd dZ6eG dd dZ7G dd dZ8G dd de/Z9G dd de0Z:d?d*d+Z;G d,d- d-eZ<G d.d/ d/eZ=d0gZ>G d1d2 d2e<Z?G d3d4 d4e=Z@d@d8d9ZAdAd=d>ZBdS )BzActivity worker.    )annotationsN)ABCabstractmethod)IteratorSequence)contextmanager)	dataclassfield)datetime	timedeltatimezone)AnyCallableNoReturnOptionalUnion   )ActivityInboundInterceptorActivityOutboundInterceptorExecuteActivityInputInterceptorc                   @  sz   e Zd Zd;ddZd<ddZd<ddZd<ddZd<dd Zd=d%d&Zd>d)d*Z	d?d/d0Z
d@d4d5ZdAd6d7Zd<d8d9Zd:S )B_ActivityWorkerbridge_worker-Callable[[], temporalio.bridge.worker.Worker]
task_queuestr
activitiesSequence[Callable]activity_executor%Optional[concurrent.futures.Executor]shared_state_managerOptional[SharedStateManager]data_converter"temporalio.converter.DataConverterinterceptorsSequence[Interceptor]metric_metertemporalio.common.MetricMeterclienttemporalio.client.Clientencode_headersboolreturnNonec       
         C  sd  || _ || _|| _|| _i | _|| _|| _|| _|
| _t	
 | _d | _d| _|	| _i | _d | _|D ]~}tjj|}|j| jv rHtd|j t|rVtd|j d|js|sdtd|j dt|tjjsv|svtd|j dt|tjjrzt !| W n t"y } z
td|j d|d }~ww |jr|| j|j< q1| jrtd	|| _q1d S )
NFzMore than one activity named zActivity named z" is a class instead of an instancez	Activity z5 is not async so an activity_executor must be presentza is not async and executor is not thread-pool executor, so a shared_state_manager must be presentz0 must be picklable when using a process executorzMore than one dynamic activity)#_bridge_worker_task_queue_activity_executor_shared_state_manager_running_activities_data_converter_interceptors_metric_meter_encode_headersasyncioQueue_fail_worker_exception_queue_worker_shutdown_event_seen_sync_activity_client_activities_dynamic_activity
temporalioactivity_Definitionmust_from_callablename
ValueErrorinspectisclass	TypeErroris_async
isinstance
concurrentfuturesThreadPoolExecutorProcessPoolExecutorpickledumps	Exception)selfr   r   r   r   r    r"   r$   r&   r(   r*   r@   defnerr rT   a/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/temporalio/worker/_activity.py__init__3   sr   

z_ActivityWorker.__init__c              
     s,  d fdd}t | }	 z`t    }t j||gt jdI dH  | r3|  |I dH  |I dH }|drYt	t 
d	d
}t  |j|j||_| j|j< n|drg |j|j ntd| W n% tjjjy   |  Y dS  ty } z	|  td|d}~ww q)z=Continually poll for activity tasks and dispatch to handlers.r,   r   c                     s    j  I d H N)r9   getrT   rQ   rT   rU   raise_from_exception_queue   s   z7_ActivityWorker.run.<locals>.raise_from_exception_queueT)return_whenNstart  )pending_heartbeatscancelzUnrecognized activity task: zActivity worker failed)r,   r   )r7   create_taskr.   poll_activity_taskwaitFIRST_COMPLETEDdoner_   HasField_RunningActivityr8   _handle_start_activity_task
task_tokenr\   taskr2   _handle_cancel_activity_taskRuntimeErrorr?   bridgeworkerPollShutdownErrorrP   )rQ   rZ   exception_task	poll_taskri   r@   rS   rT   rY   rU   run   sH   







z_ActivityWorker.runc                 C  s   | j r
| j   d S d S rW   )r:   setrY   rT   rT   rU   notify_shutdown   s   z_ActivityWorker.notify_shutdownc                   sj   	 z$|    I d H }tjjj|jd}d|jjj	_
|   |I d H  W n tjjjy3   Y d S w q)NTrh   zWorker shutting down)r.   ra   r?   rl   protoActivityTaskCompletionrh   resultfailedfailuremessagecomplete_activity_taskrm   rn   )rQ   ri   
completionrT   rT   rU   drain_poll_queue   s   z _ActivityWorker.drain_poll_queuec                   s8   dd | j  D }|rtj|ddiI d H  d S d S )Nc                 S  s   g | ]}|j r|j qS rT   )ri   ).0vrT   rT   rU   
<listcomp>   s    z6_ActivityWorker.wait_all_completed.<locals>.<listcomp>return_exceptionsF)r2   valuesr7   gather)rQ   running_tasksrT   rT   rU   wait_all_completed   s
   z"_ActivityWorker.wait_all_completedrh   bytesr_   ,temporalio.bridge.proto.activity_task.Cancelc                 C  sd   | j |}|std| dS td||j tjj	
|j|j_|j|jjp-|jjd dS )z0Request cancellation of a running activity task.z)Cannot find activity to cancel for token Nz"Cancelling activity %s, reason: %s)cancelled_by_request)r2   rX   warningswarnloggerdebugreasonr?   r@   ActivityCancellationDetails_from_protodetailscancellation_detailsr_   is_cancelledis_worker_shutdown)rQ   rh   r_   r@   rT   rT   rU   rj      s   
z,_ActivityWorker._handle_cancel_activity_taskr   r   c                 G  sL   t jj}| j|}|r"|js$|j| t	| 
||||_d S d S d S rW   )r?   r@   r   r2   rX   rd   r^   
put_nowaitr7   r`   _heartbeat_asynclast_heartbeat_task)rQ   rh   r   r   r@   rT   rT   rU   
_heartbeat   s   

z_ActivityWorker._heartbeatr   logging.LoggerAdapterr@   rf   c           	   
     s"  d }|j  s|j  }|j  r|d u rd S | j}|jr:tjj|jj|jj	|jj
|jj| j|jjd}||}z&tjjj|d}|rQ|j||I d H  |d| |  | W d S  ty } z$|jrq|d n|jddd |j|d W Y d }~d S W Y d }~d S d }~ww )	N	namespaceworkflow_idworkflow_typeactivity_typeactivity_task_queueis_localrt   z#Recording heartbeat with details %sz@Failed recording heartbeat (activity already done, cannot error)z6Cancelling activity because failed recording heartbeatT)exc_info) cancelled_due_to_heartbeat_error)r^   empty
get_nowaitr3   infor?   	converterActivitySerializationContextworkflow_namespacer   r   r   r/   r   with_contextrl   ru   ActivityHeartbeatr   extendencoder   r.   record_activity_heartbeatrP   rd   	exceptionwarningr_   )	rQ   r   r@   rh   r   r"   context	heartbeatrS   rT   rT   rU   r      sN   



z _ActivityWorker._heartbeat_asyncr\   +temporalio.bridge.proto.activity_task.Startrunning_activityc                   s  t d|j| tjjj|d}tjj|j	|j
j|j|j| j|jd}| j|}z | ||||I dH }||gI dH \}|jjj| W nQ ty }	 zCzt|	tjjrktjj d |jj  nt|	tjtjjfr|jr|j}	tjj  dt!|	 d|	  |"|	|jj#j$I dH  nt|	tjtjjfr|j%j&r|j%j&j'rtjj  d |"tjj(d	d
d|jj#j$I dH  nt|	tjtjjfr|j%j&r|j%j&j)rtjj  d |"tjj(ddd|jj#j$I dH  nkt|	tjtjjfr|j*rtjj d |"tjd|jj+j$I dH  nDt|	tjj(r6|	j,tjj-j.kr6tjj jddddid ntjj j ddddid |"|	|jj#j$I dH  t|	t/j0j1r\| j23|	 W n3 t4y }
 z&tjj 5d|	  |j6  d|
 |jj#j$_7|jj#j$j8  W Y d}
~
nd}
~
ww W Y d}	~	nd}	~	ww z2d|_9|j:rz|j:I dH  W n   tjj 5d Y t d| | ; <|I dH  | j=|= W dS  t4y   tjj 5d Y dS w )zHandle a start activity task.

        Attempt to execute the user activity function and invoke the data converter on
        the result. Handle errors and send the task completion.
        zRunning activity %s (token %s)rt   r   NzCompleting asynchronouslyz:Completing as failure during heartbeat with error of type z: zNCompleting as failure due to unhandled cancel error produced by activity pauseActivityPausez:Unhandled activity cancel error produced by activity pause)typerz   zNCompleting as failure due to unhandled cancel error produced by activity resetActivityResetz:Unhandled activity cancel error produced by activity resetzCompleting as cancelled	CancelledzCompleting activity as failedT__temporal_error_identifierActivityFailure)r   extraz+Exception handling failed, original error: z"Failed building exception result: z&Final heartbeat task didn't trap errorz'Completing activity with completion: %szFailed completing activity task)>r   r   r   r?   rl   ru   rv   r   r   r   workflow_executionr   r   r/   r   r3   r   _execute_activityr   rw   	completedCopyFromBaseExceptionrI   r@   _CompleteAsyncErrorwill_complete_asyncSetInParentr7   CancelledError
exceptionsr   r   r   encode_failurerx   ry   r   r   pausedApplicationErrorresetr   	cancelledcategoryApplicationErrorCategoryBENIGNrJ   rK   BrokenExecutorr9   r   rP   r   Clearrz   application_failure_inford   r   r.   r{   r2   )rQ   rh   r\   r   r|   r   r"   rw   payloadrS   	inner_errrT   rT   rU   rg   "  s  






jz+_ActivityWorker._handle_start_activity_taskc                   s8  | j |j| j}|s*dt| j  }tjj	d|j d|j
j d| dd| js:tjjt t d| _d}|js~d	|_t| jtjjr]tjjt d
d|_|js\t |_nd	}| j}|sfJ tjj| d
d|_| jsz| | j_ d	| _ntjjt t d|_|j!}	|j"stj#j$gt%|j& }	n|	d
urt%|	t%|j&krd
}	z|j&sg n
|j'|j&|	dI d
H }
W n t(y } ztj	d|d
}~ww |j"s|
g}
z|j)sg n|'|j)I d
H }W n t(y } z	tjj	dd	d|d
}~ww tjj*d(i d|j+d|jd|j,dt-|j.d|d|/dr#t0|j1nd
d|j2d|/dr5t0|j3nd
dt-|j4d|/drIt0|j5nd
dt-|j6d| j7d|d|j
jd|j8d|j
j9d|j:d tj#j;<|j=d!|/d!rtj#j>?|j@nd
 | jAr|jBd
ur|jCD D ]}|jB'|gI d
H d" }|E| q |_FtG|jH|
|jsd
n| j|jCd#}tjjIJtjjI fd$d%d
|j| j|jsd
n|jjK|jL|rd
n| jM|js| jNnd
|jOd&	 tjjPQd' tR| |}tStT| jUD ]}|V|}q|WtX| |jF |Y|I d
H S ))zkInvoke the user's activity function.

        Exceptions are handled by a caller of this function.
        , Activity function z for workflow 9 is not registered on this worker, available activities: NotFoundError)r   thread_eventasync_eventFTN)
type_hintszFailed decoding argumentsz!Failed decoding heartbeat details)non_retryableactivity_idr   attemptcurrent_attempt_scheduled_timeheartbeat_detailsheartbeat_timeoutr   schedule_to_close_timeoutscheduled_timestart_to_close_timeoutstarted_timer   rh   r   r   workflow_run_idr   priorityretry_policyr   )fnargsexecutorheadersc                         S rW   rT   rT   r   rT   rU   <lambda>^      z3_ActivityWorker._execute_activity.<locals>.<lambda>	r   r   cancelled_eventworker_shutdown_eventshield_thread_cancel_exception#payload_converter_class_or_instanceruntime_metric_meterr(   r   zStarting activityrT   )Zr=   rX   r   r>   joinsortedkeysr?   r   r   r   r   r:   r@   _CompositeEvent	threadingEventr7   rH   syncrI   r0   rJ   rK   rL   r   no_thread_cancel_exception_ThreadExceptionRaisercancel_thread_raiserr1   	new_eventr;   r   	arg_typesrC   commonRawValueleninputdecoderP   r   Infor   r   _proto_to_datetimer   re   _proto_to_non_zero_timedeltar   r   r   r   r   r   r/   r   run_idr   Priorityr   r   RetryPolicy
from_protor   r6   payload_codecheader_fieldsr   r   r   r   r   _Contextrr   shieldedpayload_converterr5   r<   r   r   r   _ActivityInboundImplreversedlistr4   intercept_activityinit_ActivityOutboundImplexecute_activity)rQ   r\   r   rh   r"   activity_defactivity_namessync_non_threadedmanagerr   r   rS   r   r   new_payloadr  implinterceptorrT   r   rU   r     sF  
	

 $	

z!_ActivityWorker._execute_activityc                 C  sF   | j rd S | j|}|s!dt| j }td| d| d S )Nr   r   r   )r>   r=   rX   r   r   r   rD   )rQ   r@   r  r  rT   rT   rU   assert_activity_validy  s   z%_ActivityWorker.assert_activity_validN)r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r,   r-   )rh   r   r_   r   r,   r-   rh   r   r   r   r,   r-   )r   r   r@   rf   rh   r   r,   r-   )rh   r   r\   r   r   rf   r,   r-   )
r\   r   r   rf   rh   r   r"   r#   r,   r   )__name__
__module____qualname__rV   rq   rs   r}   r   rj   r   r   rg   r   r  rT   rT   rT   rU   r   2   s    

S
,





0 
! 8r   c                   @  s   e Zd ZU ded< dZded< dZded< dZded	< dZded
< dZded< dZ	ded< dZ
ded< dZded< dZded< eejjdZded< ddddddZdS )rf   zasyncio.Queue[Sequence[Any]]r^   Nz"Optional[temporalio.activity.Info]r   zOptional[asyncio.Task]ri   z-Optional[temporalio.activity._CompositeEvent]r   r    Optional[_ThreadExceptionRaiser]r   Fr+   r   rd   r   Optional[Exception]r   )default_factory6temporalio.activity._ActivityCancellationDetailsHolderr   )r   r   r,   r-   c                C  s^   || _ || _| jr| j  | js)| jr| jtjj	 | j
s+| jr-| j  d S d S d S d S rW   )r   r   r   rr   rd   r   raise_in_threadr?   r   r   r   ri   r_   )rQ   r   r   rT   rT   rU   r_     s   
z_RunningActivity.cancel)r   r+   r   r&  r,   r-   )r"  r#  r$  __annotations__r   ri   r   r   r   r   rd   r   r   r	   r?   r@   "_ActivityCancellationDetailsHolderr   r_   rT   rT   rT   rU   rf     s    
 
rf   c                   @  sB   e Zd ZdddZdddZdddZedddZdddZdS )r   r,   r-   c                 C  s    t  | _d | _d | _d| _d S Nr   )r   Lock_lock
_thread_id_pending_exception_shield_depthrY   rT   rT   rU   rV     s   

z_ThreadExceptionRaiser.__init__	thread_idintc                 C  s2   | j  || _W d    d S 1 sw   Y  d S rW   )r.  r/  )rQ   r2  rT   rT   rU   set_thread_id  s   "z$_ThreadExceptionRaiser.set_thread_idexc_typetype[Exception]c                 C  s:   | j  || _|   W d    d S 1 sw   Y  d S rW   )r.  r0  $_raise_in_thread_if_pending_unlocked)rQ   r5  rT   rT   rU   r)    s   
"z&_ThreadExceptionRaiser.raise_in_threadIterator[None]c                 c  s    | j  |  jd7  _W d    n1 sw   Y  z%d V  W | j  |  jd8  _|   W d    d S 1 s:w   Y  d S | j  |  jd8  _|   W d    w 1 sZw   Y  w Nr   )r.  r1  r7  rY   rT   rT   rU   r    s   
*
z_ThreadExceptionRaiser.shieldedc                 C  sF   | j d ur| jdkr| jr!tjjj| j | j d | _d S d S d S d S r,  )r/  r1  r0  r?   rl   runtimeRuntime_raise_in_threadrY   rT   rT   rU   r7    s   


z;_ThreadExceptionRaiser._raise_in_thread_if_pending_unlockedNr   )r2  r3  r,   r-   )r5  r6  r,   r-   )r,   r8  )	r"  r#  r$  rV   r4  r)  r   r  r7  rT   rT   rT   rU   r     s    



r   c                   @  s*   e Zd ZdddZdddZdddZdS )r  rm   r   r   rf   r,   r-   c                 C     || _ || _d S rW   )_worker_running_activity)rQ   rm   r   rT   rT   rU   rV     s   
z_ActivityInboundImpl.__init__outboundr   c                 C  s    t jj }|j|_|j|_d S rW   )r?   r@   r  currentr   r   )rQ   r@  r   rT   rT   rU   r    s   z_ActivityInboundImpl.initr  r   r   c              	     s  t |jpt |jj}|stjj    } j	}t
  jd
 fddfdd _ j}d }t|jtjjsT| jj}|sIJ ||j jI d H }t|jtjjra| jjjn| jjj}zV| jj}|soJ | jj}	|	swJ t}
||| jj|j|	j| j||jg	|j }t|jtjjrt!" }|#d	|
 |j$}
j%|j|
g|R  I d H W |r|&|jI d H  S S |r|&|jI d H  w w |j|j  I d H S )Nr   r   r,   r-   c                    s$   t jj  sJ |   d S rW   )r?   r@   r  rr   r   )ctxorig_heartbeatrT   rU   heartbeat_with_context  s   zE_ActivityInboundImpl.execute_activity.<locals>.heartbeat_with_contextc                    s   t  |  dS )N
   )r7   run_coroutine_threadsaferw   rB  )rE  looprT   rU   r      s    z7_ActivityInboundImpl.execute_activity.<locals>.<lambda>r   r   r   r,   r-   )'rE   iscoroutinefunctionr   __call__r?   r@   r  rA  r   r   r7   get_running_loopr   rI   r   rJ   rK   rL   r>  r1   register_heartbeaterrh   r3   r  payload_converter_classr?  r   r:   _execute_sync_activityr   r   r   r   contextvarscopy_contextinsertrq   run_in_executorunregister_heartbeater)rQ   r  rH   r   r   r   shared_managerr   r   r   funcr   current_contextrT   )rC  rE  rH  rD  rU   r    sj   
z%_ActivityInboundImpl.execute_activityN)rm   r   r   rf   r,   r-   )r@  r   r,   r-   )r  r   r,   r   )r"  r#  r$  rV   r  r  rT   rT   rT   rU   r    s    

r  c                   @  s*   e Zd ZdddZdd	d
ZdddZdS )r  rm   r   r   temporalio.activity.Infor,   r-   c                 C  r=  rW   )r>  _info)rQ   rm   r   rT   rT   rU   rV   >  s   
z_ActivityOutboundImpl.__init__c                 C  s   | j S rW   )rY  rY   rT   rT   rU   r   C  s   z_ActivityOutboundImpl.infor   r   c                 G  s   | j j| jjg|R   d S rW   )r>  r   rY  rh   )rQ   r   rT   rT   rU   r   F  s   z_ActivityOutboundImpl.heartbeatN)rm   r   r   rX  r,   r-   )r,   rX  rI  )r"  r#  r$  rV   r   r   rT   rT   rT   rU   r  =  s    

r  r   rX  r   1Union[Callable[..., None], SharedHeartbeatSender]r   r%  r   threading.Eventr   r   YUnion[type[temporalio.converter.PayloadConverter], temporalio.converter.PayloadConverter]r   'Optional[temporalio.common.MetricMeter]r   r(  r   Callable[..., Any]r   r   r,   c	                   s   |rt  j}
|
d ur||
 t trd fdd}n }tjj	tjjfdd|tjj
|d d	tjj
|d d	|s?d n|j||d |d
	 ||	 S )Nr   r   r,   r-   c                    s    j jg| R   d S rW   )send_heartbeatrh   rB  r   r   rT   rU   heartbeat_fna  s   z,_execute_sync_activity.<locals>.heartbeat_fnc                     r   rW   rT   rT   r   rT   rU   r   g  r   z(_execute_sync_activity.<locals>.<lambda>r   r   rI  )r   current_threadidentr4  rI   SharedHeartbeatSenderr?   r@   r  rr   r   r  )r   r   r   r   r   r   r   r   r   r   r2  ra  rT   r`  rU   rO  K  s2   



rO  c                   @  sL   e Zd ZdZe	dddd	ZedddZedddZedddZ	dS )SharedStateManagera  Base class for a shared state manager providing cross-process-safe
    primitives for use by activity executors.

    Cross-worker use of the shared state manager is encouraged.
    :py:meth:`create_from_multiprocessing` provides the commonly used
    implementation.
    Nmgr$multiprocessing.managers.SyncManagerqueue_poller_executorr   r,   c                 C  s   t | |p	tjdS )a+  Create a shared state manager from a multiprocessing manager.

        Args:
            mgr: Sync manager to create primitives from. This is usually
                :py:func:`multiprocessing.Manager`.
            queue_poller_executor: The executor used when running the
                synchronous heartbeat queue poller. This should be a
                :py:class:`concurrent.futures.ThreadPoolExecutor`. If unset, a
                thread pool executor is created with max-workers of 1.

        Returns:
            The shared state manager.
        r   )"_MultiprocessingSharedStateManagerrJ   rK   rL   )rf  rh  rT   rT   rU   create_from_multiprocessing  s   z.SharedStateManager.create_from_multiprocessingr[  c                 C     t )z;Create a threading.Event that can be used across processes.NotImplementedErrorrY   rT   rT   rU   r        zSharedStateManager.new_eventrh   r   r   Callable[..., None]rd  c                      t )aA  Register a heartbeat function.

        Args:
            task_token: Unique task token for the heartbeater.
            heartbeat: Function that should be called when the resulting sender
                is sent a heartbeat.

        Returns:
            A sender that can be pickled for use in another process.
        rl  rQ   rh   r   rT   rT   rU   rM    s   z'SharedStateManager.register_heartbeaterr-   c                   rp  )zUnregisters a previously registered heartbeater for the task
        token. This should also flush any pending heartbeats.
        rl  rQ   rh   rT   rT   rU   rT    s   z)SharedStateManager.unregister_heartbeaterrW   )rf  rg  rh  r   r,   re  r,   r[  rh   r   r   ro  r,   rd  rh   r   r,   r-   )
r"  r#  r$  __doc__staticmethodrj  r   r   rM  rT  rT   rT   rT   rU   re  {  s    re  c                   @  s   e Zd ZdZeddd	Zd
S )rd  zXBase class for a heartbeat sender that is picklable for use in another
    process.
    rh   r   r   r   r,   r-   c                 G  rk  )z6Send a heartbeat for the given task token and details.rl  rQ   rh   r   rT   rT   rU   r_    rn  z$SharedHeartbeatSender.send_heartbeatNr!  )r"  r#  r$  rv  r   r_  rT   rT   rT   rU   rd    s    rd  __temporal_heartbeat_complete__c                      sF   e Zd Zd fddZdd
dZdddZdddZdddZ  ZS )ri  rf  rg  rh  concurrent.futures.Executorr,   r-   c                   s2   t    || _|| _|d| _i | _i | _d S )Nr]   )superrV   _mgr_queue_poller_executorr8   _heartbeat_queue_heartbeats_heartbeat_completions)rQ   rf  rh  	__class__rT   rU   rV     s   

z+_MultiprocessingSharedStateManager.__init__r[  c                 C  s
   | j  S rW   )r|  r   rY   rT   rT   rU   r     s   
z,_MultiprocessingSharedStateManager.new_eventrh   r   r   ro  rd  c                   s2   || j |< t| j dkr| j| j t| jS r9  )r  r  r}  submit_heartbeat_processor%_MultiprocessingSharedHeartbeatSenderr~  rq  rT   rT   rU   rM    s
   

z7_MultiprocessingSharedStateManager.register_heartbeaterc                   sb   t  t    fdd| j|< z| j|tfdd   I d H  W | j|= d S | j|= w )Nc                     s     jS rW   )call_soon_threadsaferr   rT   finish_eventrH  rT   rU   r     s    zK_MultiprocessingSharedStateManager.unregister_heartbeater.<locals>.<lambda>T   )r7   rL  r   r  r~  put _multiprocess_heartbeat_completerb   rr  rT   r  rU   rT    s   
z9_MultiprocessingSharedStateManager.unregister_heartbeaterc                 C  s   t | jdkr]z4| jdd}|d tkr*| j|d = | j|d }|r(|  W q | j|d }|r:||d   W n tjyE   Y n tyS   t	
d Y d S w t | jdksd S d S )Nr   Tg      ?r   z3Failed during multiprocess queue poll for heartbeat)r  r  r~  rX   r  r  queueEmptyrP   r   r   )rQ   itemr|   r   rT   rT   rU   r    s(   
z7_MultiprocessingSharedStateManager._heartbeat_processor)rf  rg  rh  rz  r,   r-   rs  rt  ru  r   )	r"  r#  r$  rV   r   rM  rT  r  __classcell__rT   rT   r  rU   ri    s    


	ri  c                      s(   e Zd Zd fddZdddZ  ZS )r  heartbeat_queue(queue.Queue[tuple[bytes, Sequence[Any]]]r,   r-   c                   s   t    || _d S rW   )r{  rV   r~  )rQ   r  r  rT   rU   rV     s   

z._MultiprocessingSharedHeartbeatSender.__init__rh   r   r   r   c                 G  s   | j ||fdd d S )NT   )r~  r  rx  rT   rT   rU   r_    s   z4_MultiprocessingSharedHeartbeatSender.send_heartbeat)r  r  r,   r-   r!  )r"  r#  r$  rV   r_  r  rT   rT   r  rU   r    s    r  ts'google.protobuf.timestamp_pb2.Timestampr
   c                 C  s   |   jtjdS )N)tzinfo)
ToDatetimereplacer   utc)r  rT   rT   rU   r    s   r  dur%google.protobuf.duration_pb2.DurationOptional[timedelta]c                 C  s    | j dkr| jdkrd S |  S r,  )nanossecondsToTimedelta)r  rT   rT   rU   r  !  s   r  )r   rX  r   rZ  r   r%  r   r[  r   r[  r   r\  r   r]  r   r(  r   r^  r   r   r,   r   )r  r  r,   r
   )r  r  r,   r  )Crv  
__future__r   r7   concurrent.futuresrJ   rP  rE   loggingmultiprocessingmultiprocessing.managersrN   r  r   r   abcr   r   collections.abcr   r   
contextlibr   dataclassesr   r	   r
   r   r   typingr   r   r   r   r   google.protobuf.duration_pb2googlegoogle.protobuf.timestamp_pb2temporalio.activityr?   temporalio.bridge.runtimetemporalio.bridge.workertemporalio.clienttemporalio.commontemporalio.convertertemporalio.exceptions_interceptorr   r   r   r   	getLoggerr"  r   r   rf   r   r  r  rO  re  rd  r  ri  r  r  r  rT   rT   rT   rU   <module>   s`    
    W&&k
0<F
