|
Server : LiteSpeed System : Linux srv104790275 5.15.0-161-generic #171-Ubuntu SMP Sat Oct 11 08:17:01 UTC 2025 x86_64 User : dewac4139 ( 1077) PHP Version : 8.0.30 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/local/CyberPanel/lib/python3.10/site-packages/tldextract/ |
Upload File : |
"""tldextract helpers for testing and fetching remote resources."""
from __future__ import annotations
import re
from ipaddress import AddressValueError, IPv6Address
from urllib.parse import scheme_chars
IP_RE = re.compile(
r"^(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)"
r"{3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$",
re.ASCII,
)
scheme_chars_set = set(scheme_chars)
def lenient_netloc(url: str) -> str:
"""Extract the netloc of a URL-like string.
Similar to the netloc attribute returned by
urllib.parse.{urlparse,urlsplit}, but extract more leniently, without
raising errors.
"""
after_userinfo = (
_schemeless_url(url)
.partition("/")[0]
.partition("?")[0]
.partition("#")[0]
.rpartition("@")[-1]
)
if after_userinfo and after_userinfo[0] == "[":
maybe_ipv6 = after_userinfo.partition("]")
if maybe_ipv6[1] == "]":
return f"{maybe_ipv6[0]}]"
hostname = after_userinfo.partition(":")[0].strip()
without_root_label = hostname.rstrip(".\u3002\uff0e\uff61")
return without_root_label
def _schemeless_url(url: str) -> str:
double_slashes_start = url.find("//")
if double_slashes_start == 0:
return url[2:]
if (
double_slashes_start < 2
or not url[double_slashes_start - 1] == ":"
or set(url[: double_slashes_start - 1]) - scheme_chars_set
):
return url
return url[double_slashes_start + 2 :]
def looks_like_ip(maybe_ip: str) -> bool:
"""Check whether the given str looks like an IPv4 address."""
if not maybe_ip[0].isdigit():
return False
return IP_RE.fullmatch(maybe_ip) is not None
def looks_like_ipv6(maybe_ip: str) -> bool:
"""Check whether the given str looks like an IPv6 address."""
try:
IPv6Address(maybe_ip)
except AddressValueError:
return False
return True