Skip to content

Commit

Permalink
remove FORCE_RTSP_PORT checkbox and fix rtsp_port_forced translation
Browse files Browse the repository at this point in the history
  • Loading branch information
lebretr committed Nov 23, 2024
1 parent f8888cb commit 9706db6
Show file tree
Hide file tree
Showing 13 changed files with 36 additions and 30 deletions.
5 changes: 2 additions & 3 deletions custom_components/hikvision_next/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, CONF_VERIFY_SSL

from . import HikvisionConfigEntry
from .const import CONF_ALARM_SERVER_HOST, CONF_SET_ALARM_SERVER, DOMAIN, RTSP_PORT_FORCED, FORCE_RTSP_PORT
from .const import CONF_ALARM_SERVER_HOST, CONF_SET_ALARM_SERVER, DOMAIN, RTSP_PORT_FORCED
from .hikvision_device import HikvisionDevice
from .isapi import ISAPIForbiddenError, ISAPIUnauthorizedError

Expand All @@ -39,8 +39,7 @@ async def get_schema(self, user_input: dict[str, Any]):
vol.Required(CONF_USERNAME): str,
vol.Required(CONF_PASSWORD): str,
vol.Optional(CONF_VERIFY_SSL, default=True): bool,
vol.Required(FORCE_RTSP_PORT, default= False): bool,
vol.Optional(RTSP_PORT_FORCED, default=554): int,
vol.Optional(RTSP_PORT_FORCED): vol.And(int, vol.Range(min=1)),
vol.Required(CONF_SET_ALARM_SERVER, default=True): bool,
vol.Required(CONF_ALARM_SERVER_HOST): str,
}
Expand Down
1 change: 0 additions & 1 deletion custom_components/hikvision_next/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

DOMAIN: Final = "hikvision_next"

FORCE_RTSP_PORT: Final = "force_rtsp_port"
RTSP_PORT_FORCED: Final = "rtsp_port_forced"
CONF_SET_ALARM_SERVER: Final = "set_alarm_server"
CONF_ALARM_SERVER_HOST: Final = "alarm_server"
Expand Down
4 changes: 1 addition & 3 deletions custom_components/hikvision_next/hikvision_device.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
from homeassistant.util import slugify

from .const import (
FORCE_RTSP_PORT,
RTSP_PORT_FORCED,
ALARM_SERVER_PATH,
CONF_ALARM_SERVER_HOST,
Expand Down Expand Up @@ -61,10 +60,9 @@ def __init__(
username = config[CONF_USERNAME]
password = config[CONF_PASSWORD]
varify_ssl = config.get(CONF_VERIFY_SSL, True)
force_rtsp_port = config.get(FORCE_RTSP_PORT, False)
rtsp_port_forced = config.get(RTSP_PORT_FORCED, None)
session = get_async_client(hass, varify_ssl)
super().__init__(host, username, password, force_rtsp_port, rtsp_port_forced, session)
super().__init__(host, username, password, rtsp_port_forced, session)

self.events_info: list[EventInfo] = []

Expand Down
4 changes: 1 addition & 3 deletions custom_components/hikvision_next/isapi/isapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ def __init__(
host: str,
username: str,
password: str,
force_rtsp_port: bool = False,
rtsp_port_forced: int = None,
session: httpx.AsyncClient = None,
) -> None:
Expand All @@ -71,7 +70,6 @@ def __init__(
self._session = session
self._auth_method: httpx._auth.Auth = None

self.force_rtsp_port = force_rtsp_port
self.rtsp_port_forced=rtsp_port_forced

self.device_info = ISAPIDeviceInfo()
Expand Down Expand Up @@ -216,7 +214,7 @@ async def get_protocols(self):
)

for item in protocols:
if self.force_rtsp_port:
if self.rtsp_port_forced:
self.protocols.rtsp_port = str(self.rtsp_port_forced)
break
else:
Expand Down
3 changes: 1 addition & 2 deletions custom_components/hikvision_next/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
"password": "Password",
"username": "Username",
"verify_ssl": "Verify Hikvision device SSL certificate",
"set_rtsp_port": "Force RTSP port (if accessing the NVR/Camera through a router with port forwarding)",
"rtsp_port": "RTSP Port of NVR or Camera",
"rtsp_port_forced": "RTSP Port of NVR or Camera (Optional)",
"set_alarm_server": "Set notifications host using following address:",
"alarm_server": "Home Assistant address accessible by Hikvison device"
}
Expand Down
3 changes: 1 addition & 2 deletions custom_components/hikvision_next/translations/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"host": "URL",
"password": "Mot de passe",
"username": "Nom d'utilisateur",
"force_rtsp_port": "Force RTSP port (if accessing the NVR/Camera through a router with port forwarding)",
"rtsp_port_forced": "RTSP Port of NVR or Camera",
"rtsp_port_forced": "Port RTSP du NVR ou de la Caméra (Facultatif)",
"set_alarm_server": "Définir le serveur d'alarme à l'aide l'adresse suivante :",
"alarm_server": "Adresse d'Home Assistant accessible par l'appareil Hikvision"
}
Expand Down
3 changes: 1 addition & 2 deletions custom_components/hikvision_next/translations/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"host": "URL",
"password": "Password",
"username": "Username",
"set_rtsp_port": "Forza la porta RTSP (se si accede all'NVR/telecamera tramite un router con inoltro delle porte)",
"rtsp_port": "Porta RTSP di NVR o telecamera",
"rtsp_port_forced": "Porta RTSP per NVR o telecamera (opzionale)",
"set_alarm_server": "Indirizzo del server di ricezione degli allarmi:",
"alarm_server": "indirizzo di Home Assistant accessibile dal dispositivo Hikvison"
}
Expand Down
3 changes: 1 addition & 2 deletions custom_components/hikvision_next/translations/pl.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@
"host": "URL",
"password": "Hasło",
"username": "Nazwa użytkownika",
"set_rtsp_port": "Wymuś port RTSP (jeśli uzyskujesz dostęp do NVR/kamery przez router z przekierowaniem portów)",
"rtsp_port": "Port RTSP NVR lub kamery",
"rtsp_port_forced": "Port NVR lub kamery RTSP (opcjonalnie)",
"verify_ssl": "Zweryfikuj certyfikat SSL urządzenia Hikvision",
"set_alarm_server": "Ustaw host powiadomień używając następującego adresu:",
"alarm_server": "Adres Home Assistant dostępny dla urządzenia Hikvision"
Expand Down
3 changes: 1 addition & 2 deletions custom_components/hikvision_next/translations/pt-BR.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"host": "URL",
"password": "Senha",
"username": "Nome de usuário",
"set_rtsp_port": "Forçar porta RTSP (se estiver acessando o NVR/câmera por meio de um roteador com encaminhamento de porta)",
"rtsp_port": "Porta RTSP do NVR ou câmera",
"rtsp_port_forced": "Porta NVR ou câmera RTSP (opcional)",
"set_alarm_server": "Defina o servidor de alarme usando o seguinte endereço:",
"alarm_server": "Endereço do Home Assistant acessível pelo dispositivo Hikvison"
}
Expand Down
3 changes: 1 addition & 2 deletions custom_components/hikvision_next/translations/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"host": "Link",
"password": "Password",
"username": "Utilizador",
"set_rtsp_port": "Forçar porta RTSP (se estiver a aceder ao NVR/Câmara através de um router com encaminhamento de porta)",
"rtsp_port": "Porta RTSP de NVR ou câmara",
"rtsp_port_forced": "Porta NVR ou câmara RTSP (opcional)",
"set_alarm_server": "Sefinir um alarme usando o seguinte endereço:",
"alarm_server": "Home Assistant endreço é acessivel pelo Hikvison device?"
}
Expand Down
3 changes: 1 addition & 2 deletions custom_components/hikvision_next/translations/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"host": "URL",
"password": "Пароль",
"username": "Имя пользователя",
"set_rtsp_port": "Принудительный порт RTSP (при доступе к NVR/камере через маршрутизатор с переадресацией портов)",
"rtsp_port": "Порт RTSP NVR или камеры",
"rtsp_port_forced": "Порт NVR или камеры RTSP (опционально)",
"set_alarm_server": "Установить сервер тревоги используя следующий адрес:",
"alarm_server": "Home Assistant адрес, доступный Hikvison устройству"
}
Expand Down
7 changes: 2 additions & 5 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import pytest
import respx
import xmltodict
from custom_components.hikvision_next.const import DOMAIN, CONF_SET_ALARM_SERVER, CONF_ALARM_SERVER_HOST, FORCE_RTSP_PORT, RTSP_PORT_FORCED
from custom_components.hikvision_next.const import DOMAIN, CONF_SET_ALARM_SERVER, CONF_ALARM_SERVER_HOST, RTSP_PORT_FORCED
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, CONF_VERIFY_SSL
from pytest_homeassistant_custom_component.common import MockConfigEntry
from custom_components.hikvision_next.isapi import ISAPIClient
Expand All @@ -15,9 +15,7 @@
TEST_CLIENT = {
CONF_HOST: TEST_HOST,
CONF_USERNAME: "u1",
CONF_PASSWORD: "***",
FORCE_RTSP_PORT: False,
RTSP_PORT_FORCED: 554,
CONF_PASSWORD: "***"
}

TEST_CONFIG = {**TEST_CLIENT, CONF_VERIFY_SSL: True, CONF_SET_ALARM_SERVER: False, CONF_ALARM_SERVER_HOST: ""}
Expand All @@ -30,7 +28,6 @@
TEST_CONFIG_OUTSIDE_NETWORK = {
**TEST_CONFIG,
CONF_HOST: "https://address.domain",
FORCE_RTSP_PORT: True,
RTSP_PORT_FORCED: 5151,
}

Expand Down
24 changes: 23 additions & 1 deletion tests/test_config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from homeassistant.data_entry_flow import FlowResultType
from homeassistant.config_entries import SOURCE_USER, ConfigEntryState
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, CONF_VERIFY_SSL
from tests.conftest import TEST_CONFIG, TEST_HOST, load_fixture, mock_endpoint
from tests.conftest import TEST_CONFIG, TEST_HOST, TEST_CONFIG_OUTSIDE_NETWORK, load_fixture, mock_endpoint
from homeassistant.core import HomeAssistant
from pytest_homeassistant_custom_component.common import MockConfigEntry

Expand Down Expand Up @@ -110,6 +110,28 @@ async def test_user_input_validation(hass, mock_isapi_device):
assert result["data"] == TEST_CONFIG


@pytest.mark.parametrize("mock_isapi_device", ["DS-2CD2386G2-IU"], indirect=True)
async def test_user_input_validation_with_rtsp_port(hass, mock_isapi_device):
"""Test a successful config flow."""

result = await hass.config_entries.flow.async_init(DOMAIN, context={"source": SOURCE_USER})

assert result["type"] == FlowResultType.FORM
assert result["step_id"] == "user"

user_input = {
**TEST_CONFIG_OUTSIDE_NETWORK,
CONF_HOST: TEST_HOST,
}
result = await hass.config_entries.flow.async_configure(result["flow_id"], user_input=user_input)

assert result["type"] == FlowResultType.CREATE_ENTRY
assert result["data"] == {
**TEST_CONFIG_OUTSIDE_NETWORK,
CONF_HOST: TEST_HOST,
}


@respx.mock
@pytest.mark.parametrize("init_integration", ["DS-2CD2386G2-IU"], indirect=True)
async def test_reconfiguration(hass: HomeAssistant, init_integration: MockConfigEntry) -> None:
Expand Down

0 comments on commit 9706db6

Please sign in to comment.