⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 message.py

📁 mallet是自然语言处理、机器学习领域的一个开源项目。
💻 PY
📖 第 1 页 / 共 3 页
字号:
    #    def __len__(self):        """Return the total number of headers, including duplicates."""        return len(self._headers)    def __getitem__(self, name):        """Get a header value.        Return None if the header is missing instead of raising an exception.        Note that if the header appeared multiple times, exactly which        occurrance gets returned is undefined.  Use getall() to get all        the values matching a header field name.        """        return self.get(name)    def __setitem__(self, name, val):        """Set the value of a header.        Note: this does not overwrite an existing header with the same field        name.  Use __delitem__() first to delete any existing headers.        """        self._headers.append((name, val))    def __delitem__(self, name):        """Delete all occurrences of a header, if present.        Does not raise an exception if the header is missing.        """        name = name.lower()        newheaders = []        for k, v in self._headers:            if k.lower() <> name:                newheaders.append((k, v))        self._headers = newheaders    def __contains__(self, name):        return name.lower() in [k.lower() for k, v in self._headers]    def has_key(self, name):        """Return true if the message contains the header."""        missing = []        return self.get(name, missing) is not missing    def keys(self):        """Return a list of all the message's header field names.        These will be sorted in the order they appeared in the original        message, or were added to the message, and may contain duplicates.        Any fields deleted and re-inserted are always appended to the header        list.        """        return [k for k, v in self._headers]    def values(self):        """Return a list of all the message's header values.        These will be sorted in the order they appeared in the original        message, or were added to the message, and may contain duplicates.        Any fields deleted and re-inserted are always appended to the header        list.        """        return [v for k, v in self._headers]    def items(self):        """Get all the message's header fields and values.        These will be sorted in the order they appeared in the original        message, or were added to the message, and may contain duplicates.        Any fields deleted and re-inserted are always appended to the header        list.        """        return self._headers[:]    def get(self, name, failobj=None):        """Get a header value.        Like __getitem__() but return failobj instead of None when the field        is missing.        """        name = name.lower()        for k, v in self._headers:            if k.lower() == name:                return v        return failobj    #    # Additional useful stuff    #    def get_all(self, name, failobj=None):        """Return a list of all the values for the named field.        These will be sorted in the order they appeared in the original        message, and may contain duplicates.  Any fields deleted and        re-inserted are always appended to the header list.        If no such fields exist, failobj is returned (defaults to None).        """        values = []        name = name.lower()        for k, v in self._headers:            if k.lower() == name:                values.append(v)        if not values:            return failobj        return values    def add_header(self, _name, _value, **_params):        """Extended header setting.        name is the header field to add.  keyword arguments can be used to set        additional parameters for the header field, with underscores converted        to dashes.  Normally the parameter will be added as key="value" unless        value is None, in which case only the key will be added.        Example:        msg.add_header('content-disposition', 'attachment', filename='bud.gif')        """        parts = []        for k, v in _params.items():            if v is None:                parts.append(k.replace('_', '-'))            else:                parts.append(_formatparam(k.replace('_', '-'), v))        if _value is not None:            parts.insert(0, _value)        self._headers.append((_name, SEMISPACE.join(parts)))    def replace_header(self, _name, _value):        """Replace a header.        Replace the first matching header found in the message, retaining        header order and case.  If no matching header was found, a KeyError is        raised.        """        _name = _name.lower()        for i, (k, v) in zip(range(len(self._headers)), self._headers):            if k.lower() == _name:                self._headers[i] = (k, _value)                break        else:            raise KeyError, _name    #    # These methods are silently deprecated in favor of get_content_type() and    # friends (see below).  They will be noisily deprecated in email 3.0.    #    def get_type(self, failobj=None):        """Returns the message's content type.        The returned string is coerced to lowercase and returned as a single        string of the form `maintype/subtype'.  If there was no Content-Type        header in the message, failobj is returned (defaults to None).        """        missing = []        value = self.get('content-type', missing)        if value is missing:            return failobj        return paramre.split(value)[0].lower().strip()    def get_main_type(self, failobj=None):        """Return the message's main content type if present."""        missing = []        ctype = self.get_type(missing)        if ctype is missing:            return failobj        if ctype.count('/') <> 1:            return failobj        return ctype.split('/')[0]    def get_subtype(self, failobj=None):        """Return the message's content subtype if present."""        missing = []        ctype = self.get_type(missing)        if ctype is missing:            return failobj        if ctype.count('/') <> 1:            return failobj        return ctype.split('/')[1]    #    # Use these three methods instead of the three above.    #    def get_content_type(self):        """Return the message's content type.        The returned string is coerced to lower case of the form        `maintype/subtype'.  If there was no Content-Type header in the        message, the default type as given by get_default_type() will be        returned.  Since according to RFC 2045, messages always have a default        type this will always return a value.        RFC 2045 defines a message's default type to be text/plain unless it        appears inside a multipart/digest container, in which case it would be        message/rfc822.        """        missing = []        value = self.get('content-type', missing)        if value is missing:            # This should have no parameters            return self.get_default_type()        ctype = paramre.split(value)[0].lower().strip()        # RFC 2045, section 5.2 says if its invalid, use text/plain        if ctype.count('/') <> 1:            return 'text/plain'        return ctype    def get_content_maintype(self):        """Return the message's main content type.        This is the `maintype' part of the string returned by        get_content_type().        """        ctype = self.get_content_type()        return ctype.split('/')[0]    def get_content_subtype(self):        """Returns the message's sub-content type.        This is the `subtype' part of the string returned by        get_content_type().        """        ctype = self.get_content_type()        return ctype.split('/')[1]    def get_default_type(self):        """Return the `default' content type.        Most messages have a default content type of text/plain, except for        messages that are subparts of multipart/digest containers.  Such        subparts have a default content type of message/rfc822.        """        return self._default_type    def set_default_type(self, ctype):        """Set the `default' content type.        ctype should be either "text/plain" or "message/rfc822", although this        is not enforced.  The default content type is not stored in the        Content-Type header.        """        self._default_type = ctype    def _get_params_preserve(self, failobj, header):        # Like get_params() but preserves the quoting of values.  BAW:        # should this be part of the public interface?        missing = []        value = self.get(header, missing)        if value is missing:            return failobj        params = []        for p in paramre.split(value):            try:                name, val = p.split('=', 1)                name = name.strip()                val = val.strip()            except ValueError:                # Must have been a bare attribute                name = p.strip()                val = ''            params.append((name, val))        params = Utils.decode_params(params)        return params    def get_params(self, failobj=None, header='content-type', unquote=True):        """Return the message's Content-Type parameters, as a list.        The elements of the returned list are 2-tuples of key/value pairs, as

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -