|
14 | 14 | import grpc
|
15 | 15 | from aiohttp import ClientResponseError
|
16 | 16 | from aiohttp.client import _RequestContextManager
|
| 17 | +from google.protobuf.message import Message # type: ignore |
17 | 18 |
|
18 | 19 | from .const import (
|
19 | 20 | AuthenticationResponse,
|
@@ -139,21 +140,18 @@ async def reboot_camera(
|
139 | 140 | self, panel_id: int, device_id: int, device_type: str
|
140 | 141 | ) -> None:
|
141 | 142 | """Reboot a camera."""
|
142 |
| - creds = grpc.ssl_channel_credentials() |
143 |
| - assert (cookie := self._get_session_cookie()) |
144 | 143 |
|
145 |
| - async with grpc.aio.secure_channel(GRPC_ENDPOINT, credentials=creds) as channel: |
146 |
| - stub: beam_pb2_grpc.BeamStub = beam_pb2_grpc.BeamStub(channel) # type: ignore |
147 |
| - response: beam_pb2.RebootCameraResponse = await stub.RebootCamera( |
| 144 | + async def _callback( |
| 145 | + stub: beam_pb2_grpc.BeamStub, metadata: list[tuple[str, str]] |
| 146 | + ) -> Message: |
| 147 | + return await stub.RebootCamera( |
148 | 148 | beam_pb2.RebootCameraRequest( # pylint: disable=no-member
|
149 |
| - panel_id=panel_id, |
150 |
| - device_id=device_id, |
151 |
| - device_type=device_type, |
| 149 | + panel_id=panel_id, device_id=device_id, device_type=device_type |
152 | 150 | ),
|
153 |
| - metadata=[("session", cookie.value)], |
| 151 | + metadata=metadata, |
154 | 152 | )
|
155 | 153 |
|
156 |
| - _LOGGER.debug("Response received: %s", str(response)) |
| 154 | + await self._send_grpc(_callback) |
157 | 155 |
|
158 | 156 | async def reboot_panel(self, panel_id: int) -> None:
|
159 | 157 | """Reboot a panel."""
|
@@ -204,63 +202,54 @@ async def set_camera_as_doorbell_chime_extender(
|
204 | 202 | self, panel_id: int, device_id: int, state: bool
|
205 | 203 | ) -> None:
|
206 | 204 | """Set the camera to be used as a doorbell chime extender."""
|
207 |
| - creds = grpc.ssl_channel_credentials() |
208 |
| - assert (cookie := self._get_session_cookie()) |
209 | 205 |
|
210 |
| - async with grpc.aio.secure_channel(GRPC_ENDPOINT, credentials=creds) as channel: |
211 |
| - stub: beam_pb2_grpc.BeamStub = beam_pb2_grpc.BeamStub(channel) # type: ignore |
212 |
| - response: beam_pb2.SetUseAsDoorbellChimeExtenderResponse = ( |
213 |
| - await stub.SetUseAsDoorbellChimeExtender( |
214 |
| - beam_pb2.SetUseAsDoorbellChimeExtenderRequest( # pylint: disable=no-member |
215 |
| - panel_id=panel_id, |
216 |
| - device_id=device_id, |
217 |
| - use_as_doorbell_chime_extender=state, |
218 |
| - ), |
219 |
| - metadata=[("session", cookie.value)], |
220 |
| - ) |
| 206 | + async def _callback( |
| 207 | + stub: beam_pb2_grpc.BeamStub, metadata: list[tuple[str, str]] |
| 208 | + ) -> Message: |
| 209 | + return await stub.SetUseAsDoorbellChimeExtender( |
| 210 | + beam_pb2.SetUseAsDoorbellChimeExtenderRequest( # pylint: disable=no-member |
| 211 | + panel_id=panel_id, |
| 212 | + device_id=device_id, |
| 213 | + use_as_doorbell_chime_extender=state, |
| 214 | + ), |
| 215 | + metadata=metadata, |
221 | 216 | )
|
222 | 217 |
|
223 |
| - _LOGGER.debug("Response received: %s", str(response)) |
| 218 | + await self._send_grpc(_callback) |
224 | 219 |
|
225 | 220 | async def set_camera_privacy_mode(
|
226 | 221 | self, panel_id: int, device_id: int, state: bool
|
227 | 222 | ) -> None:
|
228 | 223 | """Set the camera privacy mode."""
|
229 |
| - creds = grpc.ssl_channel_credentials() |
230 |
| - assert (cookie := self._get_session_cookie()) |
231 | 224 |
|
232 |
| - async with grpc.aio.secure_channel(GRPC_ENDPOINT, credentials=creds) as channel: |
233 |
| - stub: beam_pb2_grpc.BeamStub = beam_pb2_grpc.BeamStub(channel) # type: ignore |
234 |
| - response: beam_pb2.SetCameraPrivacyModeResponse = ( |
235 |
| - await stub.SetCameraPrivacyMode( |
236 |
| - beam_pb2.SetCameraPrivacyModeRequest( # pylint: disable=no-member |
237 |
| - panel_id=panel_id, |
238 |
| - device_id=device_id, |
239 |
| - privacy_mode=state, |
240 |
| - ), |
241 |
| - metadata=[("session", cookie.value)], |
242 |
| - ) |
| 225 | + async def _callback( |
| 226 | + stub: beam_pb2_grpc.BeamStub, metadata: list[tuple[str, str]] |
| 227 | + ) -> Message: |
| 228 | + return await stub.SetCameraPrivacyMode( |
| 229 | + beam_pb2.SetCameraPrivacyModeRequest( # pylint: disable=no-member |
| 230 | + panel_id=panel_id, device_id=device_id, privacy_mode=state |
| 231 | + ), |
| 232 | + metadata=metadata, |
243 | 233 | )
|
244 | 234 |
|
245 |
| - _LOGGER.debug("Response received: %s", str(response)) |
| 235 | + await self._send_grpc(_callback) |
246 | 236 |
|
247 | 237 | async def set_camera_deter_mode(
|
248 | 238 | self, panel_id: int, device_id: int, state: bool
|
249 | 239 | ) -> None:
|
250 | 240 | """Set the camera deter mode."""
|
251 |
| - creds = grpc.ssl_channel_credentials() |
252 |
| - assert (cookie := self._get_session_cookie()) |
253 | 241 |
|
254 |
| - async with grpc.aio.secure_channel(GRPC_ENDPOINT, credentials=creds) as channel: |
255 |
| - stub: beam_pb2_grpc.BeamStub = beam_pb2_grpc.BeamStub(channel) # type: ignore |
256 |
| - response: beam_pb2.SetDeterOverrideResponse = await stub.SetDeterOverride( |
| 242 | + async def _callback( |
| 243 | + stub: beam_pb2_grpc.BeamStub, metadata: list[tuple[str, str]] |
| 244 | + ) -> Message: |
| 245 | + return await stub.SetDeterOverride( |
257 | 246 | beam_pb2.SetDeterOverrideRequest( # pylint: disable=no-member
|
258 | 247 | panel_id=panel_id, device_id=device_id, enabled=state
|
259 | 248 | ),
|
260 |
| - metadata=[("session", cookie.value)], |
| 249 | + metadata=metadata, |
261 | 250 | )
|
262 | 251 |
|
263 |
| - _LOGGER.debug("Response received: %s", str(response)) |
| 252 | + await self._send_grpc(_callback) |
264 | 253 |
|
265 | 254 | async def set_garage_door_state(
|
266 | 255 | self, panel_id: int, partition_id: int, device_id: int, state: int
|
@@ -551,3 +540,16 @@ async def __call(
|
551 | 540 | raise VivintSkyApiAuthenticationError(message)
|
552 | 541 | resp.raise_for_status()
|
553 | 542 | return None
|
| 543 | + |
| 544 | + async def _send_grpc( |
| 545 | + self, |
| 546 | + callback: Callable[[beam_pb2_grpc.BeamStub, list[tuple[str, str]]], Message], |
| 547 | + ) -> None: |
| 548 | + """Send gRPC.""" |
| 549 | + creds = grpc.ssl_channel_credentials() |
| 550 | + assert (cookie := self._get_session_cookie()) |
| 551 | + |
| 552 | + async with grpc.aio.secure_channel(GRPC_ENDPOINT, credentials=creds) as channel: |
| 553 | + stub: beam_pb2_grpc.BeamStub = beam_pb2_grpc.BeamStub(channel) # type: ignore |
| 554 | + response = await callback(stub, [("session", cookie.value)]) |
| 555 | + _LOGGER.debug("Response received: %s", str(response)) |
0 commit comments