address_list = (address *("," address)) / obs-addr-list obs-addr-list = *([CFWS] ",") address *("," [address / CFWS]) We depart from the formal grammar here by continuing to parse until the end of the input, assuming the input to be entirely composed of an address-list. This i
(value)
| 2023 | return address, value |
| 2024 | |
| 2025 | def get_address_list(value): |
| 2026 | """ address_list = (address *("," address)) / obs-addr-list |
| 2027 | obs-addr-list = *([CFWS] ",") address *("," [address / CFWS]) |
| 2028 | |
| 2029 | We depart from the formal grammar here by continuing to parse until the end |
| 2030 | of the input, assuming the input to be entirely composed of an |
| 2031 | address-list. This is always true in email parsing, and allows us |
| 2032 | to skip invalid addresses to parse additional valid ones. |
| 2033 | |
| 2034 | """ |
| 2035 | address_list = AddressList() |
| 2036 | while value: |
| 2037 | try: |
| 2038 | token, value = get_address(value) |
| 2039 | address_list.append(token) |
| 2040 | except errors.HeaderParseError: |
| 2041 | leader = None |
| 2042 | if value[0] in CFWS_LEADER: |
| 2043 | leader, value = get_cfws(value) |
| 2044 | if not value or value[0] == ',': |
| 2045 | address_list.append(leader) |
| 2046 | address_list.defects.append(errors.ObsoleteHeaderDefect( |
| 2047 | "address-list entry with no content")) |
| 2048 | else: |
| 2049 | token, value = get_invalid_mailbox(value, ',') |
| 2050 | if leader is not None: |
| 2051 | token[:0] = [leader] |
| 2052 | address_list.append(Address([token])) |
| 2053 | address_list.defects.append(errors.InvalidHeaderDefect( |
| 2054 | "invalid address in address-list")) |
| 2055 | elif value[0] == ',': |
| 2056 | address_list.defects.append(errors.ObsoleteHeaderDefect( |
| 2057 | "empty element in address-list")) |
| 2058 | else: |
| 2059 | token, value = get_invalid_mailbox(value, ',') |
| 2060 | if leader is not None: |
| 2061 | token[:0] = [leader] |
| 2062 | address_list.append(Address([token])) |
| 2063 | address_list.defects.append(errors.InvalidHeaderDefect( |
| 2064 | "invalid address in address-list")) |
| 2065 | if value and value[0] != ',': |
| 2066 | # Crap after address; treat it as an invalid mailbox. |
| 2067 | # The mailbox info will still be available. |
| 2068 | mailbox = address_list[-1][0] |
| 2069 | mailbox.token_type = 'invalid-mailbox' |
| 2070 | token, value = get_invalid_mailbox(value, ',') |
| 2071 | mailbox.extend(token) |
| 2072 | address_list.defects.append(errors.InvalidHeaderDefect( |
| 2073 | "invalid address in address-list")) |
| 2074 | if value: # Must be a , at this point. |
| 2075 | address_list.append(ListSeparator) |
| 2076 | value = value[1:] |
| 2077 | return address_list, value |
| 2078 | |
| 2079 | |
| 2080 | def get_no_fold_literal(value): |
nothing calls this directly
no test coverage detected
searching dependent graphs…