Generate key-to-(start, stop) table of contents.
(self)
| 1332 | return list(labels) |
| 1333 | |
| 1334 | def _generate_toc(self): |
| 1335 | """Generate key-to-(start, stop) table of contents.""" |
| 1336 | starts, stops = [], [] |
| 1337 | self._file.seek(0) |
| 1338 | next_pos = 0 |
| 1339 | label_lists = [] |
| 1340 | while True: |
| 1341 | line_pos = next_pos |
| 1342 | line = self._file.readline() |
| 1343 | next_pos = self._file.tell() |
| 1344 | if line == b'\037\014' + linesep: |
| 1345 | if len(stops) < len(starts): |
| 1346 | stops.append(line_pos - len(linesep)) |
| 1347 | starts.append(next_pos) |
| 1348 | labels = [label.strip() for label |
| 1349 | in self._file.readline()[1:].split(b',') |
| 1350 | if label.strip()] |
| 1351 | label_lists.append(labels) |
| 1352 | elif line == b'\037' or line == b'\037' + linesep: |
| 1353 | if len(stops) < len(starts): |
| 1354 | stops.append(line_pos - len(linesep)) |
| 1355 | elif not line: |
| 1356 | stops.append(line_pos - len(linesep)) |
| 1357 | break |
| 1358 | self._toc = dict(enumerate(zip(starts, stops))) |
| 1359 | self._labels = dict(enumerate(label_lists)) |
| 1360 | self._next_key = len(self._toc) |
| 1361 | self._file.seek(0, 2) |
| 1362 | self._file_length = self._file.tell() |
| 1363 | |
| 1364 | def _pre_mailbox_hook(self, f): |
| 1365 | """Called before writing the mailbox to file f.""" |