diff options
Diffstat (limited to 'client/brain.py')
| -rw-r--r-- | client/brain.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/client/brain.py b/client/brain.py new file mode 100644 index 0000000..b5e0c1d --- /dev/null +++ b/client/brain.py @@ -0,0 +1,52 @@ +import logging +from modules import * + + +def logError(): + logger = logging.getLogger('jasper') + fh = logging.FileHandler('jasper.log') + fh.setLevel(logging.WARNING) + formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') + fh.setFormatter(formatter) + logger.addHandler(fh) + logger.error('Failed to execute module', exc_info=True) + + +class Brain(object): + + def __init__(self, mic, profile): + """ + Instantiates a new Brain object, which cross-references user + input with a list of modules. Note that the order of brain.modules + matters, as the Brain will cease execution on the first module + that accepts a given input. + + Arguments: + mic -- used to interact with the user (for both input and output) + profile -- contains information related to the user (e.g., phone number) + """ + self.mic = mic + self.profile = profile + self.modules = [ + Gmail, Notifications, Birthday, Weather, HN, News, Time, Joke, Life] + self.modules.append(Unclear) + + def query(self, text): + """ + Passes user input to the appropriate module, testing it against + each candidate module's isValid function. + + Arguments: + text -- user input, typically speech, to be parsed by a module + """ + for module in self.modules: + if module.isValid(text): + + try: + module.handle(text, self.mic, self.profile) + break + except: + logError() + self.mic.say( + "I'm sorry. I had some trouble with that operation. Please try again later.") + break |
