msg-id = [CFWS] "<" id-left '@' id-right ">" [CFWS] id-left = dot-atom-text / obs-id-left id-right = dot-atom-text / no-fold-literal / obs-id-right no-fold-literal = "[" *dtext "]"
(value)
| 2100 | return no_fold_literal, value[1:] |
| 2101 | |
| 2102 | def get_msg_id(value): |
| 2103 | """msg-id = [CFWS] "<" id-left '@' id-right ">" [CFWS] |
| 2104 | id-left = dot-atom-text / obs-id-left |
| 2105 | id-right = dot-atom-text / no-fold-literal / obs-id-right |
| 2106 | no-fold-literal = "[" *dtext "]" |
| 2107 | """ |
| 2108 | msg_id = MsgID() |
| 2109 | if value and value[0] in CFWS_LEADER: |
| 2110 | token, value = get_cfws(value) |
| 2111 | msg_id.append(token) |
| 2112 | if not value or value[0] != '<': |
| 2113 | raise errors.HeaderParseError( |
| 2114 | "expected msg-id but found '{}'".format(value)) |
| 2115 | msg_id.append(ValueTerminal('<', 'msg-id-start')) |
| 2116 | value = value[1:] |
| 2117 | # Parse id-left. |
| 2118 | try: |
| 2119 | token, value = get_dot_atom_text(value) |
| 2120 | except errors.HeaderParseError: |
| 2121 | try: |
| 2122 | # obs-id-left is same as local-part of add-spec. |
| 2123 | token, value = get_obs_local_part(value) |
| 2124 | msg_id.defects.append(errors.ObsoleteHeaderDefect( |
| 2125 | "obsolete id-left in msg-id")) |
| 2126 | except errors.HeaderParseError: |
| 2127 | raise errors.HeaderParseError( |
| 2128 | "expected dot-atom-text or obs-id-left" |
| 2129 | " but found '{}'".format(value)) |
| 2130 | msg_id.append(token) |
| 2131 | if not value or value[0] != '@': |
| 2132 | msg_id.defects.append(errors.InvalidHeaderDefect( |
| 2133 | "msg-id with no id-right")) |
| 2134 | # Even though there is no id-right, if the local part |
| 2135 | # ends with `>` let's just parse it too and return |
| 2136 | # along with the defect. |
| 2137 | if value and value[0] == '>': |
| 2138 | msg_id.append(ValueTerminal('>', 'msg-id-end')) |
| 2139 | value = value[1:] |
| 2140 | return msg_id, value |
| 2141 | msg_id.append(ValueTerminal('@', 'address-at-symbol')) |
| 2142 | value = value[1:] |
| 2143 | # Parse id-right. |
| 2144 | try: |
| 2145 | token, value = get_dot_atom_text(value) |
| 2146 | except errors.HeaderParseError: |
| 2147 | try: |
| 2148 | token, value = get_no_fold_literal(value) |
| 2149 | except errors.HeaderParseError: |
| 2150 | try: |
| 2151 | token, value = get_domain(value) |
| 2152 | msg_id.defects.append(errors.ObsoleteHeaderDefect( |
| 2153 | "obsolete id-right in msg-id")) |
| 2154 | except errors.HeaderParseError: |
| 2155 | raise errors.HeaderParseError( |
| 2156 | "expected dot-atom-text, no-fold-literal or obs-id-right" |
| 2157 | " but found '{}'".format(value)) |
| 2158 | msg_id.append(token) |
| 2159 | if value and value[0] == '>': |
no test coverage detected
searching dependent graphs…