Source code for flexget.components.irc.cli
from argparse import ArgumentParser
from flexget import options
from flexget.event import event
from flexget.terminal import TerminalTable, colorize, console, disable_colors, table_parser
try:
from irc_bot.simple_irc_bot import IRCChannelStatus, SimpleIRCBot
except ImportError:
SimpleIRCBot = None
IRCChannelStatus = None
[docs]
def do_cli(manager, options):
"""Handle irc cli."""
if SimpleIRCBot is None:
console('irc_bot is not installed. install using `pip install irc_bot`.')
return
if hasattr(options, 'table_type') and options.table_type == 'porcelain':
disable_colors()
action_map = {'status': action_status, 'restart': action_restart, 'stop': action_stop}
# NOTE: Direct importing of other plugins is discouraged
from flexget.components.irc.irc import irc_manager
if irc_manager is None:
console('IRC daemon does not appear to be running.')
return
action_map[options.irc_action](options, irc_manager)
[docs]
def action_status(options, irc_manager):
connection = options.irc_connection
try:
status = irc_manager.status(connection)
except ValueError as e:
console(f'ERROR: {e.args[0]}')
return
header = ['Name', 'Alive', 'Channels', 'Server']
table_data = []
for connection in status:
for name, info in connection.items():
alive = colorize('green', 'Yes') if info['alive'] else colorize('red', 'No')
channels = []
for channel in info['channels']:
for channel_name, channel_status in channel.items():
channels.append(channel_name)
if channel_status == IRCChannelStatus.CONNECTED:
channels[-1] = colorize('green', '* ' + channels[-1])
table_data.append([
name,
alive,
', '.join(channels),
'{}:{}'.format(info['server'], info['port']),
])
table = TerminalTable(*header, table_type=options.table_type)
for row in table_data:
table.add_row(*row)
console(table)
console(colorize('green', ' * Connected channel'))
[docs]
def action_restart(options, irc_manager):
connection = options.irc_connection
try:
console(f'Restarting irc connection {connection}. It may take a short while.')
irc_manager.restart_connections(connection)
console(
'Successfully restarted {0}. Use `flexget irc status {0}` to check its status.'.format(
connection or 'all'
)
)
except KeyError:
console(f'ERROR: {connection} is not a valid irc connection')
[docs]
def action_stop(options, irc_manager):
connection = options.irc_connection
try:
console(f'Stopping irc connection {connection}. It may take a short while.')
irc_manager.stop_connections(wait=False, name=connection)
console(
'Successfully stopped {0}. Use `flexget irc status {0}` to check its status.'.format(
connection or 'all'
)
)
except KeyError:
console(f'ERROR: {connection} is not a valid irc connection')
[docs]
@event('options.register')
def register_parser_arguments():
# Common option to be used in multiple subparsers
irc_parser = ArgumentParser(add_help=False)
irc_parser.add_argument('irc_connection', nargs='?', help='Title of the irc connection')
# Register subcommand
parser = options.register_command('irc', do_cli, help='View and manage irc connections')
# Set up our subparsers
subparsers = parser.add_subparsers(title='actions', metavar='<action>', dest='irc_action')
subparsers.add_parser(
'status',
parents=[irc_parser, table_parser],
help='Shows status for specific irc connection',
)
subparsers.add_parser('restart', parents=[irc_parser], help='Restart an irc connection')
subparsers.add_parser('stop', parents=[irc_parser], help='Stops an irc connection')