Beispiel #1
0
class CliQuery(cmd.Cmd):
    def __init__(self):
        super().__init__()
        self.qp = CommandInterpreter()
        self.prompt = 'Skillitor> '

    def do_skillset(self, line):
        errmsg = self.qp.process_set_cmd(line)
        if errmsg:
            print("ERROR: " + errmsg)

    def do_skillunset(self, line):
        errmsg = self.qp.process_set_cmd(line)
        if errmsg:
            print("ERROR: " + errmsg)

    def do_skillfind(self, line):
        errmsg, result = self.qp.process_find_cmd(line)
        if errmsg:
            print("ERROR: " + errmsg)
        print("Got find results: " + str(result))

    def do_skillshow(self, line):
        print("Command not implemented.")

    def do_skilladmin(self, _):
        print("Command not implemented.")

    def do_skilldebug(self, _):
        print("Command not implemented.")

    def do_q(self, _):
        return True
Beispiel #2
0
 def __init__(self):
     self.db_service_config = {
         'hostname': os.getenv('DB_SERVICE_HOSTNAME',
                               'skillitor_pgsql'),
         'port': os.getenv('DB_SERVICE_PORT', 50051)
     }
     channel = grpc.insecure_channel('{hostname}:{port}'.format(
         **self.db_service_config))
     self.db_service = skillitor_pb2_grpc.SkillitorQueryStub(channel)
     self.qp = CommandInterpreter()
Beispiel #3
0
 def __init__(self):
     super().__init__()
     self.qp = CommandInterpreter()
     self.prompt = '> '
     self.server = {
         'hostname': '',
         'port': '',
         'user': '',
     }
     self.rpc = None
     self.current_user = None
Beispiel #4
0
class CliQuery(cmd.Cmd):
    def __init__(self):
        super().__init__()
        self.qp = CommandInterpreter()
        self.prompt = 'Skillitor> '

    def do_skillset(self, line):
        errmsg = self.qp.process_set_cmd(line)
        if errmsg:
            print("ERROR: " + errmsg)
        # TODO: Print usage instead of an error if line is empty

    def do_skillunset(self, line):
        errmsg = self.qp.process_set_cmd(line)
        if errmsg:
            print("ERROR: " + errmsg)
        # TODO: Print usage instead of an error if line is empty

    def do_skillfind(self, line):
        errmsg, result = self.qp.process_find_cmd(line)
        if errmsg:
            print("ERROR: " + errmsg)
        print("Got find results: " + str(result))
        # TODO: Print usage instead of an error if line is empty

    def do_skillshow(self, line):
        print("Command not implemented.")
        # TODO: Extract email address from line, if present

    def do_skilladmin(self, _):
        print("Command not implemented.")

    def do_skilldebug(self, _):
        print("Command not implemented.")

    def do_q(self, _):
        return True
Beispiel #5
0
class SkillitorQueryHandler(skillitor_pb2_grpc.SkillitorQueryServicer):
    def __init__(self):
        self.db_service_config = {
            'hostname': os.getenv('DB_SERVICE_HOSTNAME',
                                  'skillitor_pgsql'),
            'port': os.getenv('DB_SERVICE_PORT', 50051)
        }
        channel = grpc.insecure_channel('{hostname}:{port}'.format(
            **self.db_service_config))
        self.db_service = skillitor_pb2_grpc.SkillitorQueryStub(channel)
        self.qp = CommandInterpreter()

    def SetSkills(self, request, context):
        print("Received a call to SetSkills: " + str(request))
        return self.db_service.SetSkills(request)

    def UnsetSkills(self, request, context):
        print("Received a call to UnsetSkills: " + str(request))
        return self.db_service.UnsetSkills(request)

    def FindSkills(self, request, context):
        print("Received a call to FindSkills: " + str(request))
        return self.db_service.FindSkills(request)

    def RawCommand(self, request, context):
        print("Received a call to RawCommand: " + str(request))
        command, args = request.command_text.split(' ', 2)
        response = "Real response will go here."
        if command == 'skillset':
            self.qp.process_set_cmd('*****@*****.**', self.db_service,
                                    args)
        elif command == 'skillunset':
            self.qp.process_set_cmd('*****@*****.**', self.db_service,
                                    args, unset=True)
        elif command == 'skillfind':
            self.qp.process_find_cmd(self.db_service, args)
        else:
            response = (
                "Usage:\n"
                "skillset|skillunset <skill_list> [for <email>]\n"
                "skillfind any|all <skill_list>\n")

        return skillitor_pb2.RawResponse(text=response)
Beispiel #6
0
class CliClient(cmd.Cmd):
    def __init__(self):
        super().__init__()
        self.qp = CommandInterpreter()
        self.prompt = '> '
        self.server = {
            'hostname': '',
            'port': '',
            'user': '',
        }
        self.rpc = None
        self.current_user = None

    def _update_prompt(self):
        if self.server['hostname']:
            self.prompt = "[{user}@{hostname}:{port}]> ".format(**self.server)
        else:
            self.prompt = '> '

    def emptyline(self):
        pass  # Do nothing

    def do_connect(self, line):
        match = re.search(r'([^:\s]+@[^:\s]+)(?:(:[\w\d.]+)(:\d+)?)?', line)
        if not line or match is None:
            print("Usage: connect <email>[:<hostname>[:<port>]]")
            return

        email, hostname, port = match.groups()
        hostname = hostname.strip(':') if hostname else '127.0.0.1'
        port = port.strip(':') if port else 50051
        self.server = {'hostname': hostname, 'port': port, 'user': email}
        self._update_prompt()
        channel = grpc.insecure_channel(
            '{hostname}:{port}'.format(**self.server))
        self.rpc = skillitor_pb2_grpc.SkillitorQueryStub(channel)

    def do_disconnect(self, line):
        self.server = {
            'hostname': '',
            'port': '',
            'user': ''
        }  # Server settings
        self.rpc = None
        self._update_prompt()

    def do_quit(self, _):
        return True

    def do_skillset(self, line, unset=False):
        if self.rpc is None:
            print("You must run 'connect' first to specify server settings")
            return

        if not line:
            print("Usage: skillset <skill_list> [for <email>]")
            return

        errmsg, email, skill_list = self.qp.process_set_cmd(line)
        email = email or self.server['user']  # Use current user as a default
        if errmsg:
            print("ERROR: " + errmsg)
            return

        sa = skillitor_pb2.SkillAssociation(user_id=email, skills=skill_list)
        if unset:
            response = self.rpc.UnsetSkills(sa)
            action = 'UnsetSkills'
        else:
            response = self.rpc.SetSkills(sa)
            action = 'SetSkills'

        print("Sent a {} message, got response type: {}. "
              "String representation: {}".format(action, type(response),
                                                 response))

    def do_skillunset(self, line):
        self.do_skillset(line, unset=True)

    def do_skillfind(self, line):
        if self.rpc is None:
            print("You must run 'connect' first to specify server settings")
            return

        if not line:
            print("Usage: skillfind any|all <skill_list>")
            return

        errmsg, find_method, skill_list = self.qp.process_find_cmd(line)
        if errmsg:
            print("ERROR: " + errmsg)
            return

        find_spec = skillitor_pb2.FindSpec(find_method=find_method,
                                           skill_list=skill_list)
        response = self.rpc.FindSkills(find_spec)
        print("Sent a FindSkills({}) message, got response type: {}. "
              "String representation: {}".format(find_method, type(response),
                                                 response))
Beispiel #7
0
 def __init__(self):
     super().__init__()
     self.qp = CommandInterpreter()
     self.prompt = 'Skillitor> '