Source code for botlib.cli
# botlib/cli.py
#
#
""" bot classes. """
from .bot import Bot
from .event import Event
from .space import runtime
import logging
import select
import sys
[docs]def init(event):
bot = CLI()
bot.start()
return bot
[docs]def shutdown(event):
from .space import fleet
bot = fleet.get_bot("cli")
bot.stop()
[docs]class CLI(Bot):
"""
Command Line Interface Bot.
>>> from bot.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):
e = Event()
e.cc = self.cc
e.origin = "root@shell"
e.server = "localhost"
e.btype = self.type
e.txt = input()
e.txt = e.txt.rstrip()
return e
[docs] def prompt(self):
""" echo prompt to sys.stdout. """
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):
super().start()
self._connected.ready()