This repository has been archived on 2023-06-09. You can view files and clone it, but cannot push or open issues or pull requests.
jarvis-server/jarvis/skills/__init__.py

85 lines
3.4 KiB
Python

import glob
import os
import types
from jarvis import get_path_file
from jarvis.skills import intent_manager
from jarvis.utils import languages_utils
class Skill:
def __init__(self, name):
self.name = name
path = self.__module__.split(".")
self.category = path[2]
self.skill_folder = path[3]
def register(self):
self.register_entities()
self.register_regex()
print("[" + self.name + "] Registered entity/entities and regex(s)")
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]
intent_manager.register_entity_adapt(line.replace('\n', ''), filename, self.name)
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():
intent_manager.register_regex_adapt(line.replace('\n', ''), self.name)
def get_array_for_intent_file(filename, category, skill_folder):
path = os.path.dirname(get_path_file.__file__) + "/skills/" + category + "/" + skill_folder
path = path + "/vocab/" + languages_utils.get_language() + "/" + filename
with open(file=path, mode="r") as infile:
lines = []
for line in infile.readlines():
lines.append(line.replace('\n', ''))
return lines
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__("__"):
intent_type = getattr(val, "_type", None)
if intent_type is not None:
properties = getattr(val, "_data", None)
if properties is not None:
if intent_type == 'adapt':
intent = properties[0]
intent_name = intent.name
intent_manager.intents_handlers_adapt[f"{intent_name}"] = [getattr(cls, key), name]
elif intent_type == 'padatious':
intent_file = properties[0]
intent_name = properties[1]
intent_category = str(attrs['__module__']).split('.')[2]
skill_folder = str(attrs['__module__']).split('.')[3]
intent_manager.intents_handlers_padatious[f"{intent_name}"] = [getattr(cls, key),
get_array_for_intent_file(
intent_file,
intent_category,
skill_folder)]