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

""" 

urllib3 - Thread-safe connection pooling and re-using. 

""" 

from __future__ import absolute_import 

import warnings 

 

from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, connection_from_url 

 

from . import exceptions 

from .filepost import encode_multipart_formdata 

from .poolmanager import PoolManager, ProxyManager, proxy_from_url 

from .response import HTTPResponse 

from .util.request import make_headers 

from .util.url import get_host 

from .util.timeout import Timeout 

from .util.retry import Retry 

from ._version import __version__ 

 

 

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

import logging 

from logging import NullHandler 

 

__author__ = "Andrey Petrov (andrey.petrov@shazow.net)" 

__license__ = "MIT" 

__version__ = __version__ 

 

__all__ = ( 

"HTTPConnectionPool", 

"HTTPSConnectionPool", 

"PoolManager", 

"ProxyManager", 

"HTTPResponse", 

"Retry", 

"Timeout", 

"add_stderr_logger", 

"connection_from_url", 

"disable_warnings", 

"encode_multipart_formdata", 

"get_host", 

"make_headers", 

"proxy_from_url", 

) 

 

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

 

 

def add_stderr_logger(level=logging.DEBUG): 

""" 

Helper for quickly adding a StreamHandler to the logger. Useful for 

debugging. 

 

Returns the handler after adding it. 

""" 

# This method needs to be in this __init__.py to get the __name__ correct 

# even if urllib3 is vendored within another package. 

logger = logging.getLogger(__name__) 

handler = logging.StreamHandler() 

handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s")) 

logger.addHandler(handler) 

logger.setLevel(level) 

logger.debug("Added a stderr logging handler to logger: %s", __name__) 

return handler 

 

 

# ... Clean up. 

del NullHandler 

 

 

# All warning filters *must* be appended unless you're really certain that they 

# shouldn't be: otherwise, it's very hard for users to use most Python 

# mechanisms to silence them. 

# SecurityWarning's always go off by default. 

warnings.simplefilter("always", exceptions.SecurityWarning, append=True) 

# SubjectAltNameWarning's should go off once per host 

warnings.simplefilter("default", exceptions.SubjectAltNameWarning, append=True) 

# InsecurePlatformWarning's don't vary between requests, so we keep it default. 

warnings.simplefilter("default", exceptions.InsecurePlatformWarning, append=True) 

# SNIMissingWarnings should go off only once. 

warnings.simplefilter("default", exceptions.SNIMissingWarning, append=True) 

 

 

def disable_warnings(category=exceptions.HTTPWarning): 

""" 

Helper for quickly disabling all urllib3 warnings. 

""" 

warnings.simplefilter("ignore", category)