|
8 | 8 | """
|
9 | 9 |
|
10 | 10 | try:
|
11 |
| - from typing import Dict, Tuple |
| 11 | + from typing import Dict, Tuple, Union |
12 | 12 | except ImportError:
|
13 | 13 | pass
|
14 | 14 |
|
@@ -56,6 +56,43 @@ def get(self, name: str, default: str = None) -> Union[str, None]:
|
56 | 56 | """Returns the value for the given header name, or default if not found."""
|
57 | 57 | return self._storage.get(name.lower(), [None, default])[1]
|
58 | 58 |
|
| 59 | + def get_directive(self, name: str, default: str = None) -> Union[str, None]: |
| 60 | + """ |
| 61 | + Returns the main value (directive) for the given header name, or default if not found. |
| 62 | +
|
| 63 | + Example:: |
| 64 | +
|
| 65 | + headers = Headers({"Content-Type": "text/html; charset=utf-8"}) |
| 66 | + headers.get_directive("Content-Type") |
| 67 | + # 'text/html' |
| 68 | + """ |
| 69 | + |
| 70 | + header_value = self.get(name) |
| 71 | + if header_value is None: |
| 72 | + return default |
| 73 | + return header_value.split(";")[0].strip('" ') |
| 74 | + |
| 75 | + def get_parameter( |
| 76 | + self, name: str, parameter: str, default: str = None |
| 77 | + ) -> Union[str, None]: |
| 78 | + """ |
| 79 | + Returns the value of the given parameter for the given header name, or default if not found. |
| 80 | +
|
| 81 | + Example:: |
| 82 | +
|
| 83 | + headers = Headers({"Content-Type": "text/html; charset=utf-8"}) |
| 84 | + headers.get_parameter("Content-Type", "charset") |
| 85 | + # 'utf-8' |
| 86 | + """ |
| 87 | + |
| 88 | + header_value = self.get(name) |
| 89 | + if header_value is None: |
| 90 | + return default |
| 91 | + for header_parameter in header_value.split(";"): |
| 92 | + if header_parameter.strip().startswith(parameter): |
| 93 | + return header_parameter.strip().split("=")[1].strip('" ') |
| 94 | + return default |
| 95 | + |
59 | 96 | def setdefault(self, name: str, default: str = None):
|
60 | 97 | """Sets the value for the given header name if it does not exist."""
|
61 | 98 | return self._storage.setdefault(name.lower(), [name, default])[1]
|
|
0 commit comments