mime-version = [CFWS] 1*digit [CFWS] "." [CFWS] 1*digit [CFWS]
(value)
| 2180 | # |
| 2181 | |
| 2182 | def parse_mime_version(value): |
| 2183 | """ mime-version = [CFWS] 1*digit [CFWS] "." [CFWS] 1*digit [CFWS] |
| 2184 | |
| 2185 | """ |
| 2186 | # The [CFWS] is implicit in the RFC 2045 BNF. |
| 2187 | # XXX: This routine is a bit verbose, should factor out a get_int method. |
| 2188 | mime_version = MIMEVersion() |
| 2189 | if not value: |
| 2190 | mime_version.defects.append(errors.HeaderMissingRequiredValue( |
| 2191 | "Missing MIME version number (eg: 1.0)")) |
| 2192 | return mime_version |
| 2193 | if value[0] in CFWS_LEADER: |
| 2194 | token, value = get_cfws(value) |
| 2195 | mime_version.append(token) |
| 2196 | if not value: |
| 2197 | mime_version.defects.append(errors.HeaderMissingRequiredValue( |
| 2198 | "Expected MIME version number but found only CFWS")) |
| 2199 | digits = '' |
| 2200 | while value and value[0] != '.' and value[0] not in CFWS_LEADER: |
| 2201 | digits += value[0] |
| 2202 | value = value[1:] |
| 2203 | if not digits.isdigit(): |
| 2204 | mime_version.defects.append(errors.InvalidHeaderDefect( |
| 2205 | "Expected MIME major version number but found {!r}".format(digits))) |
| 2206 | mime_version.append(ValueTerminal(digits, 'xtext')) |
| 2207 | else: |
| 2208 | mime_version.major = int(digits) |
| 2209 | mime_version.append(ValueTerminal(digits, 'digits')) |
| 2210 | if value and value[0] in CFWS_LEADER: |
| 2211 | token, value = get_cfws(value) |
| 2212 | mime_version.append(token) |
| 2213 | if not value or value[0] != '.': |
| 2214 | if mime_version.major is not None: |
| 2215 | mime_version.defects.append(errors.InvalidHeaderDefect( |
| 2216 | "Incomplete MIME version; found only major number")) |
| 2217 | if value: |
| 2218 | mime_version.append(ValueTerminal(value, 'xtext')) |
| 2219 | return mime_version |
| 2220 | mime_version.append(ValueTerminal('.', 'version-separator')) |
| 2221 | value = value[1:] |
| 2222 | if value and value[0] in CFWS_LEADER: |
| 2223 | token, value = get_cfws(value) |
| 2224 | mime_version.append(token) |
| 2225 | if not value: |
| 2226 | if mime_version.major is not None: |
| 2227 | mime_version.defects.append(errors.InvalidHeaderDefect( |
| 2228 | "Incomplete MIME version; found only major number")) |
| 2229 | return mime_version |
| 2230 | digits = '' |
| 2231 | while value and value[0] not in CFWS_LEADER: |
| 2232 | digits += value[0] |
| 2233 | value = value[1:] |
| 2234 | if not digits.isdigit(): |
| 2235 | mime_version.defects.append(errors.InvalidHeaderDefect( |
| 2236 | "Expected MIME minor version number but found {!r}".format(digits))) |
| 2237 | mime_version.append(ValueTerminal(digits, 'xtext')) |
| 2238 | else: |
| 2239 | mime_version.minor = int(digits) |
nothing calls this directly
no test coverage detected