class email.headerregistry.BaseHeader(name, value)
name and value are passed to BaseHeader
from the header_factory
call. The string value of any header object is the value fully decoded to unicode.
This base class defines the following read-only properties:
-
name
-
The name of the header (the portion of the field before the ‘:’). This is exactly the value passed in the
header_factory
call for name; that is, case is preserved.
-
defects
-
A tuple of
HeaderDefect
instances reporting any RFC compliance problems found during parsing. The email package tries to be complete about detecting compliance issues. See theerrors
module for a discussion of the types of defects that may be reported.
-
max_count
-
The maximum number of headers of this type that can have the same
name
. A value ofNone
means unlimited. TheBaseHeader
value for this attribute isNone
; it is expected that specialized header classes will override this value as needed.
BaseHeader
also provides the following method, which is called by the email library code and should not in general be called by application programs:
-
fold(*, policy)
-
Return a string containing
linesep
characters as required to correctly fold the header according to policy. Acte_type
of8bit
will be treated as if it were7bit
, since strings may not contain binary data.
BaseHeader
by itself cannot be used to create a header object. It defines a protocol that each specialized header cooperates with in order to produce the header object. Specifically, BaseHeader
requires that the specialized class provide a classmethod()
named parse
. This method is called as follows:
parse(string, kwds)
kwds
is a dictionary containing one pre-initialized key, defects
. defects
is an empty list. The parse method should append any detected defects to this list. On return, the kwds
dictionary must contain values for at least the keys decoded
and defects
. decoded
should be the string value for the header (that is, the header value fully decoded to unicode). The parse method should assume that string may contain transport encoded parts, but should correctly handle all valid unicode characters as well so that it can parse un-encoded header values.
BaseHeader
‘s __new__
then creates the header instance, and calls its init
method. The specialized class only needs to provide an init
method if it wishes to set additional attributes beyond those provided by BaseHeader
itself. Such an init
method should look like this:
def init(self, *args, **kw): self._myattr = kw.pop('myattr') super().init(*args, **kw)
That is, anything extra that the specialized class puts in to the kwds
dictionary should be removed and handled, and the remaining contents of kw
(and args
) passed to the BaseHeader
init
method.
Please login to continue.