Skip to content

Commit b022c3c

Browse files
committed
Use redirected URL, closes #7
1 parent 02b4d85 commit b022c3c

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed

linkpreview/compose.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def link_preview(
1111
if content is None:
1212
try:
1313
grabber = LinkGrabber()
14-
content = grabber.get_content(url)
14+
content, url = grabber.get_content(url)
1515
except InvalidMimeTypeError:
1616
content = ''
1717

linkpreview/grabber.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,4 @@ def get_content(self, url: str, headers: dict = None):
5858

5959
content += chunk
6060

61-
return content
61+
return content, r.url

tests/test_grabber.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,20 @@ class FakeResponse(Response):
4545
headers={"content-length": "100000"},
4646
)
4747
)
48+
httpserver.expect_request("/redirected").respond_with_response(
49+
FakeResponse(
50+
mimetype="text/html",
51+
response=b"done!",
52+
)
53+
)
54+
redirected_url = "http://%s:%s/redirected" % (httpserver.host, httpserver.port)
55+
httpserver.expect_request("/redirection").respond_with_response(
56+
FakeResponse(
57+
mimetype="text/html",
58+
headers={"location": redirected_url},
59+
status=301
60+
)
61+
)
4862

4963
# success
5064
grabber = LinkGrabber(maxsize=100)
@@ -80,3 +94,8 @@ class FakeResponse(Response):
8094
grabber = LinkGrabber()
8195
with pytest.raises(exceptions.InvalidContentError):
8296
grabber.get_content(httpserver.url_for("/badmime"))
97+
98+
# redirection
99+
grabber = LinkGrabber()
100+
content, url = grabber.get_content(httpserver.url_for("/redirection"))
101+
assert url == redirected_url

tests/test_preview.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from pytest_httpserver import HTTPServer
44

5+
from werkzeug.wrappers.response import Response
6+
57
from linkpreview import Link, link_preview
68
from linkpreview.preview import OpenGraph, TwitterCard, Schema, Generic
79

@@ -184,6 +186,18 @@ def test_link_preview(httpserver: HTTPServer):
184186
'{}',
185187
headers={"content-type": "application/json"},
186188
)
189+
httpserver.expect_request("/redirected").respond_with_data(
190+
get_sample("generic/h1-img.html"),
191+
headers={"content-type": "text/html"},
192+
)
193+
redirected_url = "http://%s:%s/redirected" % (httpserver.host, httpserver.port)
194+
httpserver.expect_request("/redirection").respond_with_response(
195+
Response(
196+
mimetype="text/html",
197+
headers={"location": redirected_url},
198+
status=301
199+
)
200+
)
187201

188202
url = httpserver.url_for("/preview1")
189203
preview = link_preview(url)
@@ -235,3 +249,11 @@ def test_link_preview(httpserver: HTTPServer):
235249
assert preview.image is None
236250
assert preview.absolute_image is None
237251
assert preview.force_title == "Preview 3"
252+
253+
url = httpserver.url_for("/redirection")
254+
preview = link_preview(url)
255+
assert preview.link.url == redirected_url
256+
assert preview.title == "This title is from the first h1 tag."
257+
assert preview.description is None
258+
assert preview.image == "http://localhost:8000/img/heck.jpg"
259+
assert preview.absolute_image == "http://localhost:8000/img/heck.jpg"

0 commit comments

Comments
 (0)