Write message contents and return (start, stop).
(self, message)
| 1461 | f.write(linesep + b'\037') |
| 1462 | |
| 1463 | def _install_message(self, message): |
| 1464 | """Write message contents and return (start, stop).""" |
| 1465 | start = self._file.tell() |
| 1466 | if isinstance(message, BabylMessage): |
| 1467 | special_labels = [] |
| 1468 | labels = [] |
| 1469 | for label in message.get_labels(): |
| 1470 | if label in self._special_labels: |
| 1471 | special_labels.append(label) |
| 1472 | else: |
| 1473 | labels.append(label) |
| 1474 | self._file.write(b'1') |
| 1475 | for label in special_labels: |
| 1476 | self._file.write(b', ' + label.encode()) |
| 1477 | self._file.write(b',,') |
| 1478 | for label in labels: |
| 1479 | self._file.write(b' ' + label.encode() + b',') |
| 1480 | self._file.write(linesep) |
| 1481 | else: |
| 1482 | self._file.write(b'1,,' + linesep) |
| 1483 | if isinstance(message, email.message.Message): |
| 1484 | orig_buffer = io.BytesIO() |
| 1485 | orig_generator = email.generator.BytesGenerator(orig_buffer, False, 0) |
| 1486 | orig_generator.flatten(message) |
| 1487 | orig_buffer.seek(0) |
| 1488 | while True: |
| 1489 | line = orig_buffer.readline() |
| 1490 | self._file.write(line.replace(b'\n', linesep)) |
| 1491 | if line == b'\n' or not line: |
| 1492 | break |
| 1493 | self._file.write(b'*** EOOH ***' + linesep) |
| 1494 | if isinstance(message, BabylMessage): |
| 1495 | vis_buffer = io.BytesIO() |
| 1496 | vis_generator = email.generator.BytesGenerator(vis_buffer, False, 0) |
| 1497 | vis_generator.flatten(message.get_visible()) |
| 1498 | while True: |
| 1499 | line = vis_buffer.readline() |
| 1500 | self._file.write(line.replace(b'\n', linesep)) |
| 1501 | if line == b'\n' or not line: |
| 1502 | break |
| 1503 | else: |
| 1504 | orig_buffer.seek(0) |
| 1505 | while True: |
| 1506 | line = orig_buffer.readline() |
| 1507 | self._file.write(line.replace(b'\n', linesep)) |
| 1508 | if line == b'\n' or not line: |
| 1509 | break |
| 1510 | while True: |
| 1511 | buffer = orig_buffer.read(4096) # Buffer size is arbitrary. |
| 1512 | if not buffer: |
| 1513 | break |
| 1514 | self._file.write(buffer.replace(b'\n', linesep)) |
| 1515 | elif isinstance(message, (bytes, str, io.StringIO)): |
| 1516 | if isinstance(message, io.StringIO): |
| 1517 | warnings.warn("Use of StringIO input is deprecated, " |
| 1518 | "use BytesIO instead", DeprecationWarning, 3) |
| 1519 | message = message.getvalue() |
| 1520 | if isinstance(message, str): |
no test coverage detected