forked from platypush/platypush
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
import time
|
|
|
|
from platypush.backend import Backend
|
|
from platypush.context import get_plugin
|
|
from platypush.plugins.stt import SttPlugin
|
|
|
|
|
|
class SttBackend(Backend):
|
|
"""
|
|
Base class for speech-to-text backends.
|
|
"""
|
|
|
|
def __init__(self, plugin_name: str, retry_sleep: float = 5.0, *args, **kwargs):
|
|
"""
|
|
:param plugin_name: Plugin name of the class that will be used for speech detection. Must be an instance of
|
|
:class:`platypush.plugins.stt.SttPlugin`.
|
|
:param retry_sleep: Number of seconds the backend will wait on failure before re-initializing the plugin
|
|
(default: 5 seconds).
|
|
"""
|
|
super().__init__(*args, **kwargs)
|
|
self.plugin_name = plugin_name
|
|
self.retry_sleep = retry_sleep
|
|
|
|
def run(self):
|
|
super().run()
|
|
self.logger.info('Starting {} speech-to-text backend'.format(self.__class__.__name__))
|
|
|
|
while not self.should_stop():
|
|
try:
|
|
plugin: SttPlugin = get_plugin(self.plugin_name)
|
|
with plugin:
|
|
# noinspection PyProtectedMember
|
|
plugin._detection_thread.join()
|
|
except Exception as e:
|
|
self.logger.exception(e)
|
|
self.logger.warning('Encountered an unexpected error, retrying in {} seconds'.format(self.retry_sleep))
|
|
time.sleep(self.retry_sleep)
|
|
|
|
|
|
# vim:sw=4:ts=4:et:
|