| 2561 | return cookie |
| 2562 | |
| 2563 | def read(self, size=None): |
| 2564 | self._checkReadable() |
| 2565 | if size is None: |
| 2566 | size = -1 |
| 2567 | else: |
| 2568 | try: |
| 2569 | size_index = size.__index__ |
| 2570 | except AttributeError: |
| 2571 | raise TypeError(f"{size!r} is not an integer") |
| 2572 | else: |
| 2573 | size = size_index() |
| 2574 | decoder = self._decoder or self._get_decoder() |
| 2575 | if size < 0: |
| 2576 | chunk = self.buffer.read() |
| 2577 | if chunk is None: |
| 2578 | raise BlockingIOError("Read returned None.") |
| 2579 | # Read everything. |
| 2580 | result = (self._get_decoded_chars() + |
| 2581 | decoder.decode(chunk, final=True)) |
| 2582 | if self._snapshot is not None: |
| 2583 | self._set_decoded_chars('') |
| 2584 | self._snapshot = None |
| 2585 | return result |
| 2586 | else: |
| 2587 | # Keep reading chunks until we have size characters to return. |
| 2588 | eof = False |
| 2589 | result = self._get_decoded_chars(size) |
| 2590 | while len(result) < size and not eof: |
| 2591 | eof = not self._read_chunk() |
| 2592 | result += self._get_decoded_chars(size - len(result)) |
| 2593 | return result |
| 2594 | |
| 2595 | def __next__(self): |
| 2596 | self._telling = False |