o
    i.                     @   s4  U d dl mZ d dlZd dlmZ d dlZejr 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 d d	lmZ d
aeed< 	d dejd dejd fddZdejd fddZdddefddZdeddfddZd!ddZe ddeddfddZ!e ddeddfddZ!dS )"    )partialN)
ModuleType)
_threading)stack)ModuleWatchdog)config)get_argument_value)wrapFASYNCIO_IMPORTEDloopasyncio.AbstractEventLoopreturnzasyncio.Task[typing.Any]c                 C      d S N r   r   r   N/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/profiling/_asyncio.pycurrent_task   s   r   c                   C   r   r   r   r   r   r   r   get_running_loop   s   r   taskc                 C   s   dt |  S )NzTask-%d)idr   r   r   r   _task_get_name!   s   r   asyncioc                 C   sB   ddl m} tjdkr|jj}|j}n|jj}d }t	|| d S )Nr   )tasksi  )
r   r   sys
hexversion_scheduled_tasksdata_eager_tasks
_all_tasksr   init_asyncio)r   asyncio_tasksscheduled_taskseager_tasksr   r   r   _call_init_asyncio%   s   
r%   c                  C   sf   t rdtjvr	d S dd l} d }z|  }W n
 ty   Y d S w tt	t
t j| t|  d S )Nr   r   )r
   r   modulesr   r   RuntimeErrorr   track_asyncio_looptypingcastintddtrace_threadingcurrent_threadidentr%   )r   running_loopr   r   r   $link_existing_loop_to_current_thread2   s   r0   c              	      s0  da t dr jt d< nt jdr jjt d< dtjd f fdd}|t d< dd	 t d
< tjj	o9tj
tjd }tjdkrKt|dd }nt|dd }|d ur{tt|jdtjdtjf dttjdf dtttjf dtjffdd}rtttjd jjjdtjd dttjdf dtttjf dd fdd}tttjd jjdtjdttd td f f dttjdf dtttjf dtjfdd}tttjd jjdtjdtjdtjd f f dttjdf dtttjf dtjf fdd}tttjd jjdtjd dttjdf dtttjf dtjf fdd}tjdkrltjd}|d urlt|dd }|d urlt|d rltt|j dtjd! dttjdf dtttjf dtjfd"d}tttjd jj dtjd! dttjdf dtttjf dd#fd$d}t!  d S d S )%NTr   r   aio.AbstractEventLoopc                      s    z   W S  ty   Y d S w r   )r   r'   r   r   r   r   _get_running_loopT   s
   
z_.<locals>._get_running_loopr   c                 S   s   |   S r   )get_namer   r   r   r   <lambda>[   s    z_.<locals>.<lambda>r   zasyncio.eventsi  _BaseDefaultEventLoopPolicyBaseDefaultEventLoopPolicyf.argskwargsc                    s:   t ||dd} rtttt j| | |i |S )N   r   )	r   r   r(   r)   r*   r+   r,   r-   r.   )r8   r9   r:   r   )
init_stackr   r   _k   s   _.<locals>._r   ).Nc                 S   s   z.| |i |W t ||dd}|d usJ t ||dd}t d |}|D ]}t|| q%S t ||dd}|d us<J t ||dd}t d |}|D ]}t|| qLw )Nr;   childrenr   r   )r   globalsr   
link_tasks)r8   r9   r:   r?   r   parentchildr   r   r   r=   v   s    aio.Future[typing.Any]c                 S   s   z6| |i |W t td t||dd}t dt||dd}t dt d |}|D ]}t|| q-S t td t||dd}t dt||dd}t dt d |}|D ]}t|| q\w )	NrE   r   fsr1      r   aio.Task[typing.Any]r   )r)   r*   setr   rA   r   rB   )r8   r9   r:   futuresr   rC   futurer   r   r   r=      s   c                    s   t t jd |d t d  }|d urEt t jd t||dd} fddt|D }|D ]}t	|| q3|f|d	d   }| |i |S )
Nr1   r   r   rE   r   rF   c                    s   h | ]	} j |d qS )r   )ensure_future).0r8   )r   r   r   r   	<setcomp>   s    z_.<locals>._.<locals>.<setcomp>r;   )
r)   r*   OptionalgetrA   Iterabler   rI   r   rB   )r8   r9   r:   rC   rF   rJ   rK   r2   r   r   r=      s   ).rE   c                    s|   t t jd |d}t dt||dd} j||d}t d  }|d ur.t|| |f|dd   }| |i |S )	Nr1   r   rE   r   argr   r   r;   )	r)   r*   rO   rP   r   rL   rA   r   rB   )r8   r9   r:   r   	awaitablerK   rC   r2   r   r   r=      s   i  zasyncio.taskgroups	TaskGroupcreate_task).rH   c                 S   s:   | |i |}t  d  }|d ur|d urt|| |S Nr   )rA   r   rB   )r8   r9   r:   resultrC   r   r   r   r=      s
   rH   c                 S   s2   | |i |}t  d  }|d urt|| |S rV   )rA   r   weak_link_tasks)r8   r9   r:   r   rC   r   r   r   r=      s
   )"r
   hasattrr   rA   Taskr)   rO   r   r   enabledis_availabler   r&   r   getattrr   r	   set_event_loopCallableAnytupledictstrr   _GatheringFuture__init___waitrI   as_completed	GeneratorshieldrP   rU   r%   )r   r3   events_modulepolicy_classr=   taskgroups_moduletaskgroup_classr   r   r<   r   r=   I   s   




6

r=   uvloopc              	      s   t jjsdS ddl t jjotjt| dd}|dur=tt|dt	j
d dtt	jdf dttt	jf d	d
f fdd}t| dd}|durut|drwtt|jdt	j
dt	jf dtt	jdf dttt	jf d	t	jf fdd}dS dS dS )au  Hook uvloop to track event loops.

    uvloop doesn't inherit from BaseDefaultEventLoopPolicy, and on Python 3.11+
    uvloop.run() uses asyncio.Runner which bypasses set_event_loop entirely.
    We hook new_event_loop to catch all uvloop loop creations.

    We also hook EventLoopPolicy.set_event_loop for the deprecated uvloop.install()
    + asyncio.run() pattern.
    Nr   new_event_loopr8   ).r   r9   .r:   r   r   c                    sH   | |i |}r"t tt j}t|d t|| t	  |S )NT)
r)   r*   r+   r,   r-   r.   r   set_uvloop_moder(   r%   )r8   r9   r:   r   	thread_idrn   r   r   r=     s   r>   EventLoopPolicyr^   c                    sl   t tt j}rt|d t||dd}r/|d ur/t	t tt j| t
  | |i |S )NTr;   r   )r)   r*   r+   r,   r-   r.   r   rq   r   r(   r%   )r8   r9   r:   rr   r   rn   r   r   r=     s   )r   r   ro   r   r[   r\   r]   r   r	   r)   r_   ra   r`   rb   rc   rY   r^   )ro   new_event_loop_funcr=   rk   r   rn   r   r=      s:   
r   )r   N)"	functoolsr   r   typesr   r)   TYPE_CHECKINGr   aioddtrace.internal._unpatchedr   r,   "ddtrace.internal.datadog.profilingr   ddtrace.internal.moduler   #ddtrace.internal.settings.profilingr   ddtrace.internal.utilsr   ddtrace.internal.wrappingr	   r
   bool__annotations__rO   r   r   rc   r   r%   r0   after_module_importedr=   r   r   r   r   <module>   s:   

 #