Skip to content

Commit 5d0fae0

Browse files
authored
Merge pull request #159 from natekspencer/dev
Refactor gRPC calls to reduce code
2 parents 326c6c3 + 1a1190c commit 5d0fae0

File tree

1 file changed

+47
-45
lines changed

1 file changed

+47
-45
lines changed

vivintpy/vivintskyapi.py

Lines changed: 47 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import grpc
1515
from aiohttp import ClientResponseError
1616
from aiohttp.client import _RequestContextManager
17+
from google.protobuf.message import Message # type: ignore
1718

1819
from .const import (
1920
AuthenticationResponse,
@@ -139,21 +140,18 @@ async def reboot_camera(
139140
self, panel_id: int, device_id: int, device_type: str
140141
) -> None:
141142
"""Reboot a camera."""
142-
creds = grpc.ssl_channel_credentials()
143-
assert (cookie := self._get_session_cookie())
144143

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(
148148
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
152150
),
153-
metadata=[("session", cookie.value)],
151+
metadata=metadata,
154152
)
155153

156-
_LOGGER.debug("Response received: %s", str(response))
154+
await self._send_grpc(_callback)
157155

158156
async def reboot_panel(self, panel_id: int) -> None:
159157
"""Reboot a panel."""
@@ -204,63 +202,54 @@ async def set_camera_as_doorbell_chime_extender(
204202
self, panel_id: int, device_id: int, state: bool
205203
) -> None:
206204
"""Set the camera to be used as a doorbell chime extender."""
207-
creds = grpc.ssl_channel_credentials()
208-
assert (cookie := self._get_session_cookie())
209205

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,
221216
)
222217

223-
_LOGGER.debug("Response received: %s", str(response))
218+
await self._send_grpc(_callback)
224219

225220
async def set_camera_privacy_mode(
226221
self, panel_id: int, device_id: int, state: bool
227222
) -> None:
228223
"""Set the camera privacy mode."""
229-
creds = grpc.ssl_channel_credentials()
230-
assert (cookie := self._get_session_cookie())
231224

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,
243233
)
244234

245-
_LOGGER.debug("Response received: %s", str(response))
235+
await self._send_grpc(_callback)
246236

247237
async def set_camera_deter_mode(
248238
self, panel_id: int, device_id: int, state: bool
249239
) -> None:
250240
"""Set the camera deter mode."""
251-
creds = grpc.ssl_channel_credentials()
252-
assert (cookie := self._get_session_cookie())
253241

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(
257246
beam_pb2.SetDeterOverrideRequest( # pylint: disable=no-member
258247
panel_id=panel_id, device_id=device_id, enabled=state
259248
),
260-
metadata=[("session", cookie.value)],
249+
metadata=metadata,
261250
)
262251

263-
_LOGGER.debug("Response received: %s", str(response))
252+
await self._send_grpc(_callback)
264253

265254
async def set_garage_door_state(
266255
self, panel_id: int, partition_id: int, device_id: int, state: int
@@ -551,3 +540,16 @@ async def __call(
551540
raise VivintSkyApiAuthenticationError(message)
552541
resp.raise_for_status()
553542
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

Comments
 (0)