Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/requests/__init__.py: 63%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

68 statements  

1# __ 

2# /__) _ _ _ _ _/ _ 

3# / ( (- (/ (/ (- _) / _) 

4# / 

5 

6""" 

7Requests HTTP Library 

8~~~~~~~~~~~~~~~~~~~~~ 

9 

10Requests is an HTTP library, written in Python, for human beings. 

11Basic GET usage: 

12 

13 >>> import requests 

14 >>> r = requests.get('https://www.python.org') 

15 >>> r.status_code 

16 200 

17 >>> b'Python is a programming language' in r.content 

18 True 

19 

20... or POST: 

21 

22 >>> payload = dict(key1='value1', key2='value2') 

23 >>> r = requests.post('https://httpbin.org/post', data=payload) 

24 >>> print(r.text) 

25 { 

26 ... 

27 "form": { 

28 "key1": "value1", 

29 "key2": "value2" 

30 }, 

31 ... 

32 } 

33 

34The other HTTP methods are supported - see `requests.api`. Full documentation 

35is at <https://requests.readthedocs.io>. 

36 

37:copyright: (c) 2017 by Kenneth Reitz. 

38:license: Apache 2.0, see LICENSE for more details. 

39""" 

40 

41import warnings 

42 

43import urllib3 

44 

45from .exceptions import RequestsDependencyWarning 

46 

47try: 

48 from charset_normalizer import __version__ as charset_normalizer_version 

49except ImportError: 

50 charset_normalizer_version = None 

51 

52try: 

53 from chardet import __version__ as chardet_version 

54except ImportError: 

55 chardet_version = None 

56 

57 

58def check_compatibility(urllib3_version, chardet_version, charset_normalizer_version): 

59 urllib3_version = urllib3_version.split(".") 

60 assert urllib3_version != ["dev"] # Verify urllib3 isn't installed from git. 

61 

62 # Sometimes, urllib3 only reports its version as 16.1. 

63 if len(urllib3_version) == 2: 

64 urllib3_version.append("0") 

65 

66 # Check urllib3 for compatibility. 

67 major, minor, patch = urllib3_version # noqa: F811 

68 major, minor, patch = int(major), int(minor), int(patch) 

69 # urllib3 >= 1.21.1 

70 assert major >= 1 

71 if major == 1: 

72 assert minor >= 21 

73 

74 # Check charset_normalizer for compatibility. 

75 if chardet_version: 

76 major, minor, patch = chardet_version.split(".")[:3] 

77 major, minor, patch = int(major), int(minor), int(patch) 

78 # chardet_version >= 3.0.2, < 6.0.0 

79 assert (3, 0, 2) <= (major, minor, patch) < (6, 0, 0) 

80 elif charset_normalizer_version: 

81 major, minor, patch = charset_normalizer_version.split(".")[:3] 

82 major, minor, patch = int(major), int(minor), int(patch) 

83 # charset_normalizer >= 2.0.0 < 4.0.0 

84 assert (2, 0, 0) <= (major, minor, patch) < (4, 0, 0) 

85 else: 

86 warnings.warn( 

87 "Unable to find acceptable character detection dependency " 

88 "(chardet or charset_normalizer).", 

89 RequestsDependencyWarning, 

90 ) 

91 

92 

93def _check_cryptography(cryptography_version): 

94 # cryptography < 1.3.4 

95 try: 

96 cryptography_version = list(map(int, cryptography_version.split("."))) 

97 except ValueError: 

98 return 

99 

100 if cryptography_version < [1, 3, 4]: 

101 warning = "Old version of cryptography ({}) may cause slowdown.".format( 

102 cryptography_version 

103 ) 

104 warnings.warn(warning, RequestsDependencyWarning) 

105 

106 

107# Check imported dependencies for compatibility. 

108try: 

109 check_compatibility( 

110 urllib3.__version__, chardet_version, charset_normalizer_version 

111 ) 

112except (AssertionError, ValueError): 

113 warnings.warn( 

114 "urllib3 ({}) or chardet ({})/charset_normalizer ({}) doesn't match a supported " 

115 "version!".format( 

116 urllib3.__version__, chardet_version, charset_normalizer_version 

117 ), 

118 RequestsDependencyWarning, 

119 ) 

120 

121# Attempt to enable urllib3's fallback for SNI support 

122# if the standard library doesn't support SNI or the 

123# 'ssl' library isn't available. 

124try: 

125 try: 

126 import ssl 

127 except ImportError: 

128 ssl = None 

129 

130 if not getattr(ssl, "HAS_SNI", False): 

131 from urllib3.contrib import pyopenssl 

132 

133 pyopenssl.inject_into_urllib3() 

134 

135 # Check cryptography version 

136 from cryptography import __version__ as cryptography_version 

137 

138 _check_cryptography(cryptography_version) 

139except ImportError: 

140 pass 

141 

142# urllib3's DependencyWarnings should be silenced. 

143from urllib3.exceptions import DependencyWarning 

144 

145warnings.simplefilter("ignore", DependencyWarning) 

146 

147# Set default logging handler to avoid "No handler found" warnings. 

148import logging 

149from logging import NullHandler 

150 

151from . import packages, utils 

152from .__version__ import ( 

153 __author__, 

154 __author_email__, 

155 __build__, 

156 __cake__, 

157 __copyright__, 

158 __description__, 

159 __license__, 

160 __title__, 

161 __url__, 

162 __version__, 

163) 

164from .api import delete, get, head, options, patch, post, put, request 

165from .exceptions import ( 

166 ConnectionError, 

167 ConnectTimeout, 

168 FileModeWarning, 

169 HTTPError, 

170 JSONDecodeError, 

171 ReadTimeout, 

172 RequestException, 

173 Timeout, 

174 TooManyRedirects, 

175 URLRequired, 

176) 

177from .models import PreparedRequest, Request, Response 

178from .sessions import Session, session 

179from .status_codes import codes 

180 

181logging.getLogger(__name__).addHandler(NullHandler()) 

182 

183# FileModeWarnings go off per the default. 

184warnings.simplefilter("default", FileModeWarning, append=True)