2021-07-27 23:10:01 +02:00
|
|
|
import glob
|
|
|
|
import os
|
2021-07-28 19:31:47 +02:00
|
|
|
import types
|
2021-07-27 23:10:01 +02:00
|
|
|
|
|
|
|
from jarvis import get_path_file
|
|
|
|
from jarvis.skills import intent_manager
|
|
|
|
from jarvis.utils import languages_utils
|
|
|
|
|
|
|
|
|
|
|
|
class Skill:
|
2021-07-28 20:35:20 +02:00
|
|
|
def __init__(self, name):
|
2021-07-27 23:10:01 +02:00
|
|
|
self.name = name
|
2021-07-28 20:35:20 +02:00
|
|
|
|
|
|
|
path = self.__module__.split(".")
|
|
|
|
self.category = path[2]
|
|
|
|
self.skill_folder = path[3]
|
2021-07-27 23:10:01 +02:00
|
|
|
|
|
|
|
def register(self):
|
|
|
|
self.register_entities()
|
|
|
|
self.register_regex()
|
2021-07-28 18:05:34 +02:00
|
|
|
print("[" + self.name + "] Registered entity/entities and regex(s)")
|
2021-07-27 23:10:01 +02:00
|
|
|
|
|
|
|
def register_entities(self):
|
|
|
|
path = os.path.dirname(get_path_file.__file__) + "/skills/" + self.category + "/" + self.skill_folder
|
|
|
|
path = path + "/vocab/" + languages_utils.get_language() + "/*.voc"
|
|
|
|
|
|
|
|
files = glob.glob(path, recursive=True)
|
|
|
|
for file in files:
|
|
|
|
with open(file, "r") as infile:
|
|
|
|
for line in infile.readlines():
|
|
|
|
filename = file.split("/")[-1].split(".voc")[0]
|
|
|
|
|
2021-07-28 17:56:05 +02:00
|
|
|
intent_manager.register_entity(line.replace('\n', ''), filename, self.name)
|
2021-07-27 23:10:01 +02:00
|
|
|
|
|
|
|
def register_regex(self):
|
|
|
|
path = os.path.dirname(get_path_file.__file__) + "/skills/" + self.category + "/" + self.skill_folder
|
|
|
|
path = path + "/regex/" + languages_utils.get_language() + "/*.rx"
|
|
|
|
|
|
|
|
files = glob.glob(path, recursive=True)
|
|
|
|
for file in files:
|
|
|
|
with open(file, "r") as infile:
|
|
|
|
for line in infile.readlines():
|
2021-07-28 17:56:05 +02:00
|
|
|
intent_manager.register_regex(line.replace('\n', ''), self.name)
|
2021-07-28 18:05:34 +02:00
|
|
|
|
2021-07-28 23:13:08 +02:00
|
|
|
def speak(self, message):
|
|
|
|
print(message)
|
|
|
|
|
2021-07-28 19:31:47 +02:00
|
|
|
|
|
|
|
class SkillRegistering(type):
|
|
|
|
def __init__(cls, name, bases, attrs):
|
|
|
|
for key, val in attrs.items():
|
|
|
|
if type(val) is types.FunctionType and not str(val).__contains__("__"):
|
|
|
|
properties = getattr(val, "_register", None)
|
|
|
|
|
|
|
|
if properties is not None:
|
2021-07-28 23:13:08 +02:00
|
|
|
intent = properties[0]
|
|
|
|
intent_name = intent.name
|
2021-07-28 19:31:47 +02:00
|
|
|
intent_manager.intents_handlers[f"{intent_name}"] = [getattr(cls, key), name]
|