|
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