Generate key-to-(start, stop) table of contents.
(self)
| 1413 | return list(labels) |
| 1414 | |
| 1415 | def _generate_toc(self): |
| 1416 | """Generate key-to-(start, stop) table of contents.""" |
| 1417 | starts, stops = [], [] |
| 1418 | self._file.seek(0) |
| 1419 | next_pos = 0 |
| 1420 | label_lists = [] |
| 1421 | while True: |
| 1422 | line_pos = next_pos |
| 1423 | line = self._file.readline() |
| 1424 | next_pos = self._file.tell() |
| 1425 | if line == b'\037\014' + linesep: |
| 1426 | if len(stops) < len(starts): |
| 1427 | stops.append(line_pos - len(linesep)) |
| 1428 | starts.append(next_pos) |
| 1429 | labels = [label.strip() for label |
| 1430 | in self._file.readline()[1:].split(b',') |
| 1431 | if label.strip()] |
| 1432 | label_lists.append(labels) |
| 1433 | elif line == b'\037' or line == b'\037' + linesep: |
| 1434 | if len(stops) < len(starts): |
| 1435 | stops.append(line_pos - len(linesep)) |
| 1436 | elif not line: |
| 1437 | stops.append(line_pos - len(linesep)) |
| 1438 | break |
| 1439 | self._toc = dict(enumerate(zip(starts, stops))) |
| 1440 | self._labels = dict(enumerate(label_lists)) |
| 1441 | self._next_key = len(self._toc) |
| 1442 | self._file.seek(0, 2) |
| 1443 | self._file_length = self._file.tell() |
| 1444 | |
| 1445 | def _pre_mailbox_hook(self, f): |
| 1446 | """Called before writing the mailbox to file f.""" |