Source code for caspia.gateway_mock.services.lockmechanism

# pylint: disable=no-member
import logging

from caspia.meadow.services import LockMechanismBase, LockState
from caspia.toolbox.managed_task import managed_task

from .base import MockService

logger = logging.getLogger('mock-status')


[docs]class LockMechanism(MockService, LockMechanismBase): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._current_state = LockState.SECURED
[docs] async def characteristic_write(self, characteristic, value, **kwargs): if characteristic is self.target_state: self._current_state = LockState(value) await self.notify(self.target_state, value) await self.notify(self.state, value) if self._current_state == LockState.UNSECURED: self._secure_after_timeout.schedule(delay=3.0) else: self._secure_after_timeout.cancel() else: await super().characteristic_write(characteristic, value, **kwargs)
[docs] async def characteristic_read(self, characteristic, **kwargs): if characteristic is self.target_state or characteristic is self.state: return self._current_state.value else: return await super().characteristic_read(characteristic, **kwargs)
@managed_task() async def _secure_after_timeout(self): await self.target_state.write('secured')