patch: `domain` & `url` modules by nandgator · Pull Request #339 · python-validators/validators
Expand Up
@@ -38,7 +38,14 @@ def _validate_scheme(value: str):
"""Validate scheme."""
# More schemes will be considered later.
return (
value in {"ftp", "ftps", "git", "http", "https", "rtsp", "sftp", "ssh", "telnet"}
value
# fmt: off
in {
"ftp", "ftps", "git", "http", "https",
"rtmp", "rtmps", "rtsp", "sftp",
"ssh", "telnet",
}
# fmt: on
if value
else False
)
Expand Down
Expand Up
@@ -112,8 +119,18 @@ def _validate_optionals(path: str, query: str, fragment: str, strict_query: bool
optional_segments = True
if path:
optional_segments &= bool(_path_regex().match(path))
if query and parse_qs(query, strict_parsing=strict_query):
optional_segments &= True
try:
if (
query
# ref: https://github.com/python/cpython/issues/117109
and parse_qs(query, strict_parsing=strict_query, separator="&")
and parse_qs(query, strict_parsing=strict_query, separator=";")
):
optional_segments &= True
except TypeError:
# for Python < v3.9.2 (official v3.10)
if query and parse_qs(query, strict_parsing=strict_query):
optional_segments &= True
if fragment:
# See RFC3986 Section 3.5 Fragment for allowed characters
optional_segments &= bool(re.fullmatch(r"[0-9a-zA-Z?/:@\-._~%!$&'()*+,;=]*", fragment))
Expand Down