init
This commit is contained in:
commit
09d4c52043
19 changed files with 542 additions and 0 deletions
66
sandbox/cli/prompt.py
Normal file
66
sandbox/cli/prompt.py
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
'''
|
||||
===== Prompt Handling =====
|
||||
This file implements the Prompt class, allowing for
|
||||
inheritance and instantiation of Prompt objects.
|
||||
The CLI class uses these instead of containing the
|
||||
logic immediately within itself.
|
||||
'''
|
||||
|
||||
from typing import Any
|
||||
|
||||
from noether.cli.style import *
|
||||
from noether.lib.structs import Result
|
||||
|
||||
class Prompt:
|
||||
DEFAULT_PROMPT = 'DEF> '
|
||||
def __init__(self) -> None:
|
||||
self._prompt = self.DEFAULT_PROMPT
|
||||
|
||||
'''
|
||||
Prompt and await command via stdin.
|
||||
'''
|
||||
def prompt(self):
|
||||
command = self.__request()
|
||||
result = self._parse(command)
|
||||
if result.success:
|
||||
self._exec(result.value)
|
||||
else:
|
||||
self.__parse_error(result)
|
||||
|
||||
'''
|
||||
!! OVERRIDE ON INHERITANCE !!
|
||||
Handles the parsing of a given command.
|
||||
'''
|
||||
def _parse(self, command: str) -> Result:
|
||||
return Result.succeed(command)
|
||||
|
||||
def __parse_error(self, error: Result) -> None:
|
||||
err = f' ↳ {style(error.reason, Effect.ITALICS)}'
|
||||
print(style(err, Effect.DIM))
|
||||
|
||||
'''
|
||||
!! OVERRIDE ON INHERITANCE !!
|
||||
Handles the execution of a command that
|
||||
was successfully parsed by a Prompt inheritor.
|
||||
'''
|
||||
def _exec(self, command: Any) -> None:
|
||||
pass
|
||||
|
||||
'''
|
||||
Internal use only. Handles a raw request with no validation.
|
||||
'''
|
||||
def __request(self) -> None:
|
||||
print(self.__get_prompt(), end='', flush=True)
|
||||
return input()
|
||||
|
||||
'''
|
||||
!! OVERRIDE ON INHERITANCE !!
|
||||
'''
|
||||
def _style_prompt(self, prompt: str) -> str:
|
||||
return prompt
|
||||
|
||||
def __get_prompt(self) -> str:
|
||||
return self._style_prompt(self._prompt)
|
||||
|
||||
def set_prompt(self, prompt: str) -> None:
|
||||
self._prompt = prompt
|
||||
Loading…
Add table
Add a link
Reference in a new issue