HOTWORDS file parsed as yaml and accepts @dot.notation suffix
parent
bde26ff2e5
commit
353a613c2b
|
|
@ -7,6 +7,7 @@ import sys
|
||||||
from os import environ
|
from os import environ
|
||||||
from os import kill
|
from os import kill
|
||||||
import requests
|
import requests
|
||||||
|
import yaml
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
managerToParserQ = queue.Queue(maxsize=1)
|
managerToParserQ = queue.Queue(maxsize=1)
|
||||||
|
|
@ -119,6 +120,53 @@ class Parser(threading.Thread):
|
||||||
r = sr.Recognizer()
|
r = sr.Recognizer()
|
||||||
return r.recognize_whisper(clip, language="english")
|
return r.recognize_whisper(clip, language="english")
|
||||||
|
|
||||||
|
def load_dot_notation(v, s):
|
||||||
|
items = s.replace("[]", ".[]").split(".")
|
||||||
|
return _load_dot_notation(v, items)
|
||||||
|
|
||||||
|
def _load_dot_notation(v, items):
|
||||||
|
for i in range(len(items)):
|
||||||
|
k = items[i]
|
||||||
|
if not k:
|
||||||
|
continue
|
||||||
|
if k == "[]":
|
||||||
|
if isinstance(v, list):
|
||||||
|
result = []
|
||||||
|
for j in v:
|
||||||
|
subresult = _load_dot_notation(j, items[i+1:])
|
||||||
|
if isinstance(subresult, list):
|
||||||
|
result.extend(subresult)
|
||||||
|
else:
|
||||||
|
result.append(subresult)
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
result = []
|
||||||
|
for j in v.values():
|
||||||
|
subresult = _load_dot_notation(j, items[i+1:])
|
||||||
|
if isinstance(subresult, list):
|
||||||
|
result.extend(subresult)
|
||||||
|
else:
|
||||||
|
result.append(subresult)
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
if isinstance(v, list):
|
||||||
|
v = v[int(k)]
|
||||||
|
else:
|
||||||
|
v = v[k]
|
||||||
|
return v
|
||||||
|
|
||||||
|
def test_load_dot_notation():
|
||||||
|
assert("a" == load_dot_notation("a", "."))
|
||||||
|
assert(["a"] == load_dot_notation(["a"], "."))
|
||||||
|
assert("b" == load_dot_notation({"a":"b"}, ".a"))
|
||||||
|
assert("c" == load_dot_notation({"a":{"b":"c"}}, ".a.b"))
|
||||||
|
assert("c" == load_dot_notation({"a":{"b":["c"]}}, ".a.b.0"))
|
||||||
|
assert(["c","d"] == load_dot_notation({"a":{"b":"c"}, "a2":{"b":"d"}}, ".[].b"))
|
||||||
|
assert(["c","d"] == load_dot_notation({"a":{"b":["c"], "b2":["d"]}}, ".a.[].0"))
|
||||||
|
assert(["c","d"] == load_dot_notation({"a":{"b":["c"], "b2":["d"]}}, ".a[].0"))
|
||||||
|
assert(["c","d"] == load_dot_notation(["c", "d"], "."))
|
||||||
|
assert(["c","d"] == load_dot_notation(["c", "d"], "[]"))
|
||||||
|
test_load_dot_notation()
|
||||||
|
|
||||||
class Reactor(threading.Thread):
|
class Reactor(threading.Thread):
|
||||||
def __init__(self, inq, outq):
|
def __init__(self, inq, outq):
|
||||||
|
|
@ -126,7 +174,7 @@ class Reactor(threading.Thread):
|
||||||
self.inq = inq
|
self.inq = inq
|
||||||
self.outq = outq
|
self.outq = outq
|
||||||
self.load_hotwords = Reactor.new_load_hotwords()
|
self.load_hotwords = Reactor.new_load_hotwords()
|
||||||
[i for i in self.load_hotwords()]
|
log(f"hotwords: {self.load_hotwords()}")
|
||||||
|
|
||||||
def new_load_hotwords():
|
def new_load_hotwords():
|
||||||
p = environ.get("HOTWORDS", None)
|
p = environ.get("HOTWORDS", None)
|
||||||
|
|
@ -136,15 +184,24 @@ class Reactor(threading.Thread):
|
||||||
return load_nothing
|
return load_nothing
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
if "@" in p:
|
||||||
|
def load_hotwords_in_yaml_file():
|
||||||
|
with open(p.split("@")[0], "r") as f:
|
||||||
|
v = yaml.safe_load(f)
|
||||||
|
v = load_dot_notation(v, p.split("@")[-1])
|
||||||
|
return ["".join(i.strip().lower().split()) for i in v if i]
|
||||||
|
load_hotwords_in_yaml_file()
|
||||||
|
return load_hotwords_in_yaml_file
|
||||||
|
else:
|
||||||
def load_hotwords_in_file():
|
def load_hotwords_in_file():
|
||||||
with open(p, "r") as f:
|
with open(p, "r") as f:
|
||||||
return ["".join(i.strip().lower().split()) for i in f.readlines()]
|
return ["".join(i.strip().lower().split()) for i in f.readlines()]
|
||||||
load_hotwords_in_file()
|
load_hotwords_in_file()
|
||||||
return load_hotwords_in_file
|
return load_hotwords_in_file
|
||||||
except Exception:
|
except Exception as e:
|
||||||
pass
|
log(f"$HOTWORDS {p} is not a file: {e}")
|
||||||
|
|
||||||
hotwords = ["".join(i.lower().strip().split()) for i in p.split(",")]
|
hotwords = ["".join(i.lower().strip().split()) for i in p.split("\/\/")]
|
||||||
log(f'$HOTWORDS: {hotwords}')
|
log(f'$HOTWORDS: {hotwords}')
|
||||||
def load_hotwords_as_literal():
|
def load_hotwords_as_literal():
|
||||||
return hotwords
|
return hotwords
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue