Skip to content

Commit

Permalink
gh-104139: Add itms-services to uses_netloc urllib.parse. (#104312)
Browse files Browse the repository at this point in the history
Teach unsplit to retain the `"//"` when assembling `itms-services://?action=generate-bugs` style
[Apple Platform Deployment](https://support.apple.com/en-gb/guide/deployment/depce7cefc4d/web) URLs.
  • Loading branch information
gpshead authored May 9, 2023
1 parent ca95edf commit 82f789b
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 15 deletions.
33 changes: 19 additions & 14 deletions Lib/test/test_urlparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,20 +72,20 @@ class UrlParseTestCase(unittest.TestCase):

def checkRoundtrips(self, url, parsed, split):
result = urllib.parse.urlparse(url)
self.assertEqual(result, parsed)
self.assertSequenceEqual(result, parsed)
t = (result.scheme, result.netloc, result.path,
result.params, result.query, result.fragment)
self.assertEqual(t, parsed)
self.assertSequenceEqual(t, parsed)
# put it back together and it should be the same
result2 = urllib.parse.urlunparse(result)
self.assertEqual(result2, url)
self.assertEqual(result2, result.geturl())
self.assertSequenceEqual(result2, url)
self.assertSequenceEqual(result2, result.geturl())

# the result of geturl() is a fixpoint; we can always parse it
# again to get the same result:
result3 = urllib.parse.urlparse(result.geturl())
self.assertEqual(result3.geturl(), result.geturl())
self.assertEqual(result3, result)
self.assertSequenceEqual(result3, result)
self.assertEqual(result3.scheme, result.scheme)
self.assertEqual(result3.netloc, result.netloc)
self.assertEqual(result3.path, result.path)
Expand All @@ -99,18 +99,18 @@ def checkRoundtrips(self, url, parsed, split):

# check the roundtrip using urlsplit() as well
result = urllib.parse.urlsplit(url)
self.assertEqual(result, split)
self.assertSequenceEqual(result, split)
t = (result.scheme, result.netloc, result.path,
result.query, result.fragment)
self.assertEqual(t, split)
self.assertSequenceEqual(t, split)
result2 = urllib.parse.urlunsplit(result)
self.assertEqual(result2, url)
self.assertEqual(result2, result.geturl())
self.assertSequenceEqual(result2, url)
self.assertSequenceEqual(result2, result.geturl())

# check the fixpoint property of re-parsing the result of geturl()
result3 = urllib.parse.urlsplit(result.geturl())
self.assertEqual(result3.geturl(), result.geturl())
self.assertEqual(result3, result)
self.assertSequenceEqual(result3, result)
self.assertEqual(result3.scheme, result.scheme)
self.assertEqual(result3.netloc, result.netloc)
self.assertEqual(result3.path, result.path)
Expand Down Expand Up @@ -162,10 +162,15 @@ def test_roundtrips(self):
('svn+ssh', 'svn.zope.org', '/repos/main/ZConfig/trunk/',
'', '')),
('git+ssh://git@github.com/user/project.git',
('git+ssh', 'git@github.com','/user/project.git',
'','',''),
('git+ssh', 'git@github.com','/user/project.git',
'', '')),
('git+ssh', 'git@github.com','/user/project.git',
'','',''),
('git+ssh', 'git@github.com','/user/project.git',
'', '')),
('itms-services://?action=download-manifest&url=https://example.com/app',
('itms-services', '', '', '',
'action=download-manifest&url=https://example.com/app', ''),
('itms-services', '', '',
'action=download-manifest&url=https://example.com/app', '')),
]
def _encode(t):
return (t[0].encode('ascii'),
Expand Down
2 changes: 1 addition & 1 deletion Lib/urllib/parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
'imap', 'wais', 'file', 'mms', 'https', 'shttp',
'snews', 'prospero', 'rtsp', 'rtspu', 'rsync',
'svn', 'svn+ssh', 'sftp', 'nfs', 'git', 'git+ssh',
'ws', 'wss']
'ws', 'wss', 'itms-services']

uses_params = ['', 'ftp', 'hdl', 'prospero', 'http', 'imap',
'https', 'shttp', 'rtsp', 'rtspu', 'sip', 'sips',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Teach :func:`urllib.parse.unsplit` to retain the ``"//"`` when assembling
``itms-services://?action=generate-bugs`` style `Apple Platform Deployment
<https://support.apple.com/en-gb/guide/deployment/depce7cefc4d/web>`_ URLs.

0 comments on commit 82f789b

Please sign in to comment.