#!/usr/bin/env python3
import logging
-from typing import NamedTuple
+import sys
+from typing import NamedTuple, Optional
+import warnings
import requests
import speech_recognition as sr # type: ignore
type=str,
default="http://kiosk.house:3000",
metavar="URL",
- help="How to contact the Google Assistant bridge"
+ help="How to contact the Google Assistant bridge",
)
parser.add_argument(
"--google_assistant_username",
type=str,
metavar="GOOGLE_ACCOUNT",
default="scott.gasch",
- help="The user account for talking to Google Assistant"
+ help="The user account for talking to Google Assistant",
)
success: bool
response: str
audio_url: str
- audio_transcription: str
+ audio_transcription: Optional[str] # None if not available.
def __repr__(self):
return f"""
def tell_google(cmd: str, *, recognize_speech=True) -> GoogleResponse:
+ """Alias for ask_google."""
return ask_google(cmd, recognize_speech=recognize_speech)
def ask_google(cmd: str, *, recognize_speech=True) -> GoogleResponse:
+ """Send a command string to Google via the google_assistant_bridge as the
+ user google_assistant_username and return the response. If recognize_speech
+ is True, perform speech recognition on the audio response from Google so as
+ to translate it into text (best effort, YMMV).
+ """
logging.debug(f"Asking google: '{cmd}'")
payload = {
"command": cmd,
success = False
response = ""
audio = ""
- audio_transcription = ""
+ audio_transcription: Optional[str] = ""
if r.status_code == 200:
j = r.json()
success = bool(j["success"])
logger.debug(f"Transcription: '{audio_transcription}'")
except sr.UnknownValueError as e:
logger.exception(e)
- logger.warning('Unable to parse Google assistant\'s response.')
+ msg = 'Unable to parse Google assistant\'s response.'
+ logger.warning(msg)
+ warnings.warn(msg, stacklevel=3)
audio_transcription = None
+ return GoogleResponse(
+ success=success,
+ response=response,
+ audio_url=audio,
+ audio_transcription=audio_transcription,
+ )
else:
- logger.error(
- f'HTTP request to {url} with {payload} failed; code {r.status_code}'
+ message = f'HTTP request to {url} with {payload} failed; code {r.status_code}'
+ logger.error(message)
+ return GoogleResponse(
+ success=False,
+ response=message,
+ audio_url=audio,
+ audio_transcription=audio_transcription,
)
- return GoogleResponse(
- success=success,
- response=response,
- audio_url=audio,
- audio_transcription=audio_transcription,
- )
+ sys.exit(-1)