Skip to content

Commit 24083e8

Browse files
authored
Merge branch 'main' into miketheman/localdev
2 parents 4256727 + aa89ec9 commit 24083e8

File tree

4 files changed

+40
-10
lines changed

4 files changed

+40
-10
lines changed

inspector/distribution.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
from flask import abort
99

10+
from .utilities import requests_session
11+
1012
# Lightweight datastore ;)
1113
dists = {}
1214

@@ -59,7 +61,7 @@ def _get_dist(first, second, rest, distname):
5961

6062
url = f"https://files.pythonhosted.org/packages/{first}/{second}/{rest}/{distname}"
6163
try:
62-
resp = requests.get(url, stream=True)
64+
resp = requests_session().get(url, stream=True)
6365
resp.raise_for_status()
6466
except requests.HTTPError as exc:
6567
abort(exc.response.status_code)

inspector/main.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import urllib.parse
33

44
import gunicorn.http.errors
5-
import requests
65
import sentry_sdk
76

87
from flask import Flask, Response, abort, redirect, render_template, request, url_for
@@ -13,7 +12,7 @@
1312
from .deob import decompile, disassemble
1413
from .distribution import _get_dist
1514
from .legacy import parse
16-
from .utilities import pypi_report_form
15+
from .utilities import pypi_report_form, requests_session
1716

1817

1918
def traces_sampler(sampling_context):
@@ -62,7 +61,7 @@ def versions(project_name):
6261
url_for("versions", project_name=canonicalize_name(project_name)), 301
6362
)
6463

65-
resp = requests.get(f"https://pypi.org/pypi/{project_name}/json")
64+
resp = requests_session().get(f"https://pypi.org/pypi/{project_name}/json")
6665
pypi_project_url = f"https://pypi.org/project/{project_name}"
6766

6867
# Self-host 404 page to mitigate iframe embeds
@@ -99,7 +98,9 @@ def distributions(project_name, version):
9998
301,
10099
)
101100

102-
resp = requests.get(f"https://pypi.org/pypi/{project_name}/{version}/json")
101+
resp = requests_session().get(
102+
f"https://pypi.org/pypi/{project_name}/{version}/json"
103+
)
103104
if resp.status_code != 200:
104105
return redirect(f"/project/{project_name}/")
105106

@@ -142,12 +143,14 @@ def distribution(project_name, version, first, second, rest, distname):
142143
dist = _get_dist(first, second, rest, distname)
143144

144145
h2_paren = "View this project on PyPI"
145-
resp = requests.get(f"https://pypi.org/pypi/{project_name}/json")
146+
resp = requests_session().get(f"https://pypi.org/pypi/{project_name}/json")
146147
if resp.status_code == 404:
147148
h2_paren = "❌ Project no longer on PyPI"
148149

149150
h3_paren = "View this release on PyPI"
150-
resp = requests.get(f"https://pypi.org/pypi/{project_name}/{version}/json")
151+
resp = requests_session().get(
152+
f"https://pypi.org/pypi/{project_name}/{version}/json"
153+
)
151154
if resp.status_code == 404:
152155
h3_paren = "❌ Release no longer on PyPI"
153156

@@ -193,12 +196,14 @@ def file(project_name, version, first, second, rest, distname, filepath):
193196
)
194197

195198
h2_paren = "View this project on PyPI"
196-
resp = requests.get(f"https://pypi.org/pypi/{project_name}/json")
199+
resp = requests_session().get(f"https://pypi.org/pypi/{project_name}/json")
197200
if resp.status_code == 404:
198201
h2_paren = "❌ Project no longer on PyPI"
199202

200203
h3_paren = "View this release on PyPI"
201-
resp = requests.get(f"https://pypi.org/pypi/{project_name}/{version}/json")
204+
resp = requests_session().get(
205+
f"https://pypi.org/pypi/{project_name}/{version}/json"
206+
)
202207
if resp.status_code == 404:
203208
h3_paren = "❌ Release no longer on PyPI"
204209

inspector/utilities.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import urllib.parse
22

3+
import requests
4+
35

46
def mailto_report_link(project_name, version, file_path, request_url):
57
"""
@@ -39,3 +41,22 @@ def pypi_report_form(project_name, version, file_path, request_url):
3941
f"?inspector_link={request_url}"
4042
f"&summary={urllib.parse.quote(summary)}"
4143
)
44+
45+
46+
def requests_session(custom_user_agent: str = "inspector.pypi.io") -> requests.Session:
47+
"""
48+
Custom `requests` session with default headers applied.
49+
50+
Usage:
51+
52+
>>> from inspector.utilities import requests_session
53+
>>> response = requests_session().get(<url>)
54+
"""
55+
session = requests.Session()
56+
session.headers.update(
57+
{
58+
"User-Agent": custom_user_agent,
59+
}
60+
)
61+
62+
return session

tests/test_main.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ def test_versions(monkeypatch):
1010
json=lambda: stub_json,
1111
)
1212
get = pretend.call_recorder(lambda a: stub_response)
13-
monkeypatch.setattr(inspector.main.requests, "get", get)
13+
monkeypatch.setattr(
14+
inspector.main, "requests_session", lambda: pretend.stub(get=get)
15+
)
1416

1517
render_template = pretend.call_recorder(lambda *a, **kw: None)
1618
monkeypatch.setattr(inspector.main, "render_template", render_template)

0 commit comments

Comments
 (0)