From 1ea8badd59c67b8ad944af03f1c7428c1932a530 Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Fri, 22 Dec 2017 10:43:43 +0100 Subject: [PATCH] Assistant v.0.1 --- platypush/backend/assistant/__init__.py | 0 .../backend/assistant/google/__init__.py | 34 +++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 platypush/backend/assistant/__init__.py diff --git a/platypush/backend/assistant/__init__.py b/platypush/backend/assistant/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/platypush/backend/assistant/google/__init__.py b/platypush/backend/assistant/google/__init__.py index 8e544ee47..95d183b7b 100644 --- a/platypush/backend/assistant/google/__init__.py +++ b/platypush/backend/assistant/google/__init__.py @@ -1,6 +1,7 @@ import logging import json import os +import subprocess import time import google.oauth2.credentials @@ -17,26 +18,45 @@ class AssistantGoogleBackend(Backend): def __init__(self, credentials_file=os.path.join( os.path.expanduser('~/.config'), - 'google-oauthlib-tool', 'credentials.json') , **kwargs): + 'google-oauthlib-tool', 'credentials.json'), + on_conversation_start=None, on_conversation_end=None, **kwargs): """ Params: credentials_file -- Path to the Google OAuth credentials file - (default: ~/.config/google-oauthlib-tool/credentials.json) """ + (default: ~/.config/google-oauthlib-tool/credentials.json) + on_conversation_start: Custom shell command to execute when a + conversation starts (default: none) + on_conversation_end: Custom shell command to execute when a + conversation ends (default: none) + """ super().__init__(**kwargs) self.credentials_file = credentials_file + self.on_conversation_start = on_conversation_start + self.on_conversation_end = on_conversation_end - with open(args.credentials, 'r') as f: + with open(self.credentials_file, 'r') as f: self.credentials = google.oauth2.credentials.Credentials(token=None, **json.load(f)) self.assistant = None def _process_event(self, event): - logging.info('Received assistant event: {}'.format(event)) - # self.on_message(event) + logging.debug('Received assistant event: {}'.format(event)) + + if event.type == EventType.ON_CONVERSATION_TURN_STARTED and self.on_conversation_start: + subprocess.check_output(self.on_conversation_start, + stderr=subprocess.STDOUT, shell=True) + elif event.type == EventType.ON_CONVERSATION_TURN_FINISHED and self.on_conversation_end: + subprocess.check_output(self.on_conversation_end, + stderr=subprocess.STDOUT, shell=True) + elif event.type == EventType.ON_RECOGNIZING_SPEECH_FINISHED: + phrase = event.args['text'].lower().strip() + logging.info('Speech recognized: {}'.format(phrase)) + # self.on_message(event) def send_message(self, msg): - raise NotImplementedError("Cannot send messages on an event source") + # Cant' send a message on an event source, ignoring + pass def on_stop(self): if self.producer: @@ -50,7 +70,7 @@ class AssistantGoogleBackend(Backend): super().run() with Assistant(self.credentials) as self.assistant: - for event in assistant.start(): + for event in self.assistant.start(): self._process_event(event)