B
    't\G                 @   sJ   d dl mZ d dlZddlmZ ddlmZmZ dgZG dd deZ	dS )    )unicode_literalsN   )Future)get_context_idcontextThreadWithFuturec               @   s"   e Zd ZdZdddZdd ZdS )	r   zR
    Wrapper around `Thread`.

    :param daemon: If `True`, start as daemon.
    Fc             C   s    || _ || _t | _t | _d S )N)targetdaemonr   futurer   _ctx_id)selfr   r	    r   =lib/python3.7/site-packages/prompt_toolkit/eventloop/utils.py__init__   s    zThreadWithFuture.__init__c                s0    fdd}t j|d} jr$d|_|  dS )zV
        Start the thread, `self.future` will be set when the thread is done.
        c                 sb   t  jN y  } W n. tk
rF } z j| W d d }~X Y nX  j|  W d Q R X d S )N)r   r   r   BaseExceptionr
   Zset_exceptionZ
set_result)resulte)r   r   r   run   s    z#ThreadWithFuture.start.<locals>.run)r   TN)	threadingZThreadr	   start)r   r   tr   )r   r   r      s
    zThreadWithFuture.startN)F)__name__
__module____qualname____doc__r   r   r   r   r   r   r      s   
)
Z
__future__r   r   r
   r   r   r   __all__objectr   r   r   r   r   <module>   s
   