anselm.py 2.71 KiB
import sys
import json
import argparse
from threading import Thread
from anselm.system import System # pylint: disable=E0611
from anselm.long_term_memory import LongTermMemory # pylint: disable=E0611
from anselm.short_term_memory import ShortTermMemory # pylint: disable=E0611
from anselm.worker import Worker # pylint: disable=E0611
class Anselm(System):
"""
https://chase-seibert.github.io/blog/2014/03/21/python-multilevel-argparse.html
always talk to short-term-memory, if there is somthing not in stm try to remember
"""
def __init__(self):
super().__init__()
self.ltm = LongTermMemory()
self.stm = ShortTermMemory()
self.worker = Worker()
parser = argparse.ArgumentParser(
description='check systems',
usage='''anselm <command> [<args>]''')
parser.add_argument('command', help='Subcommand to run')
args = parser.parse_args(sys.argv[1:2])
if not hasattr(self, args.command):
parser.print_help()
exit(1)
if len(args.command) > self.max_arg_len:
print("command too long")
exit(1)
getattr(self, args.command)()
def clear_stm(self):
self.stm.clear_stm()
def build_auxobj_db_for(self):
"""
usage:
> python anselm provide_excahnge_for calid
"""
parser = argparse.ArgumentParser(description="builds the api for the mp given by id")
parser.add_argument('id')
arg = parser.parse_args(sys.argv[2:3])
if len(arg.id) < self.max_arg_len:
doc = self.ltm.get_auxobj(arg.id)
if doc:
self.stm.build_auxobj_db(doc)
def list_tasks_for(self):
parser = argparse.ArgumentParser(description="list the tasks for given by id")
parser.add_argument('id')
arg = parser.parse_args(sys.argv[2:3])
id = arg.id
if len(id) < self.max_arg_len:
self.stm.get_tasknames(id)
def run_task(self):
parser = argparse.ArgumentParser(description="builds the api for the mp given by id")
parser.add_argument('id')
parser.add_argument('taskname')
arg = parser.parse_args(sys.argv[2:4])
id = arg.id
taskname = arg.taskname
if len(id) < self.max_arg_len and len(taskname) < self.max_arg_len:
task = self.stm.get_task(id, taskname)
if task:
Thread(target=self.worker.run, args=(task, )).start()
self.log.info("start thread for task: {}".format(task['TaskName']))
else:
self.log.error("task not found")
if __name__ == '__main__':
Anselm()