Added version command to cli
This commit is contained in:
parent
88362006ef
commit
5fb20035d8
@ -1,5 +1,7 @@
|
|||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
|
from sh_edraft.console.console import Console
|
||||||
|
|
||||||
|
|
||||||
class CommandBase(ABC):
|
class CommandBase(ABC):
|
||||||
|
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
import sys
|
import sys
|
||||||
|
import traceback
|
||||||
|
|
||||||
from sh_edraft.cli.cpl_cli.commands.help import Help
|
from sh_edraft.cli.cpl_cli.commands.help import Help
|
||||||
from sh_edraft.cli.cpl_cli.commands.new import New
|
from sh_edraft.cli.cpl_cli.commands.new import New
|
||||||
|
from sh_edraft.cli.cpl_cli.commands.version import Version
|
||||||
from sh_edraft.cli.interpreter.interpreter import Interpreter
|
from sh_edraft.cli.interpreter.interpreter import Interpreter
|
||||||
|
from sh_edraft.console.console import Console
|
||||||
|
|
||||||
|
|
||||||
class CLI:
|
class CLI:
|
||||||
@ -13,14 +16,15 @@ class CLI:
|
|||||||
def setup(self):
|
def setup(self):
|
||||||
self._interpreter.add_command(New())
|
self._interpreter.add_command(New())
|
||||||
self._interpreter.add_command(Help())
|
self._interpreter.add_command(Help())
|
||||||
|
self._interpreter.add_command(Version())
|
||||||
|
|
||||||
def main(self):
|
def main(self):
|
||||||
print('CPL CLI:')
|
|
||||||
string = ' '.join(sys.argv[1:])
|
string = ' '.join(sys.argv[1:])
|
||||||
try:
|
try:
|
||||||
self._interpreter.interpret(string)
|
self._interpreter.interpret(string)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
tb = traceback.format_exc()
|
||||||
|
Console.error(str(e), tb)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from sh_edraft.cli.command.base.command_base import CommandBase
|
from sh_edraft.cli.command.base.command_base import CommandBase
|
||||||
|
from sh_edraft.console.console import Console
|
||||||
|
|
||||||
|
|
||||||
class Help(CommandBase):
|
class Help(CommandBase):
|
||||||
@ -7,4 +8,4 @@ class Help(CommandBase):
|
|||||||
CommandBase.__init__(self)
|
CommandBase.__init__(self)
|
||||||
|
|
||||||
def run(self, args: list[str]):
|
def run(self, args: list[str]):
|
||||||
print('Commands:')
|
Console.write_line('Available Commands:')
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from sh_edraft.cli.command.base.command_base import CommandBase
|
from sh_edraft.cli.command.base.command_base import CommandBase
|
||||||
|
from sh_edraft.console.console import Console
|
||||||
|
|
||||||
|
|
||||||
class New(CommandBase):
|
class New(CommandBase):
|
||||||
@ -10,13 +11,21 @@ class New(CommandBase):
|
|||||||
|
|
||||||
def run(self, args: list[str]):
|
def run(self, args: list[str]):
|
||||||
rel_path = f'{os.path.dirname(__file__)}/../'
|
rel_path = f'{os.path.dirname(__file__)}/../'
|
||||||
|
if len(args) == 0:
|
||||||
|
Console.error(f'Expected arguments {args}')
|
||||||
|
return
|
||||||
|
|
||||||
|
elif len(args) != 2:
|
||||||
|
Console.error(f'Invalid arguments {args}')
|
||||||
|
return
|
||||||
|
|
||||||
if not os.path.isdir(f'{rel_path}/templates/{args[0]}'):
|
if not os.path.isdir(f'{rel_path}/templates/{args[0]}'):
|
||||||
print(f'Unexpected argument {args[0]}')
|
Console.error(f'Unexpected argument {args[0]}')
|
||||||
|
|
||||||
sub_args = args[1:]
|
sub_args = args[1:]
|
||||||
|
|
||||||
if len(sub_args) != 1:
|
if len(sub_args) != 1:
|
||||||
print(f'Unexpected argument {sub_args[1]}')
|
Console.error(f'Unexpected argument {sub_args[1]}')
|
||||||
|
|
||||||
if not (sub_args[0].startswith('.') or sub_args[0].startswith('/')):
|
if not (sub_args[0].startswith('.') or sub_args[0].startswith('/')):
|
||||||
full_path = f'./{sub_args[0]}'
|
full_path = f'./{sub_args[0]}'
|
||||||
|
30
src/sh_edraft/cli/cpl_cli/commands/version.py
Normal file
30
src/sh_edraft/cli/cpl_cli/commands/version.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import pkgutil
|
||||||
|
import sys
|
||||||
|
import platform
|
||||||
|
|
||||||
|
import sh_edraft
|
||||||
|
from sh_edraft import cli
|
||||||
|
from sh_edraft.cli.command.base.command_base import CommandBase
|
||||||
|
from sh_edraft.console.console import Console
|
||||||
|
|
||||||
|
|
||||||
|
class Version(CommandBase):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
CommandBase.__init__(self)
|
||||||
|
|
||||||
|
def run(self, args: list[str]):
|
||||||
|
Console.set_foreground_color('yellow')
|
||||||
|
Console.banner('CPL CLI')
|
||||||
|
Console.set_foreground_color('default')
|
||||||
|
Console.write_line(f'Common Python Library CLI: {cli.__version__}')
|
||||||
|
Console.write_line(f'Python: {sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}')
|
||||||
|
Console.write_line(f'OS: {platform.system()} {platform.processor()}')
|
||||||
|
|
||||||
|
Console.write_line('\nCPL:')
|
||||||
|
packages = []
|
||||||
|
for importer, modname, is_pkg in pkgutil.iter_modules(sh_edraft.__path__):
|
||||||
|
module = importer.find_module(modname).load_module(modname)
|
||||||
|
packages.append([f'{modname}:', module.__version__])
|
||||||
|
|
||||||
|
Console.table(['Name', 'Version'], packages)
|
@ -1,4 +1,5 @@
|
|||||||
from sh_edraft.cli.command.base.command_base import CommandBase
|
from sh_edraft.cli.command.base.command_base import CommandBase
|
||||||
|
from sh_edraft.console.console import Console
|
||||||
|
|
||||||
|
|
||||||
class Interpreter:
|
class Interpreter:
|
||||||
@ -16,13 +17,12 @@ class Interpreter:
|
|||||||
input_list = input_string.split(' ')
|
input_list = input_string.split(' ')
|
||||||
commands = [type(cmd).__name__.lower() for cmd in self._commands]
|
commands = [type(cmd).__name__.lower() for cmd in self._commands]
|
||||||
command = input_list[0]
|
command = input_list[0]
|
||||||
args = input_list[1:]
|
args = input_list[1:] if len(input_list) > 2 else []
|
||||||
print(command)
|
|
||||||
if command in commands:
|
if command in commands:
|
||||||
cmd = next((cmd for cmd in self._commands if type(cmd).__name__.lower() == command), None)
|
cmd = next((cmd for cmd in self._commands if type(cmd).__name__.lower() == command), None)
|
||||||
if cmd is not None:
|
if cmd is not None:
|
||||||
cmd.run(args)
|
cmd.run(args)
|
||||||
else:
|
else:
|
||||||
print(f'Unexpected command {command}')
|
Console.error(f'Unexpected command {command}')
|
||||||
else:
|
else:
|
||||||
print(f'Unexpected command {command}')
|
Console.error(f'Unexpected command {command}')
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
from typing import Union, Optional
|
from typing import Union, Optional
|
||||||
|
|
||||||
|
import pyfiglet
|
||||||
|
from tabulate import tabulate
|
||||||
from termcolor import colored
|
from termcolor import colored
|
||||||
|
|
||||||
from sh_edraft.console.model.background_color import BackgroundColor
|
from sh_edraft.console.model.background_color import BackgroundColor
|
||||||
@ -7,6 +10,8 @@ from sh_edraft.console.model.foreground_color import ForegroundColor
|
|||||||
|
|
||||||
|
|
||||||
class Console:
|
class Console:
|
||||||
|
_is_first_write = True
|
||||||
|
|
||||||
_background_color: BackgroundColor = BackgroundColor.default
|
_background_color: BackgroundColor = BackgroundColor.default
|
||||||
_foreground_color: ForegroundColor = ForegroundColor.default
|
_foreground_color: ForegroundColor = ForegroundColor.default
|
||||||
_x: Optional[int] = None
|
_x: Optional[int] = None
|
||||||
@ -64,6 +69,9 @@ class Console:
|
|||||||
if cls._disabled:
|
if cls._disabled:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if cls._is_first_write:
|
||||||
|
cls._is_first_write = False
|
||||||
|
|
||||||
args = []
|
args = []
|
||||||
colored_args = []
|
colored_args = []
|
||||||
|
|
||||||
@ -88,6 +96,11 @@ class Console:
|
|||||||
Useful public methods
|
Useful public methods
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def banner(cls, string: str):
|
||||||
|
ascii_banner = pyfiglet.figlet_format(string)
|
||||||
|
cls.write_line(ascii_banner)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def clear():
|
def clear():
|
||||||
os.system('cls' if os.name == 'nt' else 'clear')
|
os.system('cls' if os.name == 'nt' else 'clear')
|
||||||
@ -103,6 +116,15 @@ class Console:
|
|||||||
def disable(cls):
|
def disable(cls):
|
||||||
cls._disabled = True
|
cls._disabled = True
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def error(cls, string: str, tb: str = None):
|
||||||
|
cls.set_foreground_color('red')
|
||||||
|
if tb is not None:
|
||||||
|
cls.write_line(f'{string} -> {tb}')
|
||||||
|
else:
|
||||||
|
cls.write_line(string)
|
||||||
|
cls.set_foreground_color('default')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def enable(cls):
|
def enable(cls):
|
||||||
cls._disabled = False
|
cls._disabled = False
|
||||||
@ -126,6 +148,12 @@ class Console:
|
|||||||
cls._background_color = BackgroundColor.default
|
cls._background_color = BackgroundColor.default
|
||||||
cls._foreground_color = ForegroundColor.default
|
cls._foreground_color = ForegroundColor.default
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def table(cls, header: list[str], values: list[list[str]]):
|
||||||
|
table = tabulate(values, headers=header)
|
||||||
|
|
||||||
|
Console.write_line(table)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def write(cls, *args):
|
def write(cls, *args):
|
||||||
string = ' '.join(map(str, args))
|
string = ' '.join(map(str, args))
|
||||||
@ -139,11 +167,13 @@ class Console:
|
|||||||
@classmethod
|
@classmethod
|
||||||
def write_line(cls, *args):
|
def write_line(cls, *args):
|
||||||
string = ' '.join(map(str, args))
|
string = ' '.join(map(str, args))
|
||||||
cls._output('')
|
if not cls._is_first_write:
|
||||||
|
cls._output('')
|
||||||
cls._output(string, end='')
|
cls._output(string, end='')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def write_line_at(cls, x: int, y: int, *args):
|
def write_line_at(cls, x: int, y: int, *args):
|
||||||
string = ' '.join(map(str, args))
|
string = ' '.join(map(str, args))
|
||||||
cls._output('', end='')
|
if not cls._is_first_write:
|
||||||
|
cls._output('', end='')
|
||||||
cls._output(string, x, y, end='')
|
cls._output(string, x, y, end='')
|
||||||
|
Loading…
Reference in New Issue
Block a user