
    j                       d Z ddlmZ ddlZddlZddl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mZmZmZ  ed	      Z ed
      Z e       ZeZeeedz  f   Ze G d d             Ze G d d             ZeZeZe G d d             Zy)zBCaller-owned registration for every bootstrap resource allocation.    )annotationsN)Callable)	ExitStack)RLock)TracebackType)Literal	ParamSpecTypeVarfinal_P_Tc                  6    e Zd ZdZddd	 	 	 	 	 	 	 ddZddZy)	
_CloseOnce_close_closed_pending_failure_retryFNretrypending_failurec               <    || _         d| _        || _        || _        y )NFr   )selfcloser   r   s       t/home/cube/projects/richard/.worktrees/nutricoach-v140-impl/gateway/platforms/nutrition_weekly_reminder_resources.py__init__z_CloseOnce.__init__   s!      /    c                l   | j                   ry d }| j                   s%	 | j                          d| _         | j                   s%||d   j                  |d         d y # t        $ rN}| j                  s |||j                  f}| j
                  | j                         }|	|}d| _         Y d }~zd }~ww xY w)NTr      )r   r   BaseExceptionr   __traceback__r   with_traceback)r   pendingerrorauthoritatives       r   __call__z_CloseOnce.__call__"   s    <<EI,,,# ,, !*++GAJ7TA  ! 	,{{?#U%8%88G((4$($9$9$;M$0"/'+	,s   A 	B3%AB..B3)r   zCallable[[], None]r   boolr   z+Callable[[], _PendingFailure | None] | NonereturnNoner(   r)   )__name__
__module____qualname__	__slots__r   r&    r   r   r   r      s=    CI ;@GK'37D 
Br   r   c                  8    e Zd ZdZdd	 	 	 	 	 ddZd	dZd
dZy)_OwnedFdfd_close_descriptor_pending_stateopen)initial_statec               <    d| _         || _        d | _        || _        y )Nr2   )r   close_descriptorr8   s      r   r   z_OwnedFd.__init__<   s!     !104>Kr   c                   | j                   dk(  r| j                  dk  rd| _         | j                   dk7  r	 | j                   dk(  rM| j                  dk  rd| _         6	 t        j                  | j                  t        j                        }d| _         d| _         | j                  | j                         d| _        d| _         | j                   dk7  r| j                  ,| j                  d   j                  | j                  d         d y # t        $ r7}|j
                  t
        j                  k(  rd| _        d| _         Y d }~ d }~ww xY w# t        $ r)}| j                  ||j                  f| _	        Y d }~d }~ww xY w)Nr7   r   closed	uncertainr:   r   )r6   r3   fcntlF_GETFDOSErrorerrnoEBADFr4   r    r5   r!   r"   )r   _probe_errorr$   s       r   r   z_OwnedFd.closeE   sJ    ;;& TWWq["DKkkX%?;;+-ww{&. !KK? #)DK)&&tww/&% kkX%, ==$--"11$--2BCM % # &,,;&(DG*2DK$ ! ?==($)5+>+>$>DM?sG   %E .D 7E 	E+E?E EEE 	F E;;F c                L    | j                   dk7  ry | j                  }d | _        |S )Nr=   )r6   r5   )r   r#   s     r   take_pending_failurez_OwnedFd.take_pending_failurec   s&    ;;("--r   N)r;   zCallable[[int], None]r8   zLiteral['open', 'uncertain']r(   r)   r*   )r(   z_PendingFailure | None)r+   r,   r-   r.   r   r   rG   r/   r   r   r1   r1   8   s:    AI 7=L 5L3L 
LN<r   r1   c                  h    e Zd ZdZdZddZddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZddZ	ddZ
dd	Zy
)ResourceRegistrarzBOne idempotent reverse-order owner shared by all nested factories.)_fds
_resourcesc                0    t               | _        i | _        y N)r   rK   rJ   r   s    r   r   zResourceRegistrar.__init__u   s    #+)+	r   c                v    d}	 | j                   j                  |      }d}|s |        y y # |s |        w w xY w)NFT)rK   callback)r   guard
registeredrD   s       r   _register_guardz!ResourceRegistrar._register_guardy   s@    
	((/AJ : s   , 8c                L    t        fd      }| j                  |       y )Nc                       i S rM   r/   )argsr   kwargss   r   <lambda>z,ResourceRegistrar.callback.<locals>.<lambda>   s    5$#9&#9r   )r   rS   )r   r   rV   rW   rQ   s    ``` r   rP   zResourceRegistrar.callback   s     9:U#r   c                    g d }	 j                   |              t        fd      }| j                  |       d   S # t        $ r | |         r d           w xY w)Nc                       d         S )Nr   r/   )r   	resourcess   r   rX   z)ResourceRegistrar.adopt.<locals>.<lambda>   s    uYq\':r   r   )appendr   rP   r    )r   factoryr   rQ   r[   s     ` @r   adoptzResourceRegistrar.adopt   s|     !	#'		WY':;EMM%  |  	   il#	s   6A "A%c                   t        t        j                        }t        5  	  |       |_        t        |j                  d|j                        }| j                  |       || j                  |j                  <   	 d d d        |j                  S # t        $ r |j                           w xY w# 1 sw Y   |j                  S xY w)NTr   )
r1   osr   _FD_LIFECYCLE_LOCKr3   r   rG   rS   rJ   r    )r   openerownedrQ   s       r   open_fdzResourceRegistrar.open_fd   s    "
!8"KKt$)$>$> $$U+&+		%((#   xx !    xxs   B-ABB**B--Cc                    t         5  | j                  j                  |d       }||j                          d d d        y # 1 sw Y   y xY wrM   )ra   rJ   popr   )r   
descriptorrc   s      r   close_fdzResourceRegistrar.close_fd   s4    IIMM*d3E   s	   /?Ac                    t         5  | j                  j                          | j                  j	                          d d d        y # 1 sw Y   y xY wrM   )ra   rK   r   rJ   clearrN   s    r   r   zResourceRegistrar.close   s/    OO!!#IIOO  s   5AANr*   )rQ   r   r(   r)   )r   zCallable[_P, None]rV   z_P.argsrW   z	_P.kwargsr(   r)   )r]   zCallable[[], _T]r   zCallable[[_T], None]r(   r   )rb   zCallable[[], int]r(   int)rg   rk   r(   r)   )r+   r,   r-   __doc__r.   r   rS   rP   r^   rd   rh   r   r/   r   r   rI   rI   o   se    L&I,$'$07$CL$	$'0D	" r   rI   )rl   
__future__r   rB   r?   r`   collections.abcr   
contextlibr   	threadingr   typesr   typingr   r	   r
   r   r   r   ra   FD_LIFECYCLE_LOCKtupler    _PendingFailurer   r1   
CloseGuardOwnedDescriptorrI   r/   r   r   <module>rx      s    H "   	 $     5 5t_T]W & }t';;< B B BD / / /d 
 B B Br   