• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""asyncio exceptions."""
2
3
4__all__ = ('CancelledError', 'InvalidStateError', 'TimeoutError',
5           'IncompleteReadError', 'LimitOverrunError',
6           'SendfileNotAvailableError')
7
8
9class CancelledError(BaseException):
10    """The Future or Task was cancelled."""
11
12
13class TimeoutError(Exception):
14    """The operation exceeded the given deadline."""
15
16
17class InvalidStateError(Exception):
18    """The operation is not allowed in this state."""
19
20
21class SendfileNotAvailableError(RuntimeError):
22    """Sendfile syscall is not available.
23
24    Raised if OS does not support sendfile syscall for given socket or
25    file type.
26    """
27
28
29class IncompleteReadError(EOFError):
30    """
31    Incomplete read error. Attributes:
32
33    - partial: read bytes string before the end of stream was reached
34    - expected: total number of expected bytes (or None if unknown)
35    """
36    def __init__(self, partial, expected):
37        r_expected = 'undefined' if expected is None else repr(expected)
38        super().__init__(f'{len(partial)} bytes read on a total of '
39                         f'{r_expected} expected bytes')
40        self.partial = partial
41        self.expected = expected
42
43    def __reduce__(self):
44        return type(self), (self.partial, self.expected)
45
46
47class LimitOverrunError(Exception):
48    """Reached the buffer limit while looking for a separator.
49
50    Attributes:
51    - consumed: total number of to be consumed bytes.
52    """
53    def __init__(self, message, consumed):
54        super().__init__(message)
55        self.consumed = consumed
56
57    def __reduce__(self):
58        return type(self), (self.args[0], self.consumed)
59