aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/prompt-toolkit/py2/prompt_toolkit/eventloop/base.py
blob: 0be339ca7cd4dbf766b209112b568d0fd51685ed (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from __future__ import unicode_literals 
from abc import ABCMeta, abstractmethod 
from six import with_metaclass 
 
__all__ = ( 
    'EventLoop', 
    'INPUT_TIMEOUT', 
) 
 
 
#: When to trigger the `onInputTimeout` event. 
INPUT_TIMEOUT = .5 
 
 
class EventLoop(with_metaclass(ABCMeta, object)): 
    """ 
    Eventloop interface. 
    """ 
    def run(self, stdin, callbacks): 
        """ 
        Run the eventloop until stop() is called. Report all 
        input/timeout/terminal-resize events to the callbacks. 
 
        :param stdin: :class:`~prompt_toolkit.input.Input` instance. 
        :param callbacks: :class:`~prompt_toolkit.eventloop.callbacks.EventLoopCallbacks` instance. 
        """ 
        raise NotImplementedError("This eventloop doesn't implement synchronous 'run()'.") 
 
    def run_as_coroutine(self, stdin, callbacks): 
        """ 
        Similar to `run`, but this is a coroutine. (For asyncio integration.) 
        """ 
        raise NotImplementedError("This eventloop doesn't implement 'run_as_coroutine()'.") 
 
    @abstractmethod 
    def stop(self): 
        """ 
        Stop the `run` call. (Normally called by 
        :class:`~prompt_toolkit.interface.CommandLineInterface`, when a result 
        is available, or Abort/Quit has been called.) 
        """ 
 
    @abstractmethod 
    def close(self): 
        """ 
        Clean up of resources. Eventloop cannot be reused a second time after 
        this call. 
        """ 
 
    @abstractmethod 
    def add_reader(self, fd, callback): 
        """ 
        Start watching the file descriptor for read availability and then call 
        the callback. 
        """ 
 
    @abstractmethod 
    def remove_reader(self, fd): 
        """ 
        Stop watching the file descriptor for read availability. 
        """ 
 
    @abstractmethod 
    def run_in_executor(self, callback): 
        """ 
        Run a long running function in a background thread. (This is 
        recommended for code that could block the event loop.) 
        Similar to Twisted's ``deferToThread``. 
        """ 
 
    @abstractmethod 
    def call_from_executor(self, callback, _max_postpone_until=None): 
        """ 
        Call this function in the main event loop. Similar to Twisted's 
        ``callFromThread``. 
 
        :param _max_postpone_until: `None` or `time.time` value. For interal
            use. If the eventloop is saturated, consider this task to be low 
            priority and postpone maximum until this timestamp. (For instance, 
            repaint is done using low priority.) 

            Note: In the past, this used to be a datetime.datetime instance,
                  but apparently, executing `time.time` is more efficient: it
                  does fewer system calls. (It doesn't read /etc/localtime.)
        """