1import sys 2from datetime import datetime, timedelta 3from typing import ( 4 Dict, Text, Union, Tuple, Any, Optional, Mapping, Iterable, Callable, List, Type, 5 TypeVar, overload, SupportsInt, 6) 7from _typeshed.wsgi import WSGIEnvironment 8 9from .datastructures import ( 10 Headers, Accept, RequestCacheControl, HeaderSet, Authorization, WWWAuthenticate, 11 IfRange, Range, ContentRange, ETags, TypeConversionDict, 12) 13 14if sys.version_info < (3,): 15 _Str = TypeVar('_Str', str, unicode) 16 _ToBytes = Union[bytes, bytearray, buffer, unicode] 17 _ETagData = Union[str, unicode, bytearray, buffer, memoryview] 18else: 19 _Str = str 20 _ToBytes = Union[bytes, bytearray, memoryview, str] 21 _ETagData = Union[bytes, bytearray, memoryview] 22 23_T = TypeVar("_T") 24_U = TypeVar("_U") 25 26HTTP_STATUS_CODES: Dict[int, str] 27 28def wsgi_to_bytes(data: Union[bytes, Text]) -> bytes: ... 29def bytes_to_wsgi(data: bytes) -> str: ... 30def quote_header_value(value: Any, extra_chars: str = ..., allow_token: bool = ...) -> str: ... 31def unquote_header_value(value: _Str, is_filename: bool = ...) -> _Str: ... 32def dump_options_header(header: Optional[_Str], options: Mapping[_Str, Any]) -> _Str: ... 33def dump_header(iterable: Union[Iterable[Any], Dict[_Str, Any]], allow_token: bool = ...) -> _Str: ... 34def parse_list_header(value: _Str) -> List[_Str]: ... 35@overload 36def parse_dict_header(value: Union[bytes, Text]) -> Dict[Text, Optional[Text]]: ... 37@overload 38def parse_dict_header(value: Union[bytes, Text], cls: Type[_T]) -> _T: ... 39@overload 40def parse_options_header(value: None, multiple: bool = ...) -> Tuple[str, Dict[str, Optional[str]]]: ... 41@overload 42def parse_options_header(value: _Str) -> Tuple[_Str, Dict[_Str, Optional[_Str]]]: ... 43# actually returns Tuple[_Str, Dict[_Str, Optional[_Str]], ...] 44@overload 45def parse_options_header(value: _Str, multiple: bool = ...) -> Tuple[Any, ...]: ... 46@overload 47def parse_accept_header(value: Optional[Text]) -> Accept: ... 48@overload 49def parse_accept_header(value: Optional[_Str], cls: Callable[[Optional[List[Tuple[str, float]]]], _T]) -> _T: ... 50@overload 51def parse_cache_control_header(value: Union[None, bytes, Text], 52 on_update: Optional[Callable[[RequestCacheControl], Any]] = ...) -> RequestCacheControl: ... 53@overload 54def parse_cache_control_header(value: Union[None, bytes, Text], on_update: _T, 55 cls: Callable[[Dict[Text, Optional[Text]], _T], _U]) -> _U: ... 56@overload 57def parse_cache_control_header(value: Union[None, bytes, Text], *, 58 cls: Callable[[Dict[Text, Optional[Text]], None], _U]) -> _U: ... 59def parse_set_header(value: Text, on_update: Optional[Callable[[HeaderSet], Any]] = ...) -> HeaderSet: ... 60def parse_authorization_header(value: Union[None, bytes, Text]) -> Optional[Authorization]: ... 61def parse_www_authenticate_header(value: Union[None, bytes, Text], 62 on_update: Optional[Callable[[WWWAuthenticate], Any]] = ...) -> WWWAuthenticate: ... 63def parse_if_range_header(value: Optional[Text]) -> IfRange: ... 64def parse_range_header(value: Optional[Text], make_inclusive: bool = ...) -> Optional[Range]: ... 65def parse_content_range_header(value: Optional[Text], 66 on_update: Optional[Callable[[ContentRange], Any]] = ...) -> Optional[ContentRange]: ... 67def quote_etag(etag: _Str, weak: bool = ...) -> _Str: ... 68def unquote_etag(etag: Optional[_Str]) -> Tuple[Optional[_Str], Optional[_Str]]: ... 69def parse_etags(value: Optional[Text]) -> ETags: ... 70def generate_etag(data: _ETagData) -> str: ... 71def parse_date(value: Optional[str]) -> Optional[datetime]: ... 72def cookie_date(expires: Union[None, float, datetime] = ...) -> str: ... 73def http_date(timestamp: Union[None, float, datetime] = ...) -> str: ... 74def parse_age(value: Optional[SupportsInt] = ...) -> Optional[timedelta]: ... 75def dump_age(age: Union[None, timedelta, SupportsInt]) -> Optional[str]: ... 76def is_resource_modified(environ: WSGIEnvironment, etag: Optional[Text] = ..., data: Optional[_ETagData] = ..., 77 last_modified: Union[None, Text, datetime] = ..., ignore_if_range: bool = ...) -> bool: ... 78def remove_entity_headers(headers: Union[List[Tuple[Text, Text]], Headers], allowed: Iterable[Text] = ...) -> None: ... 79def remove_hop_by_hop_headers(headers: Union[List[Tuple[Text, Text]], Headers]) -> None: ... 80def is_entity_header(header: Text) -> bool: ... 81def is_hop_by_hop_header(header: Text) -> bool: ... 82@overload 83def parse_cookie(header: Union[None, WSGIEnvironment, Text, bytes], charset: Text = ..., 84 errors: Text = ...) -> TypeConversionDict[Any, Any]: ... 85@overload 86def parse_cookie(header: Union[None, WSGIEnvironment, Text, bytes], charset: Text = ..., 87 errors: Text = ..., cls: Optional[Callable[[Iterable[Tuple[Text, Text]]], _T]] = ...) -> _T: ... 88def dump_cookie(key: _ToBytes, value: _ToBytes = ..., max_age: Union[None, float, timedelta] = ..., 89 expires: Union[None, Text, float, datetime] = ..., path: Union[None, Tuple[Any, ...], str, bytes] = ..., 90 domain: Union[None, str, bytes] = ..., secure: bool = ..., httponly: bool = ..., charset: Text = ..., 91 sync_expires: bool = ...) -> str: ... 92def is_byte_range_valid(start: Optional[int], stop: Optional[int], length: Optional[int]) -> bool: ... 93