Skip to content
Snippets Groups Projects
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()