Skip to content

Commit 57f6ef4

Browse files
author
david.castro
committed
Preserve Unicode in relative IRI path serialization
1 parent 978f2e6 commit 57f6ef4

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

‎src/hyperlink/_url.py‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,9 @@ def _encode_path_parts(
333333
for part in text_parts
334334
]
335335
else:
336-
encoded_parts = [_encode_schemeless_path_part(text_parts[0])]
336+
encoded_parts = [
337+
_encode_schemeless_path_part(text_parts[0], maximal=maximal)
338+
]
337339
encoded_parts.extend(
338340
[
339341
_encode_path_part(part, maximal=maximal) if part else part

‎src/hyperlink/test/test_url.py‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1344,6 +1344,16 @@ def test_schemeless_path(self):
13441344
u6 = URL.from_text(u5.to_text()).to_uri()
13451345
assert u5 == u6 # colons stay decoded bc they're not in the first seg
13461346

1347+
def test_schemeless_iri_path(self):
1348+
# type: () -> None
1349+
"""Relative IRI paths preserve Unicode while escaping delimiters."""
1350+
url = URL(path=("café:menu", "next"))
1351+
iri_text = "café%3Amenu/next"
1352+
uri_text = "caf%C3%A9%3Amenu/next"
1353+
assert url.to_text() == iri_text
1354+
assert url.to_uri().to_text() == uri_text
1355+
assert URL.from_text(uri_text).to_iri().to_text() == iri_text
1356+
13471357
def test_emoji_domain(self):
13481358
# type: () -> None
13491359
"See issue #7, affecting only narrow builds (2.6-3.3)"

0 commit comments

Comments
 (0)