Skip to content

HTTP Utilities

async_is_connectable(url=AnyHttpUrl('https://www.google.com'), timeout=3, check_status=False) async

Check if the url is connectable.

Parameters:

Name Type Description Default
url AnyHttpUrl

URL to check. Defaults to 'https://www.google.com'.

AnyHttpUrl('https://www.google.com')
timeout int

Timeout in seconds. Defaults to 3.

3
check_status bool

Check HTTP status code (200). Defaults to False.

False
Raise

ValueError: If timeout is less than 1.

Returns:

Name Type Description
bool bool

True if connectable, False otherwise.

Source code in src/potato_util/http/_async.py
@validate_call
async def async_is_connectable(
    url: AnyHttpUrl = AnyHttpUrl("https://www.google.com"),
    timeout: int = 3,
    check_status: bool = False,
) -> bool:
    """Check if the url is connectable.

    Args:
        url          (AnyHttpUrl, optional): URL to check. Defaults to 'https://www.google.com'.
        timeout      (int       , optional): Timeout in seconds. Defaults to 3.
        check_status (bool      , optional): Check HTTP status code (200). Defaults to False.

    Raise:
        ValueError: If `timeout` is less than 1.

    Returns:
        bool: True if connectable, False otherwise.
    """

    if timeout < 1:
        raise ValueError(
            f"`timeout` argument value {timeout} is invalid, must be greater than 0!"
        )

    try:
        async with aiohttp.ClientSession() as _session:
            async with _session.get(str(url), timeout=timeout) as _response:
                if check_status:
                    return _response.status == 200
                return True
    except Exception:
        return False

get_http_status(status_code)

Get HTTP status code enum from integer value.

Parameters:

Name Type Description Default
status_code (int, required)

Status code for HTTP response: [100 <= status_code <= 599].

required

Raises:

Type Description
ValueError

If status code is not in range [100 <= status_code <= 599].

Returns:

Type Description
tuple[HTTPStatus, bool]

Tuple[HTTPStatus, bool]: Tuple of HTTP status code enum and boolean value if status code is known.

Source code in src/potato_util/http/_base.py
@validate_call
def get_http_status(status_code: int) -> tuple[HTTPStatus, bool]:
    """Get HTTP status code enum from integer value.

    Args:
        status_code (int, required): Status code for HTTP response: [100 <= status_code <= 599].

    Raises:
        ValueError: If status code is not in range [100 <= status_code <= 599].

    Returns:
        Tuple[HTTPStatus, bool]: Tuple of HTTP status code enum and boolean value if status code is known.
    """

    _http_status: HTTPStatus
    _is_known_status = False
    try:
        _http_status = HTTPStatus(status_code)
        _is_known_status = True
    except ValueError:
        if (100 <= status_code) and (status_code < 200):
            status_code = 100
        elif (200 <= status_code) and (status_code < 300):
            status_code = 200
        elif (300 <= status_code) and (status_code < 400):
            status_code = 304
        elif (400 <= status_code) and (status_code < 500):
            status_code = 400
        elif (500 <= status_code) and (status_code < 600):
            status_code = 500
        else:
            raise ValueError(
                f"`status_code` argument value '{status_code}' is invalid, must be in range 100-599!",
            )

        _http_status = HTTPStatus(status_code)

    return (_http_status, _is_known_status)

is_connectable(url=AnyHttpUrl('https://www.google.com'), timeout=3, check_status=False)

Check if the url is connectable.

Parameters:

Name Type Description Default
url AnyHttpUrl

URL to check. Defaults to 'https://www.google.com'.

AnyHttpUrl('https://www.google.com')
timeout int

Timeout in seconds. Defaults to 3.

3
check_status bool

Check HTTP status code (200). Defaults to False.

False
Raise

ValueError: If timeout is less than 1.

Returns:

Name Type Description
bool bool

True if connectable, False otherwise.

Source code in src/potato_util/http/_sync.py
@validate_call
def is_connectable(
    url: AnyHttpUrl = AnyHttpUrl("https://www.google.com"),
    timeout: int = 3,
    check_status: bool = False,
) -> bool:
    """Check if the url is connectable.

    Args:
        url          (AnyHttpUrl, optional): URL to check. Defaults to 'https://www.google.com'.
        timeout      (int       , optional): Timeout in seconds. Defaults to 3.
        check_status (bool      , optional): Check HTTP status code (200). Defaults to False.

    Raise:
        ValueError: If `timeout` is less than 1.

    Returns:
        bool: True if connectable, False otherwise.
    """

    if timeout < 1:
        raise ValueError(
            f"`timeout` argument value {timeout} is invalid, must be greater than 0!"
        )

    try:
        _response: HTTPResponse = request.urlopen(
            str(url), timeout=timeout
        )  # nosec B310
        if check_status:
            return _response.getcode() == 200
        return True
    except Exception:
        return False