###
7.3.1.4 `Babyl`

class `Babyl`( | path[, factory=None[, create=True]])

  A subclass of `Mailbox` for mailboxes in Babyl format. Parameter factory is a callable object that accepts a file-like message representation (which behaves as if opened in binary mode) and returns a custom representation. If factory is `None`, `BabylMessage` is used as the default message representation. If create is `True`, the mailbox is created if it does not exist.

Babyl is a single-file mailbox format used by the Rmail mail user agent included with Emacs. The beginning of a message is indicated by a line containing the two characters Control-Underscore ("`\037`") and Control-L ("`\014`"). The end of a message is indicated by the start of the next message or, in the case of the last message, a line containing a Control-Underscore ("`\037`") character.

Messages in a Babyl mailbox have two sets of headers, original headers and so-called visible headers. Visible headers are typically a subset of the original headers that have been reformatted or abridged to be more attractive. Each message in a Babyl mailbox also has an accompanying list of labels, or short strings that record extra information about the message, and a list of all user-defined labels found in the mailbox is kept in the Babyl options section.

`Babyl` instances have all of the methods of `Mailbox` in addition to the following:

`get_labels`( | )

  Return a list of the names of all user-defined labels used in the mailbox. Note: The actual messages are inspected to determine which labels exist in the mailbox rather than consulting the list of labels in the Babyl options section, but the Babyl section is updated whenever the mailbox is modified.

Some `Mailbox` methods implemented by `Babyl` deserve special remarks:

`get_file`( | key)

  In Babyl mailboxes, the headers of a message are not stored contiguously with the body of the message. To generate a file-like representation, the headers and body are copied together into a `StringIO` instance (from the `StringIO` module), which has an API identical to that of a file. As a result, the file-like object is truly independent of the underlying mailbox but does not save memory compared to a string representation.

`lock`( | )

`unlock`( | )

  Three locking mechanisms are used--dot locking and, if available, the `flock()` and `lockf()` system calls.

See Also:

Format of Version 5 Babyl Files
  A specification of the Babyl format.

Reading Mail with Rmail
  The Rmail manual, with some information on Babyl semantics.