Source code for mads.cli

# mads/bots.py
#
#

""" bot classes. """

from mads.shell import enable_history, set_completer
from mads.log import BOLD,GRAY,ENDC
from mads.event import Event
from mads.bots import Bot

import logging
import select
import sys

[docs]class CLI(Bot): """ Command Line Interface Bot. >>> from mads.cli import CLI >>> bot = CLI() >>> print(bot) """ cc = "" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.register_fd(sys.stdin) self.register_fd(sys.stdout) self.register_fd(sys.stderr) self._resume.fd = sys.stdin.fileno()
[docs] def dispatch(self, event): thr = event.handle() thr.join() self.prompt()
[docs] def event(self): self._connected.ready() e = Event() e.cc = self.cc e.origin = "root@shell" e.server = "localhost" e.id = self.id() e.txt = input() e.txt = e.txt.rstrip() return e
[docs] def prompt(self, colors=False): """ echo prompt to sys.stdout. """ if colors: txt = "%s%s>%s " % (BOLD, GRAY, ENDC) else: txt = "> " sys.stdout.write(txt) sys.stdout.flush()
[docs] def raw(self, txt): """ output txt to sys.stdout """ sys.stdout.write(str(txt)) sys.stdout.write("\n") sys.stdout.flush()
[docs] def register_fd(self, f): """ register an file or filedescriptor. """ try: fd = f.fileno() except: fd = f self._poll.register(fd, select.EPOLLIN | select.EPOLLOUT | select.EPOLLET) logging.info("# engine on %s" % str(fd)) return fd
[docs] def start(self, *args, **kwargs): super().start(*args, **kwargs) self._connected.wait()