|
25 | 25 | from .__version__ import __version__ |
26 | 26 |
|
27 | 27 | # to_native_string is unused here, but imported here for backwards compatibility |
28 | | -from ._internal_utils import HEADER_VALIDATORS, to_native_string # noqa: F401 |
| 28 | +from ._internal_utils import ( # noqa: F401 |
| 29 | + _HEADER_VALIDATORS_BYTE, |
| 30 | + _HEADER_VALIDATORS_STR, |
| 31 | + HEADER_VALIDATORS, |
| 32 | + to_native_string, |
| 33 | +) |
29 | 34 | from .compat import ( |
30 | 35 | Mapping, |
31 | 36 | basestring, |
@@ -1031,20 +1036,23 @@ def check_header_validity(header): |
1031 | 1036 | :param header: tuple, in the format (name, value). |
1032 | 1037 | """ |
1033 | 1038 | name, value = header |
| 1039 | + _validate_header_part(header, name, 0) |
| 1040 | + _validate_header_part(header, value, 1) |
1034 | 1041 |
|
1035 | | - for part in header: |
1036 | | - if type(part) not in HEADER_VALIDATORS: |
1037 | | - raise InvalidHeader( |
1038 | | - f"Header part ({part!r}) from {{{name!r}: {value!r}}} must be " |
1039 | | - f"of type str or bytes, not {type(part)}" |
1040 | | - ) |
1041 | | - |
1042 | | - _validate_header_part(name, "name", HEADER_VALIDATORS[type(name)][0]) |
1043 | | - _validate_header_part(value, "value", HEADER_VALIDATORS[type(value)][1]) |
1044 | 1042 |
|
| 1043 | +def _validate_header_part(header, header_part, header_validator_index): |
| 1044 | + if isinstance(header_part, str): |
| 1045 | + validator = _HEADER_VALIDATORS_STR[header_validator_index] |
| 1046 | + elif isinstance(header_part, bytes): |
| 1047 | + validator = _HEADER_VALIDATORS_BYTE[header_validator_index] |
| 1048 | + else: |
| 1049 | + raise InvalidHeader( |
| 1050 | + f"Header part ({header_part!r}) from {header} " |
| 1051 | + f"must be of type str or bytes, not {type(header_part)}" |
| 1052 | + ) |
1045 | 1053 |
|
1046 | | -def _validate_header_part(header_part, header_kind, validator): |
1047 | 1054 | if not validator.match(header_part): |
| 1055 | + header_kind = "name" if header_validator_index == 0 else "value" |
1048 | 1056 | raise InvalidHeader( |
1049 | 1057 | f"Invalid leading whitespace, reserved character(s), or return" |
1050 | 1058 | f"character(s) in header {header_kind}: {header_part!r}" |
|
0 commit comments