mime-version = [CFWS] 1*digit [CFWS] "." [CFWS] 1*digit [CFWS]
(value)
| 2223 | # |
| 2224 | |
| 2225 | def parse_mime_version(value): |
| 2226 | """ mime-version = [CFWS] 1*digit [CFWS] "." [CFWS] 1*digit [CFWS] |
| 2227 | |
| 2228 | """ |
| 2229 | # The [CFWS] is implicit in the RFC 2045 BNF. |
| 2230 | # XXX: This routine is a bit verbose, should factor out a get_int method. |
| 2231 | mime_version = MIMEVersion() |
| 2232 | if not value: |
| 2233 | mime_version.defects.append(errors.HeaderMissingRequiredValue( |
| 2234 | "Missing MIME version number (eg: 1.0)")) |
| 2235 | return mime_version |
| 2236 | if value[0] in CFWS_LEADER: |
| 2237 | token, value = get_cfws(value) |
| 2238 | mime_version.append(token) |
| 2239 | if not value: |
| 2240 | mime_version.defects.append(errors.HeaderMissingRequiredValue( |
| 2241 | "Expected MIME version number but found only CFWS")) |
| 2242 | digits = '' |
| 2243 | while value and value[0] != '.' and value[0] not in CFWS_LEADER: |
| 2244 | digits += value[0] |
| 2245 | value = value[1:] |
| 2246 | if not digits.isdigit(): |
| 2247 | mime_version.defects.append(errors.InvalidHeaderDefect( |
| 2248 | "Expected MIME major version number but found {!r}".format(digits))) |
| 2249 | mime_version.append(ValueTerminal(digits, 'xtext')) |
| 2250 | else: |
| 2251 | mime_version.major = int(digits) |
| 2252 | mime_version.append(ValueTerminal(digits, 'digits')) |
| 2253 | if value and value[0] in CFWS_LEADER: |
| 2254 | token, value = get_cfws(value) |
| 2255 | mime_version.append(token) |
| 2256 | if not value or value[0] != '.': |
| 2257 | if mime_version.major is not None: |
| 2258 | mime_version.defects.append(errors.InvalidHeaderDefect( |
| 2259 | "Incomplete MIME version; found only major number")) |
| 2260 | if value: |
| 2261 | mime_version.append(ValueTerminal(value, 'xtext')) |
| 2262 | return mime_version |
| 2263 | mime_version.append(ValueTerminal('.', 'version-separator')) |
| 2264 | value = value[1:] |
| 2265 | if value and value[0] in CFWS_LEADER: |
| 2266 | token, value = get_cfws(value) |
| 2267 | mime_version.append(token) |
| 2268 | if not value: |
| 2269 | if mime_version.major is not None: |
| 2270 | mime_version.defects.append(errors.InvalidHeaderDefect( |
| 2271 | "Incomplete MIME version; found only major number")) |
| 2272 | return mime_version |
| 2273 | digits = '' |
| 2274 | while value and value[0] not in CFWS_LEADER: |
| 2275 | digits += value[0] |
| 2276 | value = value[1:] |
| 2277 | if not digits.isdigit(): |
| 2278 | mime_version.defects.append(errors.InvalidHeaderDefect( |
| 2279 | "Expected MIME minor version number but found {!r}".format(digits))) |
| 2280 | mime_version.append(ValueTerminal(digits, 'xtext')) |
| 2281 | else: |
| 2282 | mime_version.minor = int(digits) |
nothing calls this directly
no test coverage detected
searching dependent graphs…