Skip to content

Commit ea4d9be

Browse files
committed
bpo-27485: Deprecate undocumented functions into urllib.parse
1 parent 650ba4f commit ea4d9be

File tree

6 files changed

+266
-85
lines changed

6 files changed

+266
-85
lines changed

Lib/lib2to3/fixes/fix_urllib.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
"pathname2url", "url2pathname"]),
1717
("urllib.parse",
1818
["quote", "quote_plus", "unquote", "unquote_plus",
19-
"urlencode", "splitattr", "splithost", "splitnport",
20-
"splitpasswd", "splitport", "splitquery", "splittag",
21-
"splittype", "splituser", "splitvalue", ]),
19+
"urlencode", "_splitattr", "_splithost", "_splitnport",
20+
"_splitpasswd", "_splitport", "_splitquery", "_splittag",
21+
"_splittype", "_splituser", "_splitvalue", ]),
2222
("urllib.error",
2323
["ContentTooShortError"])],
2424
"urllib2" : [

Lib/mimetypes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def guess_type(self, url, strict=True):
113113
Optional `strict' argument when False adds a bunch of commonly found,
114114
but non-standard types.
115115
"""
116-
scheme, url = urllib.parse.splittype(url)
116+
scheme, url = urllib.parse._splittype(url)
117117
if scheme == 'data':
118118
# syntax of data URLs:
119119
# dataurl := "data:" [ mediatype ] [ ";base64" ] "," data

Lib/test/test_urlparse.py

Lines changed: 99 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import unittest
22
import urllib.parse
3+
import warnings
34

45
RFC1808_BASE = "http://a/b/c/d;p?q#f"
56
RFC2396_BASE = "http://a/b/c/d;p?q"
@@ -993,15 +994,15 @@ class Utility_Tests(unittest.TestCase):
993994
# In Python 2 this test class was in test_urllib.
994995

995996
def test_splittype(self):
996-
splittype = urllib.parse.splittype
997+
splittype = urllib.parse._splittype
997998
self.assertEqual(splittype('type:opaquestring'), ('type', 'opaquestring'))
998999
self.assertEqual(splittype('opaquestring'), (None, 'opaquestring'))
9991000
self.assertEqual(splittype(':opaquestring'), (None, ':opaquestring'))
10001001
self.assertEqual(splittype('type:'), ('type', ''))
10011002
self.assertEqual(splittype('type:opaque:string'), ('type', 'opaque:string'))
10021003

10031004
def test_splithost(self):
1004-
splithost = urllib.parse.splithost
1005+
splithost = urllib.parse._splithost
10051006
self.assertEqual(splithost('//www.example.org:80/foo/bar/baz.html'),
10061007
('www.example.org:80', '/foo/bar/baz.html'))
10071008
self.assertEqual(splithost('//www.example.org:80'),
@@ -1030,7 +1031,7 @@ def test_splithost(self):
10301031
('example.net', '/file#'))
10311032

10321033
def test_splituser(self):
1033-
splituser = urllib.parse.splituser
1034+
splituser = urllib.parse._splituser
10341035
self.assertEqual(splituser('User:[email protected]:080'),
10351036
('User:Pass', 'www.python.org:080'))
10361037
self.assertEqual(splituser('@www.python.org:080'),
@@ -1045,7 +1046,7 @@ def test_splituser(self):
10451046
def test_splitpasswd(self):
10461047
# Some of the password examples are not sensible, but it is added to
10471048
# confirming to RFC2617 and addressing issue4675.
1048-
splitpasswd = urllib.parse.splitpasswd
1049+
splitpasswd = urllib.parse._splitpasswd
10491050
self.assertEqual(splitpasswd('user:ab'), ('user', 'ab'))
10501051
self.assertEqual(splitpasswd('user:a\nb'), ('user', 'a\nb'))
10511052
self.assertEqual(splitpasswd('user:a\tb'), ('user', 'a\tb'))
@@ -1061,7 +1062,7 @@ def test_splitpasswd(self):
10611062
self.assertEqual(splitpasswd(':ab'), ('', 'ab'))
10621063

10631064
def test_splitport(self):
1064-
splitport = urllib.parse.splitport
1065+
splitport = urllib.parse._splitport
10651066
self.assertEqual(splitport('parrot:88'), ('parrot', '88'))
10661067
self.assertEqual(splitport('parrot'), ('parrot', None))
10671068
self.assertEqual(splitport('parrot:'), ('parrot', None))
@@ -1072,7 +1073,7 @@ def test_splitport(self):
10721073
self.assertEqual(splitport(':88'), ('', '88'))
10731074

10741075
def test_splitnport(self):
1075-
splitnport = urllib.parse.splitnport
1076+
splitnport = urllib.parse._splitnport
10761077
self.assertEqual(splitnport('parrot:88'), ('parrot', 88))
10771078
self.assertEqual(splitnport('parrot'), ('parrot', -1))
10781079
self.assertEqual(splitnport('parrot', 55), ('parrot', 55))
@@ -1086,7 +1087,7 @@ def test_splitnport(self):
10861087
def test_splitquery(self):
10871088
# Normal cases are exercised by other tests; ensure that we also
10881089
# catch cases with no port specified (testcase ensuring coverage)
1089-
splitquery = urllib.parse.splitquery
1090+
splitquery = urllib.parse._splitquery
10901091
self.assertEqual(splitquery('http://python.org/fake?foo=bar'),
10911092
('http://python.org/fake', 'foo=bar'))
10921093
self.assertEqual(splitquery('http://python.org/fake?foo=bar?'),
@@ -1096,7 +1097,7 @@ def test_splitquery(self):
10961097
self.assertEqual(splitquery('?foo=bar'), ('', 'foo=bar'))
10971098

10981099
def test_splittag(self):
1099-
splittag = urllib.parse.splittag
1100+
splittag = urllib.parse._splittag
11001101
self.assertEqual(splittag('http://example.com?foo=bar#baz'),
11011102
('http://example.com?foo=bar', 'baz'))
11021103
self.assertEqual(splittag('http://example.com?foo=bar#'),
@@ -1108,7 +1109,7 @@ def test_splittag(self):
11081109
('http://example.com?foo=bar#baz', 'boo'))
11091110

11101111
def test_splitattr(self):
1111-
splitattr = urllib.parse.splitattr
1112+
splitattr = urllib.parse._splitattr
11121113
self.assertEqual(splitattr('/path;attr1=value1;attr2=value2'),
11131114
('/path', ['attr1=value1', 'attr2=value2']))
11141115
self.assertEqual(splitattr('/path;'), ('/path', ['']))
@@ -1119,23 +1120,108 @@ def test_splitattr(self):
11191120
def test_splitvalue(self):
11201121
# Normal cases are exercised by other tests; test pathological cases
11211122
# with no key/value pairs. (testcase ensuring coverage)
1122-
splitvalue = urllib.parse.splitvalue
1123+
splitvalue = urllib.parse._splitvalue
11231124
self.assertEqual(splitvalue('foo=bar'), ('foo', 'bar'))
11241125
self.assertEqual(splitvalue('foo='), ('foo', ''))
11251126
self.assertEqual(splitvalue('=bar'), ('', 'bar'))
11261127
self.assertEqual(splitvalue('foobar'), ('foobar', None))
11271128
self.assertEqual(splitvalue('foo=bar=baz'), ('foo', 'bar=baz'))
11281129

11291130
def test_to_bytes(self):
1130-
result = urllib.parse.to_bytes('http://www.python.org')
1131+
result = urllib.parse._to_bytes('http://www.python.org')
11311132
self.assertEqual(result, 'http://www.python.org')
1132-
self.assertRaises(UnicodeError, urllib.parse.to_bytes,
1133+
self.assertRaises(UnicodeError, urllib.parse._to_bytes,
11331134
'http://www.python.org/medi\u00e6val')
11341135

11351136
def test_unwrap(self):
1136-
url = urllib.parse.unwrap('<URL:type://host/path>')
1137+
url = urllib.parse._unwrap('<URL:type://host/path>')
11371138
self.assertEqual(url, 'type://host/path')
11381139

11391140

1141+
class DeprecationTest(unittest.TestCase):
1142+
1143+
def test_splittype_deprecation(self):
1144+
with self.assertWarns(DeprecationWarning) as cm:
1145+
urllib.parse.splittype()
1146+
self.assertEqual(str(cm.warning),
1147+
'urllib.parse.splittype() is deprecated as of 3.7, '
1148+
'use urllib.parse.urlparse() instead')
1149+
1150+
def test_splithost_deprecation(self):
1151+
with self.assertWarns(DeprecationWarning) as cm:
1152+
urllib.parse.splithost()
1153+
self.assertEqual(str(cm.warning),
1154+
'urllib.parse.splithost() is deprecated as of 3.7, '
1155+
'use urllib.parse.urlparse() instead')
1156+
1157+
def test_splituser_deprecation(self):
1158+
with self.assertWarns(DeprecationWarning) as cm:
1159+
urllib.parse.splituser()
1160+
self.assertEqual(str(cm.warning),
1161+
'urllib.parse.splituser() is deprecated as of 3.7, '
1162+
'use urllib.parse.urlparse() instead')
1163+
1164+
def test_splitpasswd_deprecation(self):
1165+
with self.assertWarns(DeprecationWarning) as cm:
1166+
urllib.parse.splitpasswd()
1167+
self.assertEqual(str(cm.warning),
1168+
'urllib.parse.splitpasswd() is deprecated as of 3.7, '
1169+
'use urllib.parse.urlparse() instead')
1170+
1171+
def test_splitport_deprecation(self):
1172+
with self.assertWarns(DeprecationWarning) as cm:
1173+
urllib.parse.splitport()
1174+
self.assertEqual(str(cm.warning),
1175+
'urllib.parse.splitport() is deprecated as of 3.7, '
1176+
'use urllib.parse.urlparse() instead')
1177+
1178+
def test_splitnport_deprecation(self):
1179+
with self.assertWarns(DeprecationWarning) as cm:
1180+
urllib.parse.splitnport()
1181+
self.assertEqual(str(cm.warning),
1182+
'urllib.parse.splitnport() is deprecated as of 3.7, '
1183+
'use urllib.parse.urlparse() instead')
1184+
1185+
def test_splitquery_deprecation(self):
1186+
with self.assertWarns(DeprecationWarning) as cm:
1187+
urllib.parse.splitquery()
1188+
self.assertEqual(str(cm.warning),
1189+
'urllib.parse.splitquery() is deprecated as of 3.7, '
1190+
'use urllib.parse.urlparse() instead')
1191+
1192+
def test_splittag_deprecation(self):
1193+
with self.assertWarns(DeprecationWarning) as cm:
1194+
urllib.parse.splittag()
1195+
self.assertEqual(str(cm.warning),
1196+
'urllib.parse.splittag() is deprecated as of 3.7, '
1197+
'use urllib.parse.urlparse() instead')
1198+
1199+
def test_splitattr_deprecation(self):
1200+
with self.assertWarns(DeprecationWarning) as cm:
1201+
urllib.parse.splitattr()
1202+
self.assertEqual(str(cm.warning),
1203+
'urllib.parse.splitattr() is deprecated as of 3.7, '
1204+
'use urllib.parse.urlparse() instead')
1205+
1206+
def test_splitvalue_deprecation(self):
1207+
with self.assertWarns(DeprecationWarning) as cm:
1208+
urllib.parse.splitvalue()
1209+
self.assertEqual(str(cm.warning),
1210+
'urllib.parse.splitvalue() is deprecated as of 3.7, '
1211+
'use urllib.parse.urlparse() instead')
1212+
1213+
def test_to_bytes_deprecation(self):
1214+
with self.assertWarns(DeprecationWarning) as cm:
1215+
urllib.parse.to_bytes()
1216+
self.assertEqual(str(cm.warning),
1217+
'urllib.parse.to_bytes() is deprecated as of 3.7')
1218+
1219+
def test_unwrap(self):
1220+
with self.assertWarns(DeprecationWarning) as cm:
1221+
urllib.parse.unwrap()
1222+
self.assertEqual(str(cm.warning),
1223+
'urllib.parse.unwrap() is deprecated as of 3.7')
1224+
1225+
11401226
if __name__ == "__main__":
11411227
unittest.main()

0 commit comments

Comments
 (0)