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()