diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2014-09-28 20:51:50 +0200 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2014-10-03 14:12:09 +0200 |
| commit | 6f2126aa28d7715a8b65b4c7e427c72e32a6c28b (patch) | |
| tree | 7ad61de81d2702ef57c28ade3ffaa3c098979f1c | |
| parent | c263709078c096faef891502e06cc9e9ade65777 (diff) | |
| download | jasper-client-6f2126aa28d7715a8b65b4c7e427c72e32a6c28b.tar.gz jasper-client-6f2126aa28d7715a8b65b4c7e427c72e32a6c28b.zip | |
Use config dir for non-temporary writable files
This is also a (partial) fix for issue jasperproject/jasper-client#119
| -rw-r--r-- | client/populate.py | 7 | ||||
| -rw-r--r-- | client/stt.py | 4 | ||||
| -rwxr-xr-x | jasper.py | 50 | ||||
| -rw-r--r-- | static/dictionary_persona.dic (renamed from client/dictionary_persona.dic) | 0 | ||||
| -rw-r--r-- | static/languagemodel_persona.lm (renamed from client/languagemodel_persona.lm) | 0 |
5 files changed, 44 insertions, 17 deletions
diff --git a/client/populate.py b/client/populate.py index d1cbb80..e871f26 100644 --- a/client/populate.py +++ b/client/populate.py @@ -1,10 +1,11 @@ # -*- coding: utf-8-*- +import os import re from getpass import getpass import yaml from pytz import timezone import feedparser - +import jasperpath def run(): profile = {} @@ -105,7 +106,9 @@ def run(): # write to profile print("Writing to profile...") - outputFile = open("profile.yml", "w") + if not os.path.exists(jasperpath.CONFIG_PATH): + os.makedirs(jasperpath.CONFIG_PATH) + outputFile = open(jasperpath.config("profile.yml"), "w") yaml.dump(profile, outputFile, default_flow_style=False) print("Done.") diff --git a/client/stt.py b/client/stt.py index b4cc038..344696c 100644 --- a/client/stt.py +++ b/client/stt.py @@ -42,8 +42,8 @@ class PocketSphinxSTT(AbstractSTTEngine): SLUG = 'sphinx' - def __init__(self, lmd="languagemodel.lm", dictd="dictionary.dic", - lmd_persona="languagemodel_persona.lm", dictd_persona="dictionary_persona.dic", + def __init__(self, lmd=jasperpath.config("languagemodel.lm"), dictd=jasperpath.config("dictionary.dic"), + lmd_persona=jasperpath.data("languagemodel_persona.lm"), dictd_persona=jasperpath.data("dictionary_persona.dic"), lmd_music=None, dictd_music=None, hmm_dir="/usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k"): """ @@ -34,11 +34,41 @@ os.chdir(jasperpath.LIB_PATH) class Jasper(object): def __init__(self): self._logger = logging.getLogger(__name__) + + # Create config dir if it does not exist yet + if not os.path.exists(jasperpath.CONFIG_PATH): + try: + os.makedirs(jasperpath.CONFIG_PATH) + except OSError: + self._logger.error("Could not create config dir: '%s'", jasperpath.CONFIG_PATH, exc_info=True) + raise + + # Check if config dir is writable + if not os.access(jasperpath.CONFIG_PATH, os.W_OK): + self._logger.critical("Config dir %s is not writable. Jasper won't work correctly.") + + # FIXME: For backwards compatibility, move old config file to newly created config dir + old_configfile = os.path.join(jasperpath.LIB_PATH, 'profile.yml') + new_configfile = jasperpath.config('profile.yml') + if os.path.exists(old_configfile): + if os.path.exists(new_configfile): + self._logger.warning("Deprecated profile file found: '%s'. Please remove it.", old_configfile) + else: + self._logger.warning("Deprecated profile file found: '%s'. Trying to copy it to new location '%s'.", old_configfile, new_configfile) + try: + shutil.copy2(old_configfile, new_configfile) + except shutil.Error: + self._logger.error("Unable to copy config file. Please copy it manually.", exc_info=True) + raise + # Read config - config_file = os.path.abspath(os.path.join(jasperpath.LIB_PATH, 'profile.yml')) - self._logger.debug("Trying to read config file: '%s'", config_file) - with open(config_file, "r") as f: - self.config = yaml.safe_load(f) + self._logger.debug("Trying to read config file: '%s'", new_configfile) + try: + with open(new_configfile, "r") as f: + self.config = yaml.safe_load(f) + except OSError: + self._logger.error("Can't open config file: '%s'", new_configfile) + raise try: api_key = self.config['keys']['GOOGLE_SPEECH'] @@ -59,7 +89,7 @@ class Jasper(object): tts_engine_class = tts.get_engine_by_slug(tts_engine_slug) # Compile dictionary - sentences, dictionary, languagemodel = [os.path.abspath(os.path.join(jasperpath.LIB_PATH, filename)) for filename in ("sentences.txt", "dictionary.dic", "languagemodel.lm")] + sentences, dictionary, languagemodel = [jasperpath.config(filename) for filename in ("sentences.txt", "dictionary.dic", "languagemodel.lm")] vocabcompiler.compile(sentences, dictionary, languagemodel) # Initialize Mic @@ -93,14 +123,8 @@ if __name__ == "__main__": try: app = Jasper() - except IOError: - logger.exception("Can't read profile file.") - sys.exit(1) - except OSError: - logger.exception("Language model or associated files missing.") - sys.exit(1) - except Exception(): - logger.exception("Unknown error occured") + except Exception: + logger.exception("Error occured!", exc_info=True) sys.exit(1) app.run() diff --git a/client/dictionary_persona.dic b/static/dictionary_persona.dic index 8b813ac..8b813ac 100644 --- a/client/dictionary_persona.dic +++ b/static/dictionary_persona.dic diff --git a/client/languagemodel_persona.lm b/static/languagemodel_persona.lm index f290a31..f290a31 100644 --- a/client/languagemodel_persona.lm +++ b/static/languagemodel_persona.lm |
