Coverage for /home/martinb/.local/share/virtualenvs/camcops/lib/python3.6/site-packages/requests/__init__.py : 69%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# -*- coding: utf-8 -*-
3# __
4# /__) _ _ _ _ _/ _
5# / ( (- (/ (/ (- _) / _)
6# /
8"""
9Requests HTTP Library
10~~~~~~~~~~~~~~~~~~~~~
12Requests is an HTTP library, written in Python, for human beings.
13Basic GET usage:
15 >>> import requests
16 >>> r = requests.get('https://www.python.org')
17 >>> r.status_code
18 200
19 >>> b'Python is a programming language' in r.content
20 True
22... or POST:
24 >>> payload = dict(key1='value1', key2='value2')
25 >>> r = requests.post('https://httpbin.org/post', data=payload)
26 >>> print(r.text)
27 {
28 ...
29 "form": {
30 "key1": "value1",
31 "key2": "value2"
32 },
33 ...
34 }
36The other HTTP methods are supported - see `requests.api`. Full documentation
37is at <https://requests.readthedocs.io>.
39:copyright: (c) 2017 by Kenneth Reitz.
40:license: Apache 2.0, see LICENSE for more details.
41"""
43import urllib3
44import chardet
45import warnings
46from .exceptions import RequestsDependencyWarning
49def check_compatibility(urllib3_version, chardet_version):
50 urllib3_version = urllib3_version.split('.')
51 assert urllib3_version != ['dev'] # Verify urllib3 isn't installed from git.
53 # Sometimes, urllib3 only reports its version as 16.1.
54 if len(urllib3_version) == 2:
55 urllib3_version.append('0')
57 # Check urllib3 for compatibility.
58 major, minor, patch = urllib3_version # noqa: F811
59 major, minor, patch = int(major), int(minor), int(patch)
60 # urllib3 >= 1.21.1, <= 1.26
61 assert major == 1
62 assert minor >= 21
63 assert minor <= 26
65 # Check chardet for compatibility.
66 major, minor, patch = chardet_version.split('.')[:3]
67 major, minor, patch = int(major), int(minor), int(patch)
68 # chardet >= 3.0.2, < 5.0.0
69 assert (3, 0, 2) <= (major, minor, patch) < (5, 0, 0)
72def _check_cryptography(cryptography_version):
73 # cryptography < 1.3.4
74 try:
75 cryptography_version = list(map(int, cryptography_version.split('.')))
76 except ValueError:
77 return
79 if cryptography_version < [1, 3, 4]:
80 warning = 'Old version of cryptography ({}) may cause slowdown.'.format(cryptography_version)
81 warnings.warn(warning, RequestsDependencyWarning)
83# Check imported dependencies for compatibility.
84try:
85 check_compatibility(urllib3.__version__, chardet.__version__)
86except (AssertionError, ValueError):
87 warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
88 "version!".format(urllib3.__version__, chardet.__version__),
89 RequestsDependencyWarning)
91# Attempt to enable urllib3's fallback for SNI support
92# if the standard library doesn't support SNI or the
93# 'ssl' library isn't available.
94try:
95 try:
96 import ssl
97 except ImportError:
98 ssl = None
100 if not getattr(ssl, "HAS_SNI", False):
101 from urllib3.contrib import pyopenssl
102 pyopenssl.inject_into_urllib3()
104 # Check cryptography version
105 from cryptography import __version__ as cryptography_version
106 _check_cryptography(cryptography_version)
107except ImportError:
108 pass
110# urllib3's DependencyWarnings should be silenced.
111from urllib3.exceptions import DependencyWarning
112warnings.simplefilter('ignore', DependencyWarning)
114from .__version__ import __title__, __description__, __url__, __version__
115from .__version__ import __build__, __author__, __author_email__, __license__
116from .__version__ import __copyright__, __cake__
118from . import utils
119from . import packages
120from .models import Request, Response, PreparedRequest
121from .api import request, get, head, post, patch, put, delete, options
122from .sessions import session, Session
123from .status_codes import codes
124from .exceptions import (
125 RequestException, Timeout, URLRequired,
126 TooManyRedirects, HTTPError, ConnectionError,
127 FileModeWarning, ConnectTimeout, ReadTimeout
128)
130# Set default logging handler to avoid "No handler found" warnings.
131import logging
132from logging import NullHandler
134logging.getLogger(__name__).addHandler(NullHandler())
136# FileModeWarnings go off per the default.
137warnings.simplefilter('default', FileModeWarning, append=True)