# 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')