@@ -133,7 +133,7 @@ async def async_setup_platform(p_type, p_config=None, discovery_info=None):
133133 hass , p_config , discovery_info
134134 )
135135 else :
136- provider = await hass .async_add_job (
136+ provider = await hass .async_add_executor_job (
137137 platform .get_engine , hass , p_config , discovery_info
138138 )
139139
@@ -226,41 +226,17 @@ async def async_init_cache(self, use_cache, cache_dir, time_memory, base_url):
226226 self .time_memory = time_memory
227227 self .base_url = base_url
228228
229- def init_tts_cache_dir (cache_dir ):
230- """Init cache folder."""
231- if not os .path .isabs (cache_dir ):
232- cache_dir = self .hass .config .path (cache_dir )
233- if not os .path .isdir (cache_dir ):
234- _LOGGER .info ("Create cache dir %s." , cache_dir )
235- os .mkdir (cache_dir )
236- return cache_dir
237-
238229 try :
239- self .cache_dir = await self .hass .async_add_job (
240- init_tts_cache_dir , cache_dir
230+ self .cache_dir = await self .hass .async_add_executor_job (
231+ _init_tts_cache_dir , self . hass , cache_dir
241232 )
242233 except OSError as err :
243234 raise HomeAssistantError (f"Can't init cache dir { err } " )
244235
245- def get_cache_files ():
246- """Return a dict of given engine files."""
247- cache = {}
248-
249- folder_data = os .listdir (self .cache_dir )
250- for file_data in folder_data :
251- record = _RE_VOICE_FILE .match (file_data )
252- if record :
253- key = KEY_PATTERN .format (
254- record .group (1 ),
255- record .group (2 ),
256- record .group (3 ),
257- record .group (4 ),
258- )
259- cache [key .lower ()] = file_data .lower ()
260- return cache
261-
262236 try :
263- cache_files = await self .hass .async_add_job (get_cache_files )
237+ cache_files = await self .hass .async_add_executor_job (
238+ _get_cache_files , self .cache_dir
239+ )
264240 except OSError as err :
265241 raise HomeAssistantError (f"Can't read cache dir { err } " )
266242
@@ -273,13 +249,13 @@ async def async_clear_cache(self):
273249
274250 def remove_files ():
275251 """Remove files from filesystem."""
276- for _ , filename in self .file_cache .items ():
252+ for filename in self .file_cache .values ():
277253 try :
278254 os .remove (os .path .join (self .cache_dir , filename ))
279255 except OSError as err :
280256 _LOGGER .warning ("Can't remove cache file '%s': %s" , filename , err )
281257
282- await self .hass .async_add_job (remove_files )
258+ await self .hass .async_add_executor_job (remove_files )
283259 self .file_cache = {}
284260
285261 @callback
@@ -312,6 +288,7 @@ async def async_get_url(
312288 merged_options .update (options )
313289 options = merged_options
314290 options = options or provider .default_options
291+
315292 if options is not None :
316293 invalid_opts = [
317294 opt_name
@@ -378,10 +355,10 @@ def save_speech():
378355 speech .write (data )
379356
380357 try :
381- await self .hass .async_add_job (save_speech )
358+ await self .hass .async_add_executor_job (save_speech )
382359 self .file_cache [key ] = filename
383- except OSError :
384- _LOGGER .error ("Can't write %s" , filename )
360+ except OSError as err :
361+ _LOGGER .error ("Can't write %s: %s " , filename , err )
385362
386363 async def async_file_to_mem (self , key ):
387364 """Load voice from file cache into memory.
@@ -400,7 +377,7 @@ def load_speech():
400377 return speech .read ()
401378
402379 try :
403- data = await self .hass .async_add_job (load_speech )
380+ data = await self .hass .async_add_executor_job (load_speech )
404381 except OSError :
405382 del self .file_cache [key ]
406383 raise HomeAssistantError (f"Can't read { voice_file } " )
@@ -506,11 +483,36 @@ async def async_get_tts_audio(self, message, language, options=None):
506483
507484 Return a tuple of file extension and data as bytes.
508485 """
509- return await self .hass .async_add_job (
486+ return await self .hass .async_add_executor_job (
510487 ft .partial (self .get_tts_audio , message , language , options = options )
511488 )
512489
513490
491+ def _init_tts_cache_dir (hass , cache_dir ):
492+ """Init cache folder."""
493+ if not os .path .isabs (cache_dir ):
494+ cache_dir = hass .config .path (cache_dir )
495+ if not os .path .isdir (cache_dir ):
496+ _LOGGER .info ("Create cache dir %s" , cache_dir )
497+ os .mkdir (cache_dir )
498+ return cache_dir
499+
500+
501+ def _get_cache_files (cache_dir ):
502+ """Return a dict of given engine files."""
503+ cache = {}
504+
505+ folder_data = os .listdir (cache_dir )
506+ for file_data in folder_data :
507+ record = _RE_VOICE_FILE .match (file_data )
508+ if record :
509+ key = KEY_PATTERN .format (
510+ record .group (1 ), record .group (2 ), record .group (3 ), record .group (4 ),
511+ )
512+ cache [key .lower ()] = file_data .lower ()
513+ return cache
514+
515+
514516class TextToSpeechUrlView (HomeAssistantView ):
515517 """TTS view to get a url to a generated speech file."""
516518
0 commit comments