Skip to content

Commit 3e20cd1

Browse files
committed
🎨 * Define new way of lib dependency management
* Introduce black and mypy linters * Black the code * Move test to tests directory
1 parent 513319e commit 3e20cd1

File tree

10 files changed

+557
-66
lines changed

10 files changed

+557
-66
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
name: run tests
3030
command: |
3131
. venv/bin/activate
32-
python test_main.py
32+
python tests/test_main.py
3333
3434
test-3.6:
3535
<<: *tests

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,6 @@ dmypy.json
128128

129129
# Pyre type checker
130130
.pyre/
131+
132+
# IDE
133+
.idea/

jokeapi/__init__.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import urllib3
2-
import urllib
3-
import json
41
from jokeapi.main import Jokes
2+
53
print("Sv443's JokeAPI")

jokeapi/main.py

Lines changed: 59 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ class JokeTypeError(Exception):
2424
class Jokes:
2525
def __init__(self):
2626
self.http = urllib3.PoolManager()
27-
self.info = self.http.request(
28-
'GET', "https://sv443.net/jokeapi/v2/info")
29-
self.info = data = json.loads(self.info.data.decode('utf-8'))["jokes"]
27+
self.info = self.http.request("GET", "https://sv443.net/jokeapi/v2/info")
28+
self.info = data = json.loads(self.info.data.decode("utf-8"))["jokes"]
3029

3130
def build_request(
3231
self,
@@ -37,7 +36,7 @@ def build_request(
3736
search_string="",
3837
id_range=[],
3938
amount=1,
40-
lang="en"
39+
lang="en",
4140
):
4241
r = "https://sv443.net/jokeapi/v2/joke/"
4342

@@ -76,7 +75,7 @@ def build_request(
7675
else:
7776
blacklistFlags = None
7877
else:
79-
raise BlacklistError(f'''blacklist must be a list or tuple.''')
78+
raise BlacklistError(f"""blacklist must be a list or tuple.""")
8079

8180
if response_format not in ["json", "xml", "yaml", "txt"]:
8281
raise ResponseTypeError(
@@ -85,8 +84,8 @@ def build_request(
8584
if joke_type:
8685
if joke_type not in ["single", "twopart", "Any"]:
8786
raise JokeTypeError(
88-
'''Invalid joke type.
89-
Available options are "single" or "twopart".'''
87+
"""Invalid joke type.
88+
Available options are "single" or "twopart"."""
9089
)
9190
return
9291
else:
@@ -104,7 +103,8 @@ def build_request(
104103
raise ValueError(
105104
"id_range must be no longer than 2 items, \
106105
id_range[0] must be greater than or equal to 0 and \
107-
id_range[1] must be less than or equal to {range_limit-1}.")
106+
id_range[1] must be less than or equal to {range_limit-1}."
107+
)
108108

109109
if amount > 10:
110110
raise ValueError(
@@ -135,29 +135,29 @@ def build_request(
135135

136136
return r
137137

138-
def send_request(self,
139-
request,
140-
response_format,
141-
return_headers,
142-
auth_token,
143-
user_agent
144-
):
138+
def send_request(
139+
self, request, response_format, return_headers, auth_token, user_agent
140+
):
145141
returns = []
146142

147143
if auth_token:
148-
r = self.http.request('GET',
149-
request,
150-
headers={'Authorization': str(auth_token),
151-
'user-agent': str(user_agent),
152-
'accept-encoding': 'gzip'
153-
}
154-
)
144+
r = self.http.request(
145+
"GET",
146+
request,
147+
headers={
148+
"Authorization": str(auth_token),
149+
"user-agent": str(user_agent),
150+
"accept-encoding": "gzip",
151+
},
152+
)
155153
else:
156-
r = self.http.request('GET', request, headers={
157-
'user-agent': str(user_agent),
158-
'accept-encoding': 'gzip'})
154+
r = self.http.request(
155+
"GET",
156+
request,
157+
headers={"user-agent": str(user_agent), "accept-encoding": "gzip"},
158+
)
159159

160-
data = r.data.decode('utf-8')
160+
data = r.data.decode("utf-8")
161161

162162
if response_format == "json":
163163
try:
@@ -166,22 +166,38 @@ def send_request(self,
166166
print(data)
167167
raise
168168
else:
169-
if len(' '.join(re.split("error", data.lower())[0:][1:]).replace(
170-
'<', '').replace('/', '').replace(' ', '').replace(':', '')
171-
.replace('>', '')) == 4:
172-
raise Exception(f"API returned an error. \
173-
Full response: \n\n {data}")
169+
if (
170+
len(
171+
" ".join(re.split("error", data.lower())[0:][1:])
172+
.replace("<", "")
173+
.replace("/", "")
174+
.replace(" ", "")
175+
.replace(":", "")
176+
.replace(">", "")
177+
)
178+
== 4
179+
):
180+
raise Exception(
181+
f"API returned an error. \
182+
Full response: \n\n {data}"
183+
)
174184

175-
headers = str(r.headers).replace(r'\n', '').replace(
176-
'\n', '').replace(r'\\', '').replace(r"\'", '')[15:-1]
185+
headers = (
186+
str(r.headers)
187+
.replace(r"\n", "")
188+
.replace("\n", "")
189+
.replace(r"\\", "")
190+
.replace(r"\'", "")[15:-1]
191+
)
177192

178193
returns.append(data)
179194
if return_headers:
180195
returns.append(headers)
181196

182197
if auth_token:
183198
returns.append(
184-
{"Token-Valid": bool(int(re.split(r"Token-Valid", headers)[1][4]))})
199+
{"Token-Valid": bool(int(re.split(r"Token-Valid", headers)[1][4]))}
200+
)
185201

186202
if len(returns) > 1:
187203
return returns
@@ -200,7 +216,7 @@ def get_joke(
200216
auth_token=None,
201217
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) \
202218
Gecko/20100101 Firefox/77.0",
203-
return_headers=False
219+
return_headers=False,
204220
):
205221
r = self.build_request(
206222
category,
@@ -210,11 +226,12 @@ def get_joke(
210226
search_string,
211227
id_range,
212228
amount,
213-
lang
229+
lang,
214230
)
215231

216232
response = self.send_request(
217-
r, response_format, return_headers, auth_token, user_agent)
233+
r, response_format, return_headers, auth_token, user_agent
234+
)
218235
return response
219236

220237
def submit_joke(self, category, joke, flags, lang="en"):
@@ -226,7 +243,8 @@ def submit_joke(self, category, joke, flags, lang="en"):
226243
You selected {category}.
227244
Available categories are:
228245
{"""
229-
""".join(self.info["categories"])}''')
246+
""".join(self.info["categories"])}'''
247+
)
230248
request["category"] = category
231249

232250
if type(joke) in [list, tuple]:
@@ -249,13 +267,14 @@ def submit_joke(self, category, joke, flags, lang="en"):
249267
Available flags are:
250268
{"""
251269
""".join(self.info["flags"])}
252-
''')
270+
'''
271+
)
253272
request["flags"] = flags
254273
request["lang"] = lang
255274

256275
data = str(request).replace("'", '"')
257276
data = data.replace(": True", ": true").replace(": False", ": false")
258-
data = data.encode('ascii')
277+
data = data.encode("ascii")
259278
url = "https://sv443.net/jokeapi/v2/submit"
260279

261280
try:

mypy.ini

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[mypy]
2+
python_version = 3.8
3+
warn_return_any = True
4+
warn_unused_configs = True
5+
6+
[mypy-urllib3]
7+
ignore_missing_imports = True

0 commit comments

Comments
 (0)