1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

# -*- coding: utf-8 -*- 

 

# __ 

# /__) _ _ _ _ _/ _ 

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

# / 

 

""" 

Requests HTTP Library 

~~~~~~~~~~~~~~~~~~~~~ 

 

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

Basic GET usage: 

 

>>> import requests 

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

>>> r.status_code 

200 

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

True 

 

... or POST: 

 

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

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

>>> print(r.text) 

{ 

... 

"form": { 

"key1": "value1", 

"key2": "value2" 

}, 

... 

} 

 

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

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

 

:copyright: (c) 2017 by Kenneth Reitz. 

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

""" 

 

import urllib3 

import chardet 

import warnings 

from .exceptions import RequestsDependencyWarning 

 

 

def check_compatibility(urllib3_version, chardet_version): 

urllib3_version = urllib3_version.split('.') 

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

 

# Sometimes, urllib3 only reports its version as 16.1. 

if len(urllib3_version) == 2: 

urllib3_version.append('0') 

 

# Check urllib3 for compatibility. 

major, minor, patch = urllib3_version # noqa: F811 

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

# urllib3 >= 1.21.1, <= 1.25 

assert major == 1 

assert minor >= 21 

assert minor <= 25 

 

# Check chardet for compatibility. 

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

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

# chardet >= 3.0.2, < 3.1.0 

assert major == 3 

assert minor < 1 

assert patch >= 2 

 

 

def _check_cryptography(cryptography_version): 

# cryptography < 1.3.4 

try: 

cryptography_version = list(map(int, cryptography_version.split('.'))) 

except ValueError: 

return 

 

if cryptography_version < [1, 3, 4]: 

warning = 'Old version of cryptography ({}) may cause slowdown.'.format(cryptography_version) 

warnings.warn(warning, RequestsDependencyWarning) 

 

# Check imported dependencies for compatibility. 

try: 

check_compatibility(urllib3.__version__, chardet.__version__) 

except (AssertionError, ValueError): 

warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported " 

"version!".format(urllib3.__version__, chardet.__version__), 

RequestsDependencyWarning) 

 

# Attempt to enable urllib3's fallback for SNI support 

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

# 'ssl' library isn't available. 

try: 

try: 

import ssl 

except ImportError: 

ssl = None 

 

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

from urllib3.contrib import pyopenssl 

pyopenssl.inject_into_urllib3() 

 

# Check cryptography version 

from cryptography import __version__ as cryptography_version 

_check_cryptography(cryptography_version) 

except ImportError: 

pass 

 

# urllib3's DependencyWarnings should be silenced. 

from urllib3.exceptions import DependencyWarning 

warnings.simplefilter('ignore', DependencyWarning) 

 

from .__version__ import __title__, __description__, __url__, __version__ 

from .__version__ import __build__, __author__, __author_email__, __license__ 

from .__version__ import __copyright__, __cake__ 

 

from . import utils 

from . import packages 

from .models import Request, Response, PreparedRequest 

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

from .sessions import session, Session 

from .status_codes import codes 

from .exceptions import ( 

RequestException, Timeout, URLRequired, 

TooManyRedirects, HTTPError, ConnectionError, 

FileModeWarning, ConnectTimeout, ReadTimeout 

) 

 

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

import logging 

from logging import NullHandler 

 

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

 

# FileModeWarnings go off per the default. 

warnings.simplefilter('default', FileModeWarning, append=True)