o
    i_                     @   s   d dl 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
mZ d dlZedddkZdZG dd	 d	eZd
d Zdd ZG dd deZeeje gZdd eD ZG dd dZdS )    N)Path)TracebackType)LiteralOptionalSYNCHRONICITY_TRACEBACK01c                   @   s   e Zd ZdZdd ZdS )UserCodeExceptionzThis is used to wrap and unwrap exceptions in "user code".

    This lets us have cleaner tracebacks without all the internal synchronicity stuff.c                 C   s
   || _ d S Nexc)selfr    r   L/home/ubuntu/.local/lib/python3.10/site-packages/synchronicity/exceptions.py__init__   s   
zUserCodeException.__init__N)__name__
__module____qualname____doc__r   r   r   r   r   r	      s    r	   c                    s    fdd}| S )Nc               
      s   z I d H W S  t y     tjy     ty     ty- }  zt| d } ~ w tyK }  ztjdk rFtsF| 	| j
j t|  d } ~ w tyZ }  zt| d } ~ ww )N)      )StopAsyncIterationasyncioCancelledErrorr	   TimeoutError	Exceptionsysversion_infor   with_traceback__traceback__tb_nextBaseExceptionr   coror   r   coro_wrapped   s,   z)wrap_coro_exception.<locals>.coro_wrappedr   )r#   r$   r   r"   r   wrap_coro_exception   s   r%   c              
      s6   z| I d H W S  t y } zd|j_|jd }~ww )NT)r	   r   __suppress_context__)r#   uc_excr   r   r   unwrap_coro_exception>   s   r(   c                   @   s   e Zd ZdS )NestedEventLoopsN)r   r   r   r   r   r   r   r)   F   s    r)   c                 C   s   g | ]}|j rt|j jqS r   )__file__r   parent).0modr   r   r   
<listcomp>K   s    r.   c                	   @   sB   e Zd Zdd Zdeee  dee dee ded fdd	Z	d
S ) suppress_synchronicity_tb_framesc                 C   s   d S r
   r   )r   r   r   r   	__enter__O   s   z*suppress_synchronicity_tb_frames.__enter__exc_typer   tbreturnFc                    s   |d u s|d u s|d u st rdS dtfdd dtdtt f fdd}||}|d u r.dS || t|d	g }td urFt|vrF|| dS )
NFfnc                    s   t  fddtD S )Nc                 3   s    | ]
}t  |V  qd S r
   )r   is_relative_to)r,   modrootr4   r   r   	<genexpr>Z   s    zVsuppress_synchronicity_tb_frames.__exit__.<locals>.should_hide_file.<locals>.<genexpr>)any_skip_module_rootsr7   r   r7   r   should_hide_fileY   s   zCsuppress_synchronicity_tb_frames.__exit__.<locals>.should_hide_filer2   r3   c                    sB   | }|d ur |j jjpdr|j}|d ur |j jjpds|S )N )tb_framef_codeco_filenamer    )r2   
next_validr;   r   r   get_next_valid\   s
   zAsuppress_synchronicity_tb_frames.__exit__.<locals>.get_next_valid	__notes__)r   strr   r   r   getattrSYNCHRONICITY_TRACEBACK_NOTEappend)r   r1   r   r2   rB   cleaned_root	exc_notesr   rA   r   __exit__R   s   

z)suppress_synchronicity_tb_frames.__exit__N)
r   r   r   r0   r   typer!   r   r   rJ   r   r   r   r   r/   N   s    
r/   )r   concurrent.futures
concurrentosr   pathlibr   typesr   typingr   r   synchronicitygetenvr   rF   r   r	   r%   r(   r)   futures_skip_modulesr:   r/   r   r   r   r   <module>   s"    "