mirror of
https://github.com/avatao-content/baseimage-tutorial-framework
synced 2024-11-06 00:11:22 +00:00
49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
# Copyright (C) 2018 Avatao.com Innovative Learning Kft.
|
|
# All Rights Reserved. See LICENSE file for details.
|
|
|
|
from abc import ABC
|
|
from re import match
|
|
|
|
from tfw.config.logs import logging
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
class TerminalCommands(ABC):
|
|
def __init__(self, bashrc=None):
|
|
self._command_method_regex = r'^command_(.+)$'
|
|
self.command_implemetations = self._build_command_to_implementation_dict()
|
|
if bashrc is not None:
|
|
self._setup_bashrc_aliases(bashrc)
|
|
|
|
def _build_command_to_implementation_dict(self):
|
|
return {self._parse_command_name(fun): getattr(self, fun) for fun in dir(self)
|
|
if callable(getattr(self, fun)) and self._is_command_implementation(fun)}
|
|
|
|
def _setup_bashrc_aliases(self, bashrc):
|
|
with open(bashrc, 'a') as ofile:
|
|
alias_template = 'type {0} &> /dev/null || alias {0}="{0} &> /dev/null"\n'
|
|
for command in self.command_implemetations.keys():
|
|
ofile.write(alias_template.format(command))
|
|
|
|
def _is_command_implementation(self, method_name):
|
|
return bool(self._match_command_regex(method_name))
|
|
|
|
def _parse_command_name(self, method_name):
|
|
try:
|
|
return self._match_command_regex(method_name).groups()[0]
|
|
except AttributeError:
|
|
return ''
|
|
|
|
def _match_command_regex(self, string):
|
|
return match(self._command_method_regex, string)
|
|
|
|
def callback(self, history):
|
|
parts = history[-1].split()
|
|
command = parts[0]
|
|
if command in self.command_implemetations.keys():
|
|
try:
|
|
self.command_implemetations[command](*parts[1:])
|
|
except IndexError:
|
|
LOG.debug('Command "%s" failed!', command)
|