Skip to content

Commit

Permalink
rfc3986 - default port
Browse files Browse the repository at this point in the history
  • Loading branch information
commonism committed Jul 3, 2024
1 parent d8b8def commit f60c4db
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 14 deletions.
3 changes: 2 additions & 1 deletion tests/test_url.py
Original file line number Diff line number Diff line change
Expand Up @@ -1338,6 +1338,7 @@ def test_is_default_port_for_absolute_url_without_port():
def test_is_default_port_for_absolute_url_with_default_port():
url = URL("http://example.com:80")
assert url.is_default_port()
assert str(url) == "http://example.com"


def test_is_default_port_for_absolute_url_with_nondefault_port():
Expand Down Expand Up @@ -1548,7 +1549,7 @@ def test_parent_for_empty_url():

def test_empty_value_for_query():
url = URL("http://example.com/path").with_query({"a": ""})
assert str(url) == "http://example.com/path?a="
assert str(url) == "http://example.com/path?a"


def test_none_value_for_query():
Expand Down
32 changes: 19 additions & 13 deletions yarl/_url.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,16 @@ def __str__(self):
val = self._val
if not val.path and self.is_absolute() and (val.query or val.fragment):
val = val._replace(path="/")
if (port := self._get_port()) is None:
val = val._replace(
netloc=self._make_netloc(
self.raw_user,
self.raw_password,
self.raw_host,
port,
encode_host=False,
)
)
return urlunsplit(val)

def __repr__(self):
Expand Down Expand Up @@ -437,19 +447,17 @@ def raw_authority(self):
return self._val.netloc

def _get_port(self):
"""Port or "" if default port"""
"""Port or None if default port"""
port = self.port
if self.scheme:
port = DEFAULT_PORTS.get(self.scheme, -1)
if port == self.port:
port = ""
elif port == -1:
p = DEFAULT_PORTS.get(self.scheme)
if p == self.port:
port = None
elif p is None:
with suppress(OSError):
port = socket.getservbyname(self.scheme)
if port == self.port:
port = ""
else:
port = self.port
p = socket.getservbyname(self.scheme)
if p == self.port:
port = None
return port

@cached_property
Expand Down Expand Up @@ -744,9 +752,7 @@ def _make_child(self, paths, encoded=False):
f"Appending path {path!r} starting from slash is forbidden"
)
path = path if encoded else self._PATH_QUOTER(path)
segments = [
segment for segment in reversed(path.split("/")) if segment != "."
]
segments = list(reversed(path.split("/")))
if not segments:
continue
# remove trailing empty segment for all but the last path
Expand Down

0 comments on commit f60c4db

Please sign in to comment.