2024-01-21 17:45:01 +00:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
2024-02-01 07:24:26 +00:00
|
|
|
import os
|
2024-07-09 03:08:30 +03:00
|
|
|
from typing import TYPE_CHECKING
|
2024-01-21 17:45:01 +00:00
|
|
|
from urllib.parse import urlparse
|
|
|
|
|
|
|
|
|
|
import charset_normalizer
|
2024-02-08 09:12:13 +03:00
|
|
|
|
2024-07-09 03:08:30 +03:00
|
|
|
if TYPE_CHECKING:
|
2024-07-09 03:35:36 +03:00
|
|
|
from typing_extensions import ParamSpec, TypeVar
|
|
|
|
|
|
|
|
|
|
T = TypeVar("T")
|
|
|
|
|
P = ParamSpec("P")
|
2024-01-21 17:45:01 +00:00
|
|
|
|
2024-02-01 07:24:26 +00:00
|
|
|
IS_DOCKER = os.getenv("IS_DOCKER") == "1"
|
|
|
|
|
|
2024-01-21 17:45:01 +00:00
|
|
|
|
2024-04-11 22:57:18 +03:00
|
|
|
def is_http_url(value: str, /) -> bool:
|
2024-01-21 17:45:01 +00:00
|
|
|
parsed_url = urlparse(value)
|
2024-04-11 22:57:18 +03:00
|
|
|
return bool(parsed_url.scheme in {"http", "https"} and parsed_url.netloc)
|
2024-01-21 17:45:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def bytes_decode(value: bytes, /) -> str:
|
|
|
|
|
return str(charset_normalizer.from_bytes(value)[0])
|