U
    nËjy%  ã                   @  s²  U d dl m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 d dlmZmZmZ d dlmZmZmZmZmZmZmZmZmZ ejd	kr²d d
lmZmZ nd d
lmZmZ ejdkrÚd dlmZ nd dlmZ e�rtddl m!Z!m"Z"m#Z#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/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 edƒZ:edƒZ;ee<e=ddf Z>de?d< G dd„ ded�Z@dS ) é    )ÚannotationsN)ÚABCMetaÚabstractmethod)ÚAsyncIteratorÚ	Awaitable)ÚPathLike)ÚSignals)ÚAddressFamilyÚ
SocketKindÚsocket)	ÚIOÚTYPE_CHECKINGÚAnyÚCallableÚContextManagerÚSequenceÚTypeVarÚUnionÚoverload)é   é   )ÚTypeVarTupleÚUnpack)r   é
   )Ú	TypeAliasé   )ÚCapacityLimiterÚEventÚLockÚ	Semaphore)ÚCancelScope)ÚTaskInfo)ÚBlockingPortalé   )ÚConnectedUDPSocketÚConnectedUNIXDatagramSocketÚIPSockAddrTypeÚSocketListenerÚSocketStreamÚ	UDPSocketÚUNIXDatagramSocketÚUNIXSocketStream)ÚProcess)Ú	TaskGroup)Ú
TestRunnerÚT_RetvalÚPosArgsTzPathLike[str]zPathLike[bytes]r   ÚStrOrBytesPathc                   @  s  e Zd Zeeddddddœdd„ƒƒZeedd	œd
d„ƒƒZeedd	œdd„ƒƒZeedd	œdd„ƒƒZeedd	œdd„ƒƒZ	edd	œdd„ƒZ
edd	œdd„ƒZeedddœdd„ƒƒZeeejddœdddd œd!d"„ƒƒZeedd	œd#d$„ƒƒZeed%d	œd&d'„ƒƒZeed(d	œd)d*„ƒƒZeedd+d,œd-d.„ƒƒZeed/dd0œd1d2dd3d4œd5d6„ƒƒZeedd7d8œd9d:„ƒƒZeed›d;ddd<dd=œd>d?„ƒƒZeedd	œd@dA„ƒƒZeedddddBœdCdD„ƒƒZeed;ddddBœdEdF„ƒƒZeedGd	œdHdI„ƒƒZeedJdKdKdKdLdMdNœdOdP„ƒƒZeedQddRœdSdT„ƒƒZeedœdUd1dVdWdXœdYdZ„ƒƒZeed[d\d]œd^d_„ƒƒZeed`dadbœdcdd„ƒƒZeed`dadbœdedf„ƒƒZ eedgdVdVddhdiœdjdk„ƒƒZ!ee"d`ddldmœdndo„ƒƒZ#ee"d`d[dpdmœdqdo„ƒƒZ#eed`drdsdmœdtdo„ƒƒZ#eedududududvœdwdxdydzd1d1d{d|œd}d~„ƒƒZ$eed�dd1d€d�œd‚dƒ„ƒƒZ%eed`ddbœd„d…„ƒƒZ&eed`ddbœd†d‡„ƒƒZ'eed7d	œdˆd‰„ƒƒZ(eedŠd‹dŒœd�dŽ„ƒƒZ)eed�d	œd�d‘„ƒƒZ*eed’d	œd“d”„ƒƒZ+eedd	œd•d–„ƒƒZ,eedd—d˜œd™dš„ƒƒZ-d/S )žÚAsyncBackendz1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]ztuple[Unpack[PosArgsT]]zdict[str, Any]r/   )ÚfuncÚargsÚkwargsÚoptionsÚreturnc                 C  s   dS )aÕ  
        Run the given coroutine function in an asynchronous event loop.

        The current thread must not be already running an event loop.

        :param func: a coroutine function
        :param args: positional arguments to ``func``
        :param kwargs: positional arguments to ``func``
        :param options: keyword arguments to call the backend ``run()`` implementation
            with
        :return: the return value of the coroutine function
        N© )Úclsr3   r4   r5   r6   r8   r8   ú8/tmp/pip-unpacked-wheel-k8mofgf9/anyio/abc/_eventloop.pyÚrun9   s    	zAsyncBackend.runÚobject)r7   c                 C  s   dS )z

        :return:
        Nr8   ©r9   r8   r8   r:   Úcurrent_tokenO   s    zAsyncBackend.current_tokenÚfloatc                 C  s   dS )zz
        Return the current value of the event loop's internal clock.

        :return: the clock value (seconds)
        Nr8   r=   r8   r8   r:   Úcurrent_timeW   s    zAsyncBackend.current_timeztype[BaseException]c                 C  s   dS )zFReturn the exception class that is raised in a task if it's cancelled.Nr8   r=   r8   r8   r:   Úcancelled_exception_class`   s    z&AsyncBackend.cancelled_exception_classÚNonec                 Ã  s   dS )zä
        Check if the task has been cancelled, and allow rescheduling of other tasks.

        This is effectively the same as running :meth:`checkpoint_if_cancelled` and then
        :meth:`cancel_shielded_checkpoint`.
        Nr8   r=   r8   r8   r:   Ú
checkpointe   s    zAsyncBackend.checkpointc                 Ã  s"   |   ¡ tj kr|  ¡ I dH  dS )z¾
        Check if the current task group has been cancelled.

        This will check if the task has been cancelled, but will not allow other tasks
        to be scheduled if not.

        N)Úcurrent_effective_deadlineÚmathÚinfrC   r=   r8   r8   r:   Úcheckpoint_if_cancelledo   s    	z$AsyncBackend.checkpoint_if_cancelledc              	   Ã  s,   | j dd�� |  d¡I dH  W 5 Q R X dS )zà
        Allow the rescheduling of other tasks.

        This will give other tasks the opportunity to run, but without checking if the
        current task group has been cancelled, unlike with :meth:`checkpoint`.

        T)Úshieldr   N)Úcreate_cancel_scopeÚsleepr=   r8   r8   r:   Úcancel_shielded_checkpoint{   s    	z'AsyncBackend.cancel_shielded_checkpoint)Údelayr7   c                 Ã  s   dS )zt
        Pause the current task for the specified duration.

        :param delay: the duration, in seconds
        Nr8   )r9   rL   r8   r8   r:   rJ   ‡   s    zAsyncBackend.sleepF)ÚdeadlinerH   Úboolr    )rM   rH   r7   c                C  s   d S ©Nr8   )r9   rM   rH   r8   r8   r:   rI   �   s    z AsyncBackend.create_cancel_scopec                 C  s   dS )aQ  
        Return the nearest deadline among all the cancel scopes effective for the
        current task.

        :return:
            - a clock value from the event loop's internal clock
            - ``inf`` if there is no deadline in effect
            - ``-inf`` if the current scope has been cancelled
        :rtype: float
        Nr8   r=   r8   r8   r:   rD   —   s    z'AsyncBackend.current_effective_deadliner-   c                 C  s   d S rO   r8   r=   r8   r8   r:   Úcreate_task_group¥   s    zAsyncBackend.create_task_groupr   c                 C  s   d S rO   r8   r=   r8   r8   r:   Úcreate_eventª   s    zAsyncBackend.create_eventr   )Úfast_acquirer7   c                C  s   d S rO   r8   )r9   rR   r8   r8   r:   Úcreate_lock¯   s    zAsyncBackend.create_lockN)Ú	max_valuerR   Úintz
int | Noner   )Úinitial_valuerT   rR   r7   c                C  s   d S rO   r8   )r9   rV   rT   rR   r8   r8   r:   Úcreate_semaphore´   s    	zAsyncBackend.create_semaphorer   )Útotal_tokensr7   c                 C  s   d S rO   r8   )r9   rX   r8   r8   r:   Úcreate_capacity_limiter¿   s    z$AsyncBackend.create_capacity_limiterz&Callable[[Unpack[PosArgsT]], T_Retval]zCapacityLimiter | None)r3   r4   Úabandon_on_cancelÚlimiterr7   c                 Ã  s   d S rO   r8   )r9   r3   r4   rZ   r[   r8   r8   r:   Úrun_sync_in_worker_threadÄ   s    	z&AsyncBackend.run_sync_in_worker_threadc                 C  s   d S rO   r8   r=   r8   r8   r:   Úcheck_cancelledÏ   s    zAsyncBackend.check_cancelled)r3   r4   Útokenr7   c                 C  s   d S rO   r8   ©r9   r3   r4   r^   r8   r8   r:   Úrun_async_from_threadÔ   s    z"AsyncBackend.run_async_from_threadc                 C  s   d S rO   r8   r_   r8   r8   r:   Úrun_sync_from_threadÞ   s    z!AsyncBackend.run_sync_from_threadr"   c                 C  s   d S rO   r8   r=   r8   r8   r:   Úcreate_blocking_portalè   s    z#AsyncBackend.create_blocking_portalz)StrOrBytesPath | Sequence[StrOrBytesPath]zint | IO[Any] | Noner   r,   )ÚcommandÚstdinÚstdoutÚstderrr5   r7   c                Ë  s   d S rO   r8   )r9   rc   rd   re   rf   r5   r8   r8   r:   Úopen_processí   s    zAsyncBackend.open_processzset[Process])Úworkersr7   c                 C  s   d S rO   r8   )r9   rh   r8   r8   r:   Ú#setup_process_pool_exit_at_shutdownú   s    z0AsyncBackend.setup_process_pool_exit_at_shutdownÚstrzIPSockAddrType | Noner(   )ÚhostÚportÚlocal_addressr7   c                 Ã  s   d S rO   r8   )r9   rk   rl   rm   r8   r8   r:   Úconnect_tcpÿ   s    zAsyncBackend.connect_tcpzstr | bytesr+   )Úpathr7   c                 Ã  s   d S rO   r8   )r9   ro   r8   r8   r:   Úconnect_unix  s    zAsyncBackend.connect_unixr   r'   )Úsockr7   c                 C  s   d S rO   r8   ©r9   rq   r8   r8   r:   Úcreate_tcp_listener  s    z AsyncBackend.create_tcp_listenerc                 C  s   d S rO   r8   rr   r8   r8   r:   Úcreate_unix_listener  s    z!AsyncBackend.create_unix_listenerr	   zUDPSocket | ConnectedUDPSocket)Úfamilyrm   Úremote_addressÚ
reuse_portr7   c                 Ã  s   d S rO   r8   )r9   ru   rm   rv   rw   r8   r8   r:   Úcreate_udp_socket  s    	zAsyncBackend.create_udp_socketr*   )Ú
raw_socketÚremote_pathr7   c                 Ã  s   d S rO   r8   ©r9   ry   rz   r8   r8   r:   Úcreate_unix_datagram_socket   s    z(AsyncBackend.create_unix_datagram_socketr%   c                 Ã  s   d S rO   r8   r{   r8   r8   r:   r|   &  s    zstr | bytes | Nonez0UNIXDatagramSocket | ConnectedUNIXDatagramSocketc                 Ã  s   d S rO   r8   r{   r8   r8   r:   r|   ,  s    r   )ru   ÚtypeÚprotoÚflagszbytes | str | Nonezstr | int | Nonezint | AddressFamilyzint | SocketKindz]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]])rk   rl   ru   r}   r~   r   r7   c                Ã  s   d S rO   r8   )r9   rk   rl   ru   r}   r~   r   r8   r8   r:   Úgetaddrinfo3  s    zAsyncBackend.getaddrinfor&   ztuple[str, str])Úsockaddrr   r7   c                 Ã  s   d S rO   r8   )r9   r�   r   r8   r8   r:   ÚgetnameinfoI  s    zAsyncBackend.getnameinfoc                 Ã  s   d S rO   r8   rr   r8   r8   r:   Úwait_socket_readableP  s    z!AsyncBackend.wait_socket_readablec                 Ã  s   d S rO   r8   rr   r8   r8   r:   Úwait_socket_writableU  s    z!AsyncBackend.wait_socket_writablec                 C  s   d S rO   r8   r=   r8   r8   r:   Úcurrent_default_thread_limiterZ  s    z+AsyncBackend.current_default_thread_limiterr   z&ContextManager[AsyncIterator[Signals]])Úsignalsr7   c                 G  s   d S rO   r8   )r9   r†   r8   r8   r:   Úopen_signal_receiver_  s    z!AsyncBackend.open_signal_receiverr!   c                 C  s   d S rO   r8   r=   r8   r8   r:   Úget_current_taskf  s    zAsyncBackend.get_current_taskzSequence[TaskInfo]c                 C  s   d S rO   r8   r=   r8   r8   r:   Úget_running_tasksk  s    zAsyncBackend.get_running_tasksc                 Ã  s   d S rO   r8   r=   r8   r8   r:   Úwait_all_tasks_blockedp  s    z#AsyncBackend.wait_all_tasks_blockedr.   )r6   r7   c                 C  s   d S rO   r8   )r9   r6   r8   r8   r:   Úcreate_test_runneru  s    zAsyncBackend.create_test_runner)FN)N)r   ).Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r;   r>   r@   rA   rC   rG   rK   rJ   rE   rF   rI   rD   rP   rQ   rS   rW   rY   r\   r]   r`   ra   rb   rg   ri   rn   rp   rs   rt   rx   r   r|   r€   r‚   rƒ   r„   r…   r‡   rˆ   r‰   rŠ   r‹   r8   r8   r8   r:   r2   8   s   ÿû	  û	 ÿ	ø" ÿr2   )Ú	metaclass)AÚ
__future__r   rE   ÚsysÚabcr   r   Úcollections.abcr   r   Úosr   Úsignalr   r   r	   r
   Útypingr   r   r   r   r   r   r   r   r   Úversion_infor   r   Ztyping_extensionsr   Z_core._synchronizationr   r   r   r   Z_core._tasksr    Z_core._testingr!   Zfrom_threadr"   Z_socketsr$   r%   r&   r'   r(   r)   r*   r+   Z_subprocessesr,   Z_tasksr-   Z_testingr.   r/   r0   rj   Úbytesr1   Ú__annotations__r2   r8   r8   r8   r:   Ú<module>   s8    ,

(
