Skip to content

Commit 70d32d5

Browse files
committed
fix issue with duplicate request parameter for redirect logic
1 parent ecc01fe commit 70d32d5

File tree

3 files changed

+90
-3
lines changed

3 files changed

+90
-3
lines changed

mediawikiapi/wikipediapage.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,12 @@ def __load(self, redirect: bool = True, preload: bool = False) -> None:
113113

114114
# change the title and reload the whole object
115115
# TODO this should be refactored
116-
self.__init__( # type:ignore
117-
redirects["to"],
116+
self.__init__(
117+
request=self.request,
118+
title=redirects["to"],
118119
redirect=redirect,
119120
preload=preload,
120-
request=self.request,
121+
original_title=from_title,
121122
)
122123

123124
else:
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
interactions:
2+
- request:
3+
body: null
4+
headers:
5+
Accept:
6+
- '*/*'
7+
Accept-Encoding:
8+
- gzip, deflate
9+
Connection:
10+
- keep-alive
11+
Cookie:
12+
- WMF-Last-Access=08-Mar-2025; NetworkProbeLimit=0.001; WMF-Last-Access-Global=08-Mar-2025;
13+
GeoIP=IE:L:Dublin:53.30:-6.18:v4
14+
User-Agent:
15+
- mediawikiapi (https://github.com/lehinevych/MediaWikiAPI/)
16+
method: GET
17+
uri: https://en.wikipedia.org/w/api.php?prop=info%7Cpageprops&inprop=url&redirects=&titles=Template%3Acn&format=json&action=query
18+
response:
19+
body:
20+
string: "{\"batchcomplete\":\"\",\"query\":{\"normalized\":[{\"from\":\"Template:cn\",\"to\":\"Template:Cn\"}],\"redirects\":[{\"from\":\"Template:Cn\",\"to\":\"Template:Citation
21+
needed\"}],\"pages\":{\"2048472\":{\"pageid\":2048472,\"ns\":10,\"title\":\"Template:Citation
22+
needed\",\"contentmodel\":\"wikitext\",\"pagelanguage\":\"en\",\"pagelanguagehtmlcode\":\"en\",\"pagelanguagedir\":\"ltr\",\"touched\":\"2025-03-14T22:01:21Z\",\"lastrevid\":1234309184,\"length\":776,\"fullurl\":\"https://en.wikipedia.org/wiki/Template:Citation_needed\",\"editurl\":\"https://en.wikipedia.org/w/index.php?title=Template:Citation_needed&action=edit\",\"canonicalurl\":\"https://en.wikipedia.org/wiki/Template:Citation_needed\",\"pageprops\":{\"templatedata\":\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffdM\\ufffd\\ufffd@\\ufffd\\ufffd\\ufffd\\ufffd\\ufffdK.&\\ufffd\\ufffd=\\ufffd\\ufffd(\\ufffd\\ufffd%\\ufffd\\ufffdRzPl9\\ufffdv<\\ufffd\\ufffdivk\\ufffd\\ufffd{%'\\ufffd\\ufffd\\ufffdB{\\ufffd4\\ufffd\\ufffdy\\ufffd\\\\C\\\\g\\u07cbO\\ufffd-N\\ufffd\\ufffd\\ufffdvG\\ufffd\\ufffd\\ufffd\\ufffd(\\ufffd\\ufffd\\ufffd05
23+
\\t|CQ|;@\\ufffd\\ufffdw\\ufffd>\\ufffdf\\ufffdu \\ufffd\\ufffd\\ufffd>K\\ufffd\\ufffd\\ufffd\\ufffd-<\\ufffdb\\ufffd\\ufffd@\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd?\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd3\\ufffd\\ufffd\\ufffdn\\ufffd\\ufffd\\ufffd\\u008eMO\\ufffd\\ufffd\\ufffd\\ufffdpO\\ufffd*p\\ufffd\\ufffd\\ufffd\\ufffdc\\ufffd\\ufffda\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd)\\ufffd'\\ufffd\\ufffd:\\ufffd\\ufffd\\ufffd+\\ufffd\\ufffdN\\u046b\\ufffdL\\ufffd\\ufffd\\ufffd\\ufffd\\ufffda^\\ufffd\\ufffd\\ufffd\\u0182y\\ufffd7\\ufffd^\\ufffd\\ufffdU\\ufffd/\\ufffd1\\t\\u033ec\\u0500M\\ufffd\\ufffdWe\\ufffd%\\ufffdxp\\ufffd\\ufffd\\\"\\ufffd\\tC\\ufffd\\ufffd\\ufffd\\ufffde\\u03f2x\\ufffdy\\ufffd]mv\\ub3db\\ufffd\\ufffd\\ufffdr\\ufffd\\ufffdG\\ufffd-\\ufffde\\ufffd\\u070e\\ufffd\\ufffds9\\ufffdT\\ufffd5n!\\ufffdP\\ufffdL\\ufffd\\ufffd\\ufffd\\ufffdb`\\ufffd+\\ufffdj\\ufffd\\ufffd\\ufffd*:&\\ufffd\\ufffd\\ufffd\\ufffd[,A\\ufffd\\\"\\ufffd\\ufffdn\\ufffdN\\ufffd.g\\ufffd'\\ufffdZ\\ufffd|f\\ufffd!\\ufffdgb\\ufffdS\\ufffd\\u0694\\ufffd\\ufffd\\ufffdFy\\t\\ufffd&\\ufffdl\\ufffd}>\\ufffd\\ufffdh\\ufffd\\ufffd>\\ufffd\\ufffdk\\ufffd\\ufffd\\ufffd\\ufffd\\ufffdy\\ufffd\\ufffd\\\"QC\\u0313\\ufffd\\ufffdX\\ufffd\\ufffd\\ufffd\\ufffdK\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd?\\ufffd\\ufffdp\\ufffdGN7\\ufffd:\\ufffd\\ufffd\x7Fp*\\ufffdI.\\ufffd\\ufffd{\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd^\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd[\\ufffd\\ufffd\\ufffd\",\"wikibase_item\":\"Q5312535\"}}}}}"
24+
headers:
25+
accept-ranges:
26+
- bytes
27+
age:
28+
- '0'
29+
cache-control:
30+
- private, must-revalidate, max-age=0
31+
content-disposition:
32+
- inline; filename=api-result.json
33+
content-encoding:
34+
- gzip
35+
content-type:
36+
- application/json; charset=utf-8
37+
date:
38+
- Sat, 15 Mar 2025 00:36:12 GMT
39+
nel:
40+
- '{ "report_to": "wm_nel", "max_age": 604800, "failure_fraction": 0.05, "success_fraction":
41+
0.0}'
42+
report-to:
43+
- '{ "group": "wm_nel", "max_age": 604800, "endpoints": [{ "url": "https://intake-logging.wikimedia.org/v1/events?stream=w3c.reportingapi.network_error&schema_uri=/w3c/reportingapi/network_error/1.0.0"
44+
}] }'
45+
server:
46+
- mw-api-ext.eqiad.main-dd9d54c99-q89wk
47+
server-timing:
48+
- cache;desc="pass", host;desc="cp3072"
49+
set-cookie:
50+
- WMF-Last-Access=15-Mar-2025;Path=/;HttpOnly;secure;Expires=Wed, 16 Apr 2025
51+
00:00:00 GMT
52+
- WMF-Last-Access-Global=15-Mar-2025;Path=/;Domain=.wikipedia.org;HttpOnly;secure;Expires=Wed,
53+
16 Apr 2025 00:00:00 GMT
54+
strict-transport-security:
55+
- max-age=106384710; includeSubDomains; preload
56+
transfer-encoding:
57+
- chunked
58+
vary:
59+
- Accept-Encoding,Treat-as-Untrusted,X-Forwarded-Proto,Cookie,Authorization
60+
x-cache:
61+
- cp3072 miss, cp3072 pass
62+
x-cache-status:
63+
- pass
64+
x-client-ip:
65+
- 86.45.201.103
66+
x-content-type-options:
67+
- nosniff
68+
x-frame-options:
69+
- DENY
70+
status:
71+
code: 200
72+
message: OK
73+
version: 1

tests/test_page.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,19 @@ def test_redirect_normalization(self) -> None:
7070
self.assertEqual(capital_party.title, "Communist party")
7171
self.assertEqual(capital_party, lower_party)
7272

73+
def test_redirect_request_param(self) -> None:
74+
"""Test that redirects handle the request parameter correctly without duplication"""
75+
# This test verifies the fix for the bug where request parameter was being passed twice
76+
# during redirect handling
77+
try:
78+
page = api.page("Template:cn", auto_suggest=False)
79+
self.assertEqual(page.title, "Template:Citation needed")
80+
self.assertEqual(
81+
page.url, "https://en.wikipedia.org/wiki/Template:Citation_needed"
82+
)
83+
except TypeError as e:
84+
self.fail(f"Redirect handling failed with TypeError: {str(e)}")
85+
7386
def test_disambiguate(self) -> None:
7487
"""Test that page raises an error when a disambiguation page is reached."""
7588
page = api.page("Template", auto_suggest=False, redirect=False)

0 commit comments

Comments
 (0)