Lines Matching defs:value

1 """Header value parser implementing various email-related RFC parsing rules.
35 All TokenList and Terminal objects have a 'value' attribute, which produces the
36 semantically meaningful value of that part of the parse subtree. The value of
41 the value of a 'bare-quoted-string' (a quoted-string with no leading or
43 is preserved in the returned value. Note that in all Terminal strings quoted
46 All TokenList and Terminal objects also have a string value, which attempts to
96 def quote_string(value):
97 return '"'+str(value).replace('\\', '\\\\').replace('"', r'\"')+'"'
133 def value(self):
134 return ''.join(x.value for x in self if x.value)
185 def value(self):
232 return x.value
241 res.append(x.value)
248 return token.value
259 def value(self):
274 def quote(self, value):
275 if value.token_type == 'comment':
276 return str(value)
277 return str(value).replace('\\', '\\\\').replace(
500 return ''.join(super().value.split())
533 def value(self):
535 return self[0].value
536 return self[0].value.rstrip()+self[1].value+self[2].value.lstrip()
565 return res.value
576 return res.value
579 def value(self):
595 return super().value
604 def value(self):
608 return self[0].value
631 return res.value
641 return ''.join(super().value.split())
647 return x.value
674 if token.token_type == 'value':
680 if token.token_type == 'value':
698 return token.value
708 token_type = 'value'
718 return self.value
739 name = token[0].value.strip()
772 value = param.param_value
775 value = urllib.parse.unquote_to_bytes(value)
780 value = urllib.parse.unquote(value, encoding='latin-1')
783 value = value.decode(charset, 'surrogateescape')
789 value = value.decode('us-ascii', 'surrogateescape')
790 if utils._has_surrogates(value):
792 value_parts.append(value)
793 value = ''.join(value_parts)
794 yield name, value
798 for name, value in self.params:
799 if value:
800 params.append('{}={}'.format(name, quote_string(value)))
809 # Set this false so that the value doesn't wind up on a new line even
876 def __new__(cls, value, token_type):
877 self = super().__new__(cls, value)
916 def value(self):
926 def value(self):
936 def value(self):
970 # phrase, value = get_phrase(value)
972 # returns the complete phrase from the start of the string value, plus any
996 def _get_ptext_to_endchars(value, endchars):
1001 quoted printables. It returns the string, the remaining value, and
1005 fragment, *remainder = _wsp_splitter(value, 1)
1026 def get_fws(value):
1034 newvalue = value.lstrip()
1035 fws = WhiteSpaceTerminal(value[:len(value)-len(newvalue)], 'fws')
1038 def get_encoded_word(value):
1043 if not value.startswith('=?'):
1045 "expected encoded word but found {}".format(value))
1046 tok, *remainder = value[2:].split('?=', 1)
1047 if tok == value[2:]:
1049 "expected encoded word but found {}".format(value))
1061 ew.cte = value
1062 value = ''.join(remainder)
1082 if value and value[0] not in WSP:
1085 return ew, value
1087 def get_unstructured(value):
1101 Because an 'unstructured' value must by definition constitute the entire
1102 value, this 'get' routine does not return a remaining value, only the
1111 while value:
1112 if value[0] in WSP:
1113 token, value = get_fws(value)
1117 if value.startswith('=?'):
1119 token, value = get_encoded_word(value)
1139 tok, *remainder = _wsp_splitter(value, 1)
1147 tok, *remainder = value.partition('=?')
1151 value = ''.join(remainder)
1154 def get_qp_ctext(value):
1162 a 'ptext' token. In this case it is a WhiteSpaceTerminal, so it's value
1166 ptext, value, _ = _get_ptext_to_endchars(value, '()')
1169 return ptext, value
1171 def get_qcontent(value):
1181 ptext, value, _ = _get_ptext_to_endchars(value, '"')
1184 return ptext, value
1186 def get_atext(value):
1192 m = _non_atom_end_matcher(value)
1195 "expected atext but found '{}'".format(value))
1197 value = value[len(atext):]
1200 return atext, value
1202 def get_bare_quoted_string(value):
1206 value is the text between the quote marks, with whitespace
1209 if value[0] != '"':
1211 "expected '\"' but found '{}'".format(value))
1213 value = value[1:]
1214 if value and value[0] == '"':
1215 token, value = get_qcontent(value)
1217 while value and value[0] != '"':
1218 if value[0] in WSP:
1219 token, value = get_fws(value)
1220 elif value[:2] == '=?':
1223 token, value = get_encoded_word(value)
1228 token, value = get_qcontent(value)
1237 token, value = get_qcontent(value)
1239 if not value:
1242 return bare_quoted_string, value
1243 return bare_quoted_string, value[1:]
1245 def get_comment(value):
1251 if value and value[0] != '(':
1253 "expected '(' but found '{}'".format(value))
1255 value = value[1:]
1256 while value and value[0] != ")":
1257 if value[0] in WSP:
1258 token, value = get_fws(value)
1259 elif value[0] == '(':
1260 token, value = get_comment(value)
1262 token, value = get_qp_ctext(value)
1264 if not value:
1267 return comment, value
1268 return comment, value[1:]
1270 def get_cfws(value):
1275 while value and value[0] in CFWS_LEADER:
1276 if value[0] in WSP:
1277 token, value = get_fws(value)
1279 token, value = get_comment(value)
1281 return cfws, value
1283 def get_quoted_string(value):
1291 if value and value[0] in CFWS_LEADER:
1292 token, value = get_cfws(value)
1294 token, value = get_bare_quoted_string(value)
1296 if value and value[0] in CFWS_LEADER:
1297 token, value = get_cfws(value)
1299 return quoted_string, value
1301 def get_atom(value):
1307 if value and value[0] in CFWS_LEADER:
1308 token, value = get_cfws(value)
1310 if value and value[0] in ATOM_ENDS:
1312 "expected atom but found '{}'".format(value))
1313 if value.startswith('=?'):
1315 token, value = get_encoded_word(value)
1319 token, value = get_atext(value)
1321 token, value = get_atext(value)
1323 if value and value[0] in CFWS_LEADER:
1324 token, value = get_cfws(value)
1326 return atom, value
1328 def get_dot_atom_text(value):
1333 if not value or value[0] in ATOM_ENDS:
1335 "dot-atom-text but found '{}'".format(value))
1336 while value and value[0] not in ATOM_ENDS:
1337 token, value = get_atext(value)
1339 if value and value[0] == '.':
1341 value = value[1:]
1344 "but found '{}'".format('.'+value))
1345 return dot_atom_text, value
1347 def get_dot_atom(value):
1354 if value[0] in CFWS_LEADER:
1355 token, value = get_cfws(value)
1357 if value.startswith('=?'):
1359 token, value = get_encoded_word(value)
1363 token, value = get_dot_atom_text(value)
1365 token, value = get_dot_atom_text(value)
1367 if value and value[0] in CFWS_LEADER:
1368 token, value = get_cfws(value)
1370 return dot_atom, value
1372 def get_word(value):
1388 if value[0] in CFWS_LEADER:
1389 leader, value = get_cfws(value)
1392 if not value:
1395 if value[0]=='"':
1396 token, value = get_quoted_string(value)
1397 elif value[0] in SPECIALS:
1399 "but found '{}'".format(value))
1401 token, value = get_atom(value)
1404 return token, value
1406 def get_phrase(value):
1420 token, value = get_word(value)
1425 while value and value[0] not in PHRASE_ENDS:
1426 if value[0]=='.':
1430 value = value[1:]
1433 token, value = get_word(value)
1435 if value[0] in CFWS_LEADER:
1436 token, value = get_cfws(value)
1442 return phrase, value
1444 def get_local_part(value):
1450 if value[0] in CFWS_LEADER:
1451 leader, value = get_cfws(value)
1452 if not value:
1454 "expected local-part but found '{}'".format(value))
1456 token, value = get_dot_atom(value)
1459 token, value = get_word(value)
1461 if value[0] != '\\' and value[0] in PHRASE_ENDS:
1467 if value and (value[0]=='\\' or value[0] not in PHRASE_ENDS):
1468 obs_local_part, value = get_obs_local_part(str(local_part) + value)
1477 local_part.value.encode('ascii')
1481 return local_part, value
1483 def get_obs_local_part(value):
1488 while value and (value[0]=='\\' or value[0] not in PHRASE_ENDS):
1489 if value[0] == '.':
1495 value = value[1:]
1497 elif value[0]=='\\':
1498 obs_local_part.append(ValueTerminal(value[0],
1500 value = value[1:]
1509 token, value = get_word(value)
1512 if value[0] not in CFWS_LEADER:
1514 token, value = get_cfws(value)
1528 return obs_local_part, value
1530 def get_dtext(value):
1542 ptext, value, had_qp = _get_ptext_to_endchars(value, '[]')
1548 return ptext, value
1550 def _check_for_early_dl_end(value, domain_literal):
1551 if value:
1558 def get_domain_literal(value):
1563 if value[0] in CFWS_LEADER:
1564 token, value = get_cfws(value)
1566 if not value:
1568 if value[0] != '[':
1570 "but found '{}'".format(value))
1571 value = value[1:]
1572 if _check_for_early_dl_end(value, domain_literal):
1573 return domain_literal, value
1575 if value[0] in WSP:
1576 token, value = get_fws(value)
1578 token, value = get_dtext(value)
1580 if _check_for_early_dl_end(value, domain_literal):
1581 return domain_literal, value
1582 if value[0] in WSP:
1583 token, value = get_fws(value)
1585 if _check_for_early_dl_end(value, domain_literal):
1586 return domain_literal, value
1587 if value[0] != ']':
1589 "but found '{}'".format(value))
1591 value = value[1:]
1592 if value and value[0] in CFWS_LEADER:
1593 token, value = get_cfws(value)
1595 return domain_literal, value
1597 def get_domain(value):
1604 if value[0] in CFWS_LEADER:
1605 leader, value = get_cfws(value)
1606 if not value:
1608 "expected domain but found '{}'".format(value))
1609 if value[0] == '[':
1610 token, value = get_domain_literal(value)
1614 return domain, value
1616 token, value = get_dot_atom(value)
1618 token, value = get_atom(value)
1619 if value and value[0] == '@':
1624 if value and value[0] == '.':
1629 while value and value[0] == '.':
1631 token, value = get_atom(value[1:])
1633 return domain, value
1635 def get_addr_spec(value):
1640 token, value = get_local_part(value)
1642 if not value or value[0] != '@':
1645 return addr_spec, value
1647 token, value = get_domain(value[1:])
1649 return addr_spec, value
1651 def get_obs_route(value):
1659 while value and (value[0]==',' or value[0] in CFWS_LEADER):
1660 if value[0] in CFWS_LEADER:
1661 token, value = get_cfws(value)
1663 elif value[0] == ',':
1665 value = value[1:]
1666 if not value or value[0] != '@':
1668 "expected obs-route domain but found '{}'".format(value))
1670 token, value = get_domain(value[1:])
1672 while value and value[0]==',':
1674 value = value[1:]
1675 if not value:
1677 if value[0] in CFWS_LEADER:
1678 token, value = get_cfws(value)
1680 if value[0] == '@':
1682 token, value = get_domain(value[1:])
1684 if not value:
1686 if value[0] != ':':
1688 "obs-route but found '{}'".format(value))
1690 return obs_route, value[1:]
1692 def get_angle_addr(value):
1698 if value[0] in CFWS_LEADER:
1699 token, value = get_cfws(value)
1701 if not value or value[0] != '<':
1703 "expected angle-addr but found '{}'".format(value))
1705 value = value[1:]
1708 if value[0] == '>':
1712 value = value[1:]
1713 return angle_addr, value
1715 token, value = get_addr_spec(value)
1718 token, value = get_obs_route(value)
1723 "expected addr-spec or obs-route but found '{}'".format(value))
1725 token, value = get_addr_spec(value)
1727 if value and value[0] == '>':
1728 value = value[1:]
1733 if value and value[0] in CFWS_LEADER:
1734 token, value = get_cfws(value)
1736 return angle_addr, value
1738 def get_display_name(value):
1747 token, value = get_phrase(value)
1750 return display_name, value
1753 def get_name_addr(value):
1760 if value[0] in CFWS_LEADER:
1761 leader, value = get_cfws(value)
1762 if not value:
1765 if value[0] != '<':
1766 if value[0] in PHRASE_ENDS:
1768 "expected name-addr but found '{}'".format(value))
1769 token, value = get_display_name(value)
1770 if not value:
1777 token, value = get_angle_addr(value)
1781 return name_addr, value
1783 def get_mailbox(value):
1791 token, value = get_name_addr(value)
1794 token, value = get_addr_spec(value)
1797 "expected mailbox but found '{}'".format(value))
1802 return mailbox, value
1804 def get_invalid_mailbox(value, endchars):
1812 while value and value[0] not in endchars:
1813 if value[0] in PHRASE_ENDS:
1814 invalid_mailbox.append(ValueTerminal(value[0],
1816 value = value[1:]
1818 token, value = get_phrase(value)
1820 return invalid_mailbox, value
1822 def get_mailbox_list(value):
1828 value or at a ';' (the group terminator). This is so that we can turn
1835 while value and value[0] != ';':
1837 token, value = get_mailbox(value)
1841 if value[0] in CFWS_LEADER:
1842 leader, value = get_cfws(value)
1843 if not value or value[0] in ',;':
1848 token, value = get_invalid_mailbox(value, ',;')
1854 elif value[0] == ',':
1858 token, value = get_invalid_mailbox(value, ',;')
1864 if value and value[0] not in ',;':
1869 token, value = get_invalid_mailbox(value, ',;')
1873 if value and value[0] == ',':
1875 value = value[1:]
1876 return mailbox_list, value
1879 def get_group_list(value):
1885 if not value:
1888 return group_list, value
1890 if value and value[0] in CFWS_LEADER:
1891 leader, value = get_cfws(value)
1892 if not value:
1899 return group_list, value
1900 if value[0] == ';':
1902 return group_list, value
1903 token, value = get_mailbox_list(value)
1910 return group_list, value
1914 return group_list, value
1916 def get_group(value):
1921 token, value = get_display_name(value)
1922 if not value or value[0] != ':':
1924 "display name but found '{}'".format(value))
1927 value = value[1:]
1928 if value and value[0] == ';':
1930 return group, value[1:]
1931 token, value = get_group_list(value)
1933 if not value:
1936 elif value[0] != ';':
1938 "expected ';' at end of group but found {}".format(value))
1940 value = value[1:]
1941 if value and value[0] in CFWS_LEADER:
1942 token, value = get_cfws(value)
1944 return group, value
1946 def get_address(value):
1965 token, value = get_group(value)
1968 token, value = get_mailbox(value)
1971 "expected address but found '{}'".format(value))
1973 return address, value
1975 def get_address_list(value):
1986 while value:
1988 token, value = get_address(value)
1992 if value[0] in CFWS_LEADER:
1993 leader, value = get_cfws(value)
1994 if not value or value[0] == ',':
1999 token, value = get_invalid_mailbox(value, ',')
2005 elif value[0] == ',':
2009 token, value = get_invalid_mailbox(value, ',')
2015 if value and value[0] != ',':
2020 token, value = get_invalid_mailbox(value, ',')
2024 if value: # Must be a , at this point.
2026 value = value[1:]
2027 return address_list, value
2030 def get_no_fold_literal(value):
2034 if not value:
2036 "expected no-fold-literal but found '{}'".format(value))
2037 if value[0] != '[':
2040 "but found '{}'".format(value))
2042 value = value[1:]
2043 token, value = get_dtext(value)
2045 if not value or value[0] != ']':
2048 "but found '{}'".format(value))
2050 return no_fold_literal, value[1:]
2052 def get_msg_id(value):
2059 if value and value[0] in CFWS_LEADER:
2060 token, value = get_cfws(value)
2062 if not value or value[0] != '<':
2064 "expected msg-id but found '{}'".format(value))
2066 value = value[1:]
2069 token, value = get_dot_atom_text(value)
2073 token, value = get_obs_local_part(value)
2079 " but found '{}'".format(value))
2081 if not value or value[0] != '@':
2087 if value and value[0] == '>':
2089 value = value[1:]
2090 return msg_id, value
2092 value = value[1:]
2095 token, value = get_dot_atom_text(value)
2098 token, value = get_no_fold_literal(value)
2101 token, value = get_domain(value)
2107 " but found '{}'".format(value))
2109 if value and value[0] == '>':
2110 value = value[1:]
2115 if value and value[0] in CFWS_LEADER:
2116 token, value = get_cfws(value)
2118 return msg_id, value
2121 def parse_message_id(value):
2126 token, value = get_msg_id(value)
2129 token = get_unstructured(value)
2135 if value:
2137 "Unexpected {!r}".format(value)))
2144 # the grammar, and parse_XXX methods that parse an entire field value. So
2149 def parse_mime_version(value):
2156 if not value:
2160 if value[0] in CFWS_LEADER:
2161 token, value = get_cfws(value)
2163 if not value:
2167 while value and value[0] != '.' and value[0] not in CFWS_LEADER:
2168 digits += value[0]
2169 value = value[1:]
2177 if value and value[0] in CFWS_LEADER:
2178 token, value = get_cfws(value)
2180 if not value or value[0] != '.':
2184 if value:
2185 mime_version.append(ValueTerminal(value, 'xtext'))
2188 value = value[1:]
2189 if value and value[0] in CFWS_LEADER:
2190 token, value = get_cfws(value)
2192 if not value:
2198 while value and value[0] not in CFWS_LEADER:
2199 digits += value[0]
2200 value = value[1:]
2208 if value and value[0] in CFWS_LEADER:
2209 token, value = get_cfws(value)
2211 if value:
2214 mime_version.append(ValueTerminal(value, 'xtext'))
2217 def get_invalid_parameter(value):
2225 while value and value[0] != ';':
2226 if value[0] in PHRASE_ENDS:
2227 invalid_parameter.append(ValueTerminal(value[0],
2229 value = value[1:]
2231 token, value = get_phrase(value)
2233 return invalid_parameter, value
2235 def get_ttext(value):
2244 m = _non_token_end_matcher(value)
2247 "expected ttext but found '{}'".format(value))
2249 value = value[len(ttext):]
2252 return ttext, value
2254 def get_token(value):
2264 if value and value[0] in CFWS_LEADER:
2265 token, value = get_cfws(value)
2267 if value and value[0] in TOKEN_ENDS:
2269 "expected token but found '{}'".format(value))
2270 token, value = get_ttext(value)
2272 if value and value[0] in CFWS_LEADER:
2273 token, value = get_cfws(value)
2275 return mtoken, value
2277 def get_attrtext(value):
2286 m = _non_attribute_end_matcher(value)
2289 "expected attrtext but found {!r}".format(value))
2291 value = value[len(attrtext):]
2294 return attrtext, value
2296 def get_attribute(value):
2300 value terminal for the actual run of characters. The RFC equivalent of
2306 if value and value[0] in CFWS_LEADER:
2307 token, value = get_cfws(value)
2309 if value and value[0] in ATTRIBUTE_ENDS:
2311 "expected token but found '{}'".format(value))
2312 token, value = get_attrtext(value)
2314 if value and value[0] in CFWS_LEADER:
2315 token, value = get_cfws(value)
2317 return attribute, value
2319 def get_extended_attrtext(value):
2322 This is a special parsing routine so that we get a value that
2327 m = _non_extended_attribute_end_matcher(value)
2330 "expected extended attrtext but found {!r}".format(value))
2332 value = value[len(attrtext):]
2335 return attrtext, value
2337 def get_extended_attribute(value):
2341 we can pick up an encoded value as a single string.
2346 if value and value[0] in CFWS_LEADER:
2347 token, value = get_cfws(value)
2349 if value and value[0] in EXTENDED_ATTRIBUTE_ENDS:
2351 "expected token but found '{}'".format(value))
2352 token, value = get_extended_attrtext(value)
2354 if value and value[0] in CFWS_LEADER:
2355 token, value = get_cfws(value)
2357 return attribute, value
2359 def get_section(value):
2369 if not value or value[0] != '*':
2371 value))
2373 value = value[1:]
2374 if not value or not value[0].isdigit():
2376 "found {}".format(value))
2378 while value and value[0].isdigit():
2379 digits += value[0]
2380 value = value[1:]
2386 return section, value
2389 def get_value(value):
2394 if not value:
2395 raise errors.HeaderParseError("Expected value but found end of string")
2397 if value[0] in CFWS_LEADER:
2398 leader, value = get_cfws(value)
2399 if not value:
2400 raise errors.HeaderParseError("Expected value but found "
2402 if value[0] == '"':
2403 token, value = get_quoted_string(value)
2405 token, value = get_extended_attribute(value)
2409 return v, value
2411 def get_parameter(value):
2412 """ attribute [section] ["*"] [CFWS] "=" value
2423 token, value = get_attribute(value)
2425 if not value or value[0] == ';':
2427 "name ({}) but no value".format(token)))
2428 return param, value
2429 if value[0] == '*':
2431 token, value = get_section(value)
2436 if not value:
2438 if value[0] == '*':
2440 value = value[1:]
2442 if value[0] != '=':
2445 value = value[1:]
2447 if value and value[0] in CFWS_LEADER:
2448 token, value = get_cfws(value)
2452 if param.extended and value and value[0] == '"':
2454 # double quotes around an extended value. We also accept (with defect)
2455 # a value marked as encoded that isn't really.
2456 qstring, remainder = get_quoted_string(value)
2476 "Quoted string value for extended parameter is invalid"))
2483 value = inner_value
2488 "quoted string value that is non-encoded"))
2489 if value and value[0] == "'":
2492 token, value = get_value(value)
2494 if not value or value[0] != "'":
2497 assert not value, value
2498 value = remainder
2499 return param, value
2501 "Apparent initial-extended-value but attribute "
2503 if not value:
2504 # Assume the charset/lang is missing and the token is the value.
2509 return param, value
2517 param.charset = t.value
2518 if value[0] != "'":
2520 "delimiter, but found {!r}".format(value))
2522 value = value[1:]
2523 if value and value[0] != "'":
2524 token, value = get_attrtext(value)
2526 param.lang = token.value
2527 if not value or value[0] != "'":
2529 "delimiter, but found {}".format(value))
2531 value = value[1:]
2533 # Treat the rest of value as bare quoted string content.
2535 while value:
2536 if value[0] in WSP:
2537 token, value = get_fws(value)
2538 elif value[0] == '"':
2540 value = value[1:]
2542 token, value = get_qcontent(value)
2546 token, value = get_value(value)
2549 assert not value, value
2550 value = remainder
2551 return param, value
2553 def parse_mime_parameters(value):
2561 This is 'parse' routine because it consumes the remaining value, but it
2563 parse everything after the non-parameter value of a specific MIME header.
2567 while value:
2569 token, value = get_parameter(value)
2573 if value[0] in CFWS_LEADER:
2574 leader, value = get_cfws(value)
2575 if not value:
2578 if value[0] == ';':
2584 token, value = get_invalid_parameter(value)
2590 if value and value[0] != ';':
2592 # invalid, but it will have a value.
2595 token, value = get_invalid_parameter(value)
2599 if value:
2602 value = value[1:]
2605 def _find_mime_parameters(tokenlist, value):
2609 while value and value[0] != ';':
2610 if value[0] in PHRASE_ENDS:
2611 tokenlist.append(ValueTerminal(value[0], 'misplaced-special'))
2612 value = value[1:]
2614 token, value = get_phrase(value)
2616 if not value:
2619 tokenlist.append(parse_mime_parameters(value[1:]))
2621 def parse_content_type_header(value):
2630 if not value:
2635 token, value = get_token(value)
2638 "Expected content maintype but found {!r}".format(value)))
2639 _find_mime_parameters(ctype, value)
2644 if not value or value[0] != '/':
2647 if value:
2648 _find_mime_parameters(ctype, value)
2650 ctype.maintype = token.value.strip().lower()
2652 value = value[1:]
2654 token, value = get_token(value)
2657 "Expected content subtype but found {!r}".format(value)))
2658 _find_mime_parameters(ctype, value)
2661 ctype.subtype = token.value.strip().lower()
2662 if not value:
2664 if value[0] != ';':
2667 "found {!r}".format(value)))
2670 # only do that if we were checking the subtype value against IANA.
2672 _find_mime_parameters(ctype, value)
2675 ctype.append(parse_mime_parameters(value[1:]))
2678 def parse_content_disposition_header(value):
2683 if not value:
2688 token, value = get_token(value)
2691 "Expected content disposition but found {!r}".format(value)))
2692 _find_mime_parameters(disp_header, value)
2695 disp_header.content_disposition = token.value.strip().lower()
2696 if not value:
2698 if value[0] != ';':
2701 "found {!r}".format(value)))
2702 _find_mime_parameters(disp_header, value)
2705 disp_header.append(parse_mime_parameters(value[1:]))
2708 def parse_content_transfer_encoding_header(value):
2714 if not value:
2719 token, value = get_token(value)
2722 "Expected content transfer encoding but found {!r}".format(value)))
2725 cte_header.cte = token.value.strip().lower()
2726 if not value:
2728 while value:
2731 if value[0] in PHRASE_ENDS:
2732 cte_header.append(ValueTerminal(value[0], 'misplaced-special'))
2733 value = value[1:]
2735 token, value = get_phrase(value)
2867 Return the new value for last_ew, or None if ew_combine_allowed is False.
2870 a non-None value for last_ew) and ew_combine_allowed is true, decode the
2934 the RFC rules, including using RFC2231 encoding if the value cannot be
2935 expressed in 'encoding' and/or the parameter+value is too long to fit
2945 for name, value in part.params:
2947 # loop? We should split the header value onto a newline in that case,
2956 value.encode(encoding)
2960 if utils._has_surrogates(value):
2967 value, safe='', errors=error_handler)
2970 tstr = '{}={}'.format(name, quote_string(value))
2981 while value:
2985 # and at least one character of the value. If we don't
2991 partial = value[:splitpoint]
3001 value = value[splitpoint:]
3002 if value: