Skip to content

Commit f789d4c

Browse files
committed
Added "requests__examples/adapters.py"
1 parent 3a9fc68 commit f789d4c

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

requests__examples/adapters.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
__author__ = 'ipetrash'
5+
6+
7+
from urllib.parse import urlparse
8+
from random import randint
9+
10+
import requests
11+
from requests.adapters import BaseAdapter, HTTPAdapter
12+
13+
14+
class FileAdapter(BaseAdapter):
15+
def send(
16+
self,
17+
request: requests.PreparedRequest,
18+
stream: bool = False,
19+
timeout: None | float | tuple[float, float] | tuple[float, None] = None,
20+
verify: bool | str = True,
21+
cert: None | bytes | str | tuple[bytes | str, bytes | str] = None,
22+
proxies: dict[str, str] | None = None,
23+
) -> requests.Response:
24+
file_name = urlparse(request.url).path
25+
26+
rs = requests.Response()
27+
rs.status_code = 200
28+
rs.raw = open(file_name, 'rb')
29+
rs.request = request
30+
31+
return rs
32+
33+
def close(self) -> None:
34+
pass
35+
36+
37+
class DuckDuckGoAdapter(HTTPAdapter):
38+
def send(
39+
self,
40+
request: requests.PreparedRequest,
41+
stream: bool = False,
42+
timeout: None | float | tuple[float, float] | tuple[float, None] = None,
43+
verify: bool | str = True,
44+
cert: None | bytes | str | tuple[bytes | str, bytes | str] = None,
45+
proxies: dict[str, str] | None = None,
46+
) -> requests.Response:
47+
query = urlparse(request.path_url).path
48+
49+
url = f'https://api.duckduckgo.com/?q={query}&format=json'
50+
return requests.get(url) # TODO:
51+
52+
53+
class RandomColorAdapter(BaseAdapter):
54+
def send(
55+
self,
56+
request: requests.PreparedRequest,
57+
stream: bool = False,
58+
timeout: None | float | tuple[float, float] | tuple[float, None] = None,
59+
verify: bool | str = True,
60+
cert: None | bytes | str | tuple[bytes | str, bytes | str] = None,
61+
proxies: dict[str, str] | None = None,
62+
) -> requests.Response:
63+
r, g, b = map(lambda x: hex(x)[2:].zfill(2), (randint(0, 255), randint(0, 255), randint(0, 255)))
64+
65+
rs = requests.Response()
66+
rs.status_code = 200
67+
rs._content = f'#{r}{g}{b}'.encode()
68+
rs.request = request
69+
70+
return rs
71+
72+
def close(self) -> None:
73+
pass
74+
75+
76+
s = requests.session()
77+
s.mount('file:', FileAdapter())
78+
s.mount('duckduckgo:', DuckDuckGoAdapter())
79+
s.mount('randomcolor:', RandomColorAdapter())
80+
81+
file_name = __file__
82+
rs = s.get('file:' + file_name)
83+
print(rs.content)
84+
# b"#!/usr/bin/env python3\r\n# -*- coding: utf-8 -*-\r\n\r\n__author__ = 'ipetrash' ...
85+
86+
rs = s.get('duckduckgo:' + 'Dark Souls')
87+
print(rs.json())
88+
# {'Abstract': "Dark Souls is a series of action role-playing games created by Hidet ...
89+
90+
rs = s.get('randomcolor:')
91+
print(rs.content)
92+
# b'#535ebd'

0 commit comments

Comments
 (0)