Write message contents and return (start, stop).
(self, message)
| 1380 | f.write(linesep + b'\037') |
| 1381 | |
| 1382 | def _install_message(self, message): |
| 1383 | """Write message contents and return (start, stop).""" |
| 1384 | start = self._file.tell() |
| 1385 | if isinstance(message, BabylMessage): |
| 1386 | special_labels = [] |
| 1387 | labels = [] |
| 1388 | for label in message.get_labels(): |
| 1389 | if label in self._special_labels: |
| 1390 | special_labels.append(label) |
| 1391 | else: |
| 1392 | labels.append(label) |
| 1393 | self._file.write(b'1') |
| 1394 | for label in special_labels: |
| 1395 | self._file.write(b', ' + label.encode()) |
| 1396 | self._file.write(b',,') |
| 1397 | for label in labels: |
| 1398 | self._file.write(b' ' + label.encode() + b',') |
| 1399 | self._file.write(linesep) |
| 1400 | else: |
| 1401 | self._file.write(b'1,,' + linesep) |
| 1402 | if isinstance(message, email.message.Message): |
| 1403 | orig_buffer = io.BytesIO() |
| 1404 | orig_generator = email.generator.BytesGenerator(orig_buffer, False, 0) |
| 1405 | orig_generator.flatten(message) |
| 1406 | orig_buffer.seek(0) |
| 1407 | while True: |
| 1408 | line = orig_buffer.readline() |
| 1409 | self._file.write(line.replace(b'\n', linesep)) |
| 1410 | if line == b'\n' or not line: |
| 1411 | break |
| 1412 | self._file.write(b'*** EOOH ***' + linesep) |
| 1413 | if isinstance(message, BabylMessage): |
| 1414 | vis_buffer = io.BytesIO() |
| 1415 | vis_generator = email.generator.BytesGenerator(vis_buffer, False, 0) |
| 1416 | vis_generator.flatten(message.get_visible()) |
| 1417 | while True: |
| 1418 | line = vis_buffer.readline() |
| 1419 | self._file.write(line.replace(b'\n', linesep)) |
| 1420 | if line == b'\n' or not line: |
| 1421 | break |
| 1422 | else: |
| 1423 | orig_buffer.seek(0) |
| 1424 | while True: |
| 1425 | line = orig_buffer.readline() |
| 1426 | self._file.write(line.replace(b'\n', linesep)) |
| 1427 | if line == b'\n' or not line: |
| 1428 | break |
| 1429 | while True: |
| 1430 | buffer = orig_buffer.read(4096) # Buffer size is arbitrary. |
| 1431 | if not buffer: |
| 1432 | break |
| 1433 | self._file.write(buffer.replace(b'\n', linesep)) |
| 1434 | elif isinstance(message, (bytes, str, io.StringIO)): |
| 1435 | if isinstance(message, io.StringIO): |
| 1436 | warnings.warn("Use of StringIO input is deprecated, " |
| 1437 | "use BytesIO instead", DeprecationWarning, 3) |
| 1438 | message = message.getvalue() |
| 1439 | if isinstance(message, str): |
no test coverage detected