# Path: src/amcrest/exceptions.py
# class CommError(AmcrestError):
#     """A communication error occurred."""
# 
# Path: src/amcrest/http.py
# _LOGGER = logging.getLogger(__name__)
# _KEEPALIVE_OPTS = HTTPConnection.default_socket_options + [
#     (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),
# ]
# class SOHTTPAdapter(HTTPAdapter):
# class Http:
#     def __init__(self, *args, **kwargs) -> None:
#     def init_poolmanager(self, *args, **kwargs) -> None:
#     def __init__(
#         self,
#         host: str,
#         port: int,
#         user: str,
#         password: str,
#         *,
#         verbose: bool = True,
#         protocol: str = "http",
#         ssl_verify: bool = True,
#         retries_connection: Optional[int] = None,
#         timeout_protocol: TimeoutT = None,
#     ) -> None:
#     def _generate_token(self) -> None:
#     async def _async_generate_token(self) -> None:
#     def __repr__(self) -> str:
#     def as_dict(self) -> dict:
#     def __base_url(self, param: str = "") -> str:
#     def get_base_url(self) -> str:
#     def command(self, *args, **kwargs) -> requests.Response:
#     async def async_command(self, *args, **kwargs) -> httpx.Response:
#     async def async_stream_command(
#         self, *args, **kwargs
#     ) -> AsyncIterator[httpx.Response]:
#     def _command(
#         self,
#         cmd: str,
#         retries: Optional[int] = None,
#         timeout_cmd: TimeoutT = None,
#         stream: bool = False,
#     ) -> requests.Response:
#     async def _async_command(
#         self,
#         cmd: str,
#         retries: Optional[int] = None,
#         timeout_cmd: TimeoutT = None,
#     ) -> httpx.Response:
#     async def _async_stream_command(
#         self,
#         cmd: str,
#         timeout_cmd: TimeoutT = None,
#     ) -> AsyncIterator[httpx.Response]:
#     def command_audio(
#         self,
#         cmd: str,
#         file_content,
#         http_header,
#         timeout: TimeoutT = None,
#     ) -> None:
#     def _get_config(self, config_name: str) -> str:
#     async def _async_get_config(self, config_name: str) -> str:
#     def _magic_box(self, action: str) -> str:
#     async def _async_magic_box(self, action: str) -> str:
# 
# Path: src/amcrest/utils.py
# def pretty(value: str, delimiter: str = "=") -> str:
#     """Format string key=value."""
#     return value.strip().rpartition(delimiter)[2]


import logging
import re
from typing import (
    Any,
    AsyncIterator,
    AsyncIterable,
    Dict,
    Iterator,
    Iterable,
    List,
    Optional,
    Tuple,
)
from requests import RequestException
from urllib3.exceptions import HTTPError
from .exceptions import CommError
from .http import Http, TimeoutT
from .utils import pretty
    def is_human_detected(self) -> List[int]:
        return self.event_channels_happened("SmartMotionHuman")

    @property
    async def async_is_human_detected(self) -> List[int]:
        return await self.async_event_channels_happened("SmartMotionHuman")

    @property
    def is_vehicle_detected(self) -> List[int]:
        return self.event_channels_happened("SmartMotionVehicle")

    @property
    async def async_is_vehicle_detected(self) -> List[int]:
        return await self.async_event_channels_happened("SmartMotionVehicle")

    @property
    def event_management(self) -> str:
        ret = self.command("eventManager.cgi?action=getCaps")
        return ret.content.decode()

    @property
    async def async_event_management(self) -> str:
        ret = await self.async_command("eventManager.cgi?action=getCaps")
        return ret.content.decode()

    def event_stream(
        self,
        eventcodes: str,
        *,
        retries: Optional[int] = None,

# Path: src/amcrest/exceptions.py
# class CommError(AmcrestError):
#     """A communication error occurred."""
# 
# Path: src/amcrest/http.py
# _LOGGER = logging.getLogger(__name__)
# _KEEPALIVE_OPTS = HTTPConnection.default_socket_options + [
#     (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),
# ]
# class SOHTTPAdapter(HTTPAdapter):
# class Http:
#     def __init__(self, *args, **kwargs) -> None:
#     def init_poolmanager(self, *args, **kwargs) -> None:
#     def __init__(
#         self,
#         host: str,
#         port: int,
#         user: str,
#         password: str,
#         *,
#         verbose: bool = True,
#         protocol: str = "http",
#         ssl_verify: bool = True,
#         retries_connection: Optional[int] = None,
#         timeout_protocol: TimeoutT = None,
#     ) -> None:
#     def _generate_token(self) -> None:
#     async def _async_generate_token(self) -> None:
#     def __repr__(self) -> str:
#     def as_dict(self) -> dict:
#     def __base_url(self, param: str = "") -> str:
#     def get_base_url(self) -> str:
#     def command(self, *args, **kwargs) -> requests.Response:
#     async def async_command(self, *args, **kwargs) -> httpx.Response:
#     async def async_stream_command(
#         self, *args, **kwargs
#     ) -> AsyncIterator[httpx.Response]:
#     def _command(
#         self,
#         cmd: str,
#         retries: Optional[int] = None,
#         timeout_cmd: TimeoutT = None,
#         stream: bool = False,
#     ) -> requests.Response:
#     async def _async_command(
#         self,
#         cmd: str,
#         retries: Optional[int] = None,
#         timeout_cmd: TimeoutT = None,
#     ) -> httpx.Response:
#     async def _async_stream_command(
#         self,
#         cmd: str,
#         timeout_cmd: TimeoutT = None,
#     ) -> AsyncIterator[httpx.Response]:
#     def command_audio(
#         self,
#         cmd: str,
#         file_content,
#         http_header,
#         timeout: TimeoutT = None,
#     ) -> None:
#     def _get_config(self, config_name: str) -> str:
#     async def _async_get_config(self, config_name: str) -> str:
#     def _magic_box(self, action: str) -> str:
#     async def _async_magic_box(self, action: str) -> str:
# 
# Path: src/amcrest/utils.py
# def pretty(value: str, delimiter: str = "=") -> str:
#     """Format string key=value."""
#     return value.strip().rpartition(delimiter)[2]


# Path: src/amcrest/event.py
import logging
import re
from typing import (
    Any,
    AsyncIterator,
    AsyncIterable,
    Dict,
    Iterator,
    Iterable,
    List,
    Optional,
    Tuple,
)
from requests import RequestException
from urllib3.exceptions import HTTPError
from .exceptions import CommError
from .http import Http, TimeoutT
from .utils import pretty

    def is_human_detected(self) -> List[int]:
        return self.event_channels_happened("SmartMotionHuman")

    @property
    async def async_is_human_detected(self) -> List[int]:
        return await self.async_event_channels_happened("SmartMotionHuman")

    @property
    def is_vehicle_detected(self) -> List[int]:
        return self.event_channels_happened("SmartMotionVehicle")

    @property
    async def async_is_vehicle_detected(self) -> List[int]:
        return await self.async_event_channels_happened("SmartMotionVehicle")

    @property
    def event_management(self) -> str:
        ret = self.command("eventManager.cgi?action=getCaps")
        return ret.content.decode()

    @property
    async def async_event_management(self) -> str:
        ret = await self.async_command("eventManager.cgi?action=getCaps")
        return ret.content.decode()

    def event_stream(
        self,
        eventcodes: str,
        *,
        retries: Optional[int] = None,

        timeout_cmd: TimeoutT = None,