From d9830f3f467183a2e97eae346d396ac8b7ae92f4 Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:45:46 -0500 Subject: [PATCH 01/18] Changed: Autoformatted `setup.py` with `black -l 120` --- setup.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/setup.py b/setup.py index f448206..ae4f473 100644 --- a/setup.py +++ b/setup.py @@ -1,14 +1,13 @@ from setuptools import setup, find_packages setup( - name='bullet', - version='2.0.0', - description='Beautiful Python prompts made simple.', - long_description="Extensive support for Python list prompts \ - formatting and colors", - url='https://github.com/Mckinsey666/bullets', - keywords = "cli list prompt customize colors", - author='Mckinsey666', - license='MIT', - packages=find_packages(), - ) \ No newline at end of file + name="bullet", + version="2.0.0", + description="Beautiful Python prompts made simple.", + long_description="Extensive support for Python list prompts formatting and colors", + url="https://github.com/Mckinsey666/bullets", + keywords="cli list prompt customize colors", + author="Mckinsey666", + license="MIT", + packages=find_packages(), +) From 9bef538afb1f81776bcf187f452459016bf73cc8 Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:46:47 -0500 Subject: [PATCH 02/18] Changed: Autoformatted `bullet/__init__.py` with `black -l 120` --- bullet/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bullet/__init__.py b/bullet/__init__.py index 708138b..398a88b 100644 --- a/bullet/__init__.py +++ b/bullet/__init__.py @@ -6,4 +6,4 @@ from .client import Numbers from .client import VerticalPrompt from .client import SlidePrompt -from .client import ScrollBar \ No newline at end of file +from .client import ScrollBar From 8401051b17eefe2b8663405dd9dc69c43f59b08d Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:47:45 -0500 Subject: [PATCH 03/18] Changed: Autoformatted `bullet/charDef.py` with `black -l 120` --- bullet/charDef.py | 56 +++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/bullet/charDef.py b/bullet/charDef.py index b25ab2d..6d68e78 100644 --- a/bullet/charDef.py +++ b/bullet/charDef.py @@ -1,34 +1,34 @@ import sys -# Keyboard mapping macros +# Keyboard mapping macros -LINE_BEGIN_KEY = 1 -LINE_END_KEY = 5 -TAB_KEY = ord('\t') -NEWLINE_KEY = 13 # Could be platform dependent. Advised to check -ESC_KEY = 27 -BACK_SPACE_KEY = 127 -ARROW_KEY_FLAG = 1 << 8 -ARROW_KEY_INT = 91 -ARROW_UP_KEY = 65 + ARROW_KEY_FLAG -ARROW_DOWN_KEY = 66 + ARROW_KEY_FLAG -ARROW_RIGHT_KEY = 67 + ARROW_KEY_FLAG +LINE_BEGIN_KEY = 1 +LINE_END_KEY = 5 +TAB_KEY = ord("\t") +NEWLINE_KEY = 13 # Could be platform dependent. Advised to check +ESC_KEY = 27 +BACK_SPACE_KEY = 127 +ARROW_KEY_FLAG = 1 << 8 +ARROW_KEY_INT = 91 +ARROW_UP_KEY = 65 + ARROW_KEY_FLAG +ARROW_DOWN_KEY = 66 + ARROW_KEY_FLAG +ARROW_RIGHT_KEY = 67 + ARROW_KEY_FLAG ARROW_LEFT_KEY = 68 + ARROW_KEY_FLAG ARROW_KEY_BEGIN = ARROW_UP_KEY -ARROW_KEY_END = ARROW_LEFT_KEY -MOD_KEY_FLAG = 1 << 9 -MOD_KEY_INT = 91 -HOME_KEY = 49 + MOD_KEY_FLAG -INSERT_KEY = 50 + MOD_KEY_FLAG -DELETE_KEY = 51 + MOD_KEY_FLAG -END_KEY = 52 + MOD_KEY_FLAG -PG_UP_KEY = 53 + MOD_KEY_FLAG -PG_DOWN_KEY = 54 + MOD_KEY_FLAG -MOD_KEY_BEGIN = HOME_KEY -MOD_KEY_END = PG_DOWN_KEY -MOD_KEY_DUMMY = 126 -UNDEFINED_KEY = sys.maxsize -BEEP_CHAR = 7 +ARROW_KEY_END = ARROW_LEFT_KEY +MOD_KEY_FLAG = 1 << 9 +MOD_KEY_INT = 91 +HOME_KEY = 49 + MOD_KEY_FLAG +INSERT_KEY = 50 + MOD_KEY_FLAG +DELETE_KEY = 51 + MOD_KEY_FLAG +END_KEY = 52 + MOD_KEY_FLAG +PG_UP_KEY = 53 + MOD_KEY_FLAG +PG_DOWN_KEY = 54 + MOD_KEY_FLAG +MOD_KEY_BEGIN = HOME_KEY +MOD_KEY_END = PG_DOWN_KEY +MOD_KEY_DUMMY = 126 +UNDEFINED_KEY = sys.maxsize +BEEP_CHAR = 7 BACK_SPACE_CHAR = 8 -SPACE_CHAR = ord(' ') -INTERRUPT_KEY = 3 +SPACE_CHAR = ord(" ") +INTERRUPT_KEY = 3 From 03774913552f0d942df9ed6cab9b1ca4a6e51fc2 Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:49:52 -0500 Subject: [PATCH 04/18] Changed: Autoformatted `bullet/client.py` with `black -l 120` --- bullet/client.py | 383 ++++++++++++++++++++++------------------------- 1 file changed, 176 insertions(+), 207 deletions(-) diff --git a/bullet/client.py b/bullet/client.py index 57b4bf1..235c1ae 100644 --- a/bullet/client.py +++ b/bullet/client.py @@ -9,33 +9,29 @@ # Reusable private utility class class myInput: - def __init__(self, - word_color: str = colors.foreground["default"], - password: bool = False, - hidden: str = '*' - ): - ''' Constructor for myInput + def __init__(self, word_color: str = colors.foreground["default"], password: bool = False, hidden: str = "*"): + """ Constructor for myInput Args: word_color: color of input characters. password: Whether input is password. hidden: Character to be outputted for password input. - ''' - self.buffer = [] # Buffer to store entered characters + """ + self.buffer = [] # Buffer to store entered characters self.pos = 0 # Current cursor position self.password = password self.hidden = hidden self.word_color = word_color def moveCursor(self, pos): - ''' Move cursort to pos in buffer. ''' + """ Move cursort to pos in buffer. """ if pos < 0 or pos > len(self.buffer): return False if self.pos <= pos: while self.pos != pos: if self.password: - utils.cprint(self.hidden, color = self.word_color, end = '') + utils.cprint(self.hidden, color=self.word_color, end="") else: - utils.cprint(self.buffer[self.pos], color = self.word_color, end = '') + utils.cprint(self.buffer[self.pos], color=self.word_color, end="") self.pos += 1 else: while self.pos != pos: @@ -44,31 +40,31 @@ def moveCursor(self, pos): return True def insertChar(self, c): - ''' Insert character c to buffer at current position. ''' + """ Insert character c to buffer at current position. """ self.buffer.insert(self.pos, c) if self.password: - utils.cprint(self.hidden * (len(self.buffer) - self.pos), color = self.word_color, end = '') + utils.cprint(self.hidden * (len(self.buffer) - self.pos), color=self.word_color, end="") else: - utils.cprint(''.join(self.buffer[self.pos:]), color = self.word_color, end = '') + utils.cprint("".join(self.buffer[self.pos :]), color=self.word_color, end="") utils.forceWrite("\b" * (len(self.buffer) - self.pos - 1)) self.pos += 1 def getInput(self): - ''' Return content in buffer. ''' - ret = ''.join(self.buffer) + """ Return content in buffer. """ + ret = "".join(self.buffer) self.buffer = [] self.pos = 0 return ret def deleteChar(self): - ''' Remove character at current cursor position. ''' + """ Remove character at current cursor position. """ if self.pos == len(self.buffer): return self.buffer.pop(self.pos) if self.hidden: - utils.forceWrite(self.hidden * (len(self.buffer) - self.pos) + ' ') + utils.forceWrite(self.hidden * (len(self.buffer) - self.pos) + " ") else: - utils.forceWrite(''.join(self.buffer[self.pos:]) + ' ') + utils.forceWrite("".join(self.buffer[self.pos :]) + " ") utils.forceWrite("\b" * (len(self.buffer) - self.pos + 1)) def input(self): @@ -77,18 +73,20 @@ def input(self): i = c if c == UNDEFINED_KEY else ord(c) if i == NEWLINE_KEY: - utils.forceWrite('\n') + utils.forceWrite("\n") return self.getInput() - elif i == LINE_BEGIN_KEY or \ - i == HOME_KEY or \ - i == LINE_END_KEY or \ - i == END_KEY or \ - i == ARROW_UP_KEY or \ - i == ARROW_DOWN_KEY or \ - i == PG_UP_KEY or \ - i == PG_DOWN_KEY or \ - i == TAB_KEY or \ - i == UNDEFINED_KEY: + elif ( + i == LINE_BEGIN_KEY + or i == HOME_KEY + or i == LINE_END_KEY + or i == END_KEY + or i == ARROW_UP_KEY + or i == ARROW_DOWN_KEY + or i == PG_UP_KEY + or i == PG_DOWN_KEY + or i == TAB_KEY + or i == UNDEFINED_KEY + ): return elif i == BACK_SPACE_KEY: if self.moveCursor(self.pos - 1): @@ -101,29 +99,30 @@ def input(self): self.moveCursor(self.pos - 1) else: if self.password: - if c != ' ': + if c != " ": self.insertChar(c) else: self.insertChar(c) + @keyhandler.init class Bullet: def __init__( - self, - prompt: str = "", - choices: list = [], - bullet: str = "●", - bullet_color: str = colors.foreground["default"], - word_color: str = colors.foreground["default"], - word_on_switch: str = colors.REVERSE, - background_color: str = colors.background["default"], - background_on_switch: str = colors.REVERSE, - pad_right = 0, - indent: int = 0, - align = 0, - margin: int = 0, - shift: int = 0, - ): + self, + prompt: str = "", + choices: list = [], + bullet: str = "●", + bullet_color: str = colors.foreground["default"], + word_color: str = colors.foreground["default"], + word_on_switch: str = colors.REVERSE, + background_color: str = colors.background["default"], + background_on_switch: str = colors.REVERSE, + pad_right=0, + indent: int = 0, + align=0, + margin: int = 0, + shift: int = 0, + ): if not choices: raise ValueError("Choices can not be empty!") @@ -150,23 +149,23 @@ def __init__( self.background_on_switch = background_on_switch self.pad_right = pad_right - self.max_width = len(max(self.choices, key = len)) + self.pad_right - + self.max_width = len(max(self.choices, key=len)) + self.pad_right + def renderBullets(self): for i in range(len(self.choices)): self.printBullet(i) - utils.forceWrite('\n') - + utils.forceWrite("\n") + def printBullet(self, idx): - utils.forceWrite(' ' * (self.indent + self.align)) + utils.forceWrite(" " * (self.indent + self.align)) back_color = self.background_on_switch if idx == self.pos else self.background_color word_color = self.word_on_switch if idx == self.pos else self.word_color if idx == self.pos: - utils.cprint("{}".format(self.bullet) + " " * self.margin, self.bullet_color, back_color, end = '') + utils.cprint("{}".format(self.bullet) + " " * self.margin, self.bullet_color, back_color, end="") else: - utils.cprint(" " * (len(self.bullet) + self.margin), self.bullet_color, back_color, end = '') - utils.cprint(self.choices[idx], word_color, back_color, end = '') - utils.cprint(' ' * (self.max_width - len(self.choices[idx])), on = back_color, end = '') + utils.cprint(" " * (len(self.bullet) + self.margin), self.bullet_color, back_color, end="") + utils.cprint(self.choices[idx], word_color, back_color, end="") + utils.cprint(" " * (self.max_width - len(self.choices[idx])), on=back_color, end="") utils.moveCursorHead() @keyhandler.register(ARROW_UP_KEY) @@ -205,12 +204,12 @@ def interrupt(self): utils.moveCursorDown(len(self.choices) - self.pos) raise KeyboardInterrupt - def launch(self, default = None): + def launch(self, default=None): if self.prompt: - utils.forceWrite(' ' * self.indent + self.prompt + '\n') - utils.forceWrite('\n' * self.shift) + utils.forceWrite(" " * self.indent + self.prompt + "\n") + utils.forceWrite("\n" * self.shift) if default is not None: - if type(default).__name__ != 'int': + if type(default).__name__ != "int": raise TypeError("'default' should be an integer value!") if not 0 <= int(default) < len(self.choices): raise ValueError("'default' should be in range [0, len(choices))!") @@ -223,25 +222,26 @@ def launch(self, default = None): if ret is not None: return ret + @keyhandler.init class Check: def __init__( - self, - prompt: str = "", - choices: list = [], - check: str = "√", - check_color: str = colors.foreground["default"], - check_on_switch: str = colors.REVERSE, - word_color: str = colors.foreground["default"], - word_on_switch: str = colors.REVERSE, - background_color: str = colors.background["default"], - background_on_switch: str = colors.REVERSE, - pad_right = 0, - indent: int = 0, - align = 0, - margin: int = 0, - shift: int = 0, - ): + self, + prompt: str = "", + choices: list = [], + check: str = "√", + check_color: str = colors.foreground["default"], + check_on_switch: str = colors.REVERSE, + word_color: str = colors.foreground["default"], + word_on_switch: str = colors.REVERSE, + background_color: str = colors.background["default"], + background_on_switch: str = colors.REVERSE, + pad_right=0, + indent: int = 0, + align=0, + margin: int = 0, + shift: int = 0, + ): if not choices: raise ValueError("Choices can not be empty!") @@ -270,24 +270,24 @@ def __init__( self.background_on_switch = background_on_switch self.pad_right = pad_right - self.max_width = len(max(self.choices, key = len)) + self.pad_right - + self.max_width = len(max(self.choices, key=len)) + self.pad_right + def renderRows(self): for i in range(len(self.choices)): self.printRow(i) - utils.forceWrite('\n') - + utils.forceWrite("\n") + def printRow(self, idx): - utils.forceWrite(' ' * (self.indent + self.align)) + utils.forceWrite(" " * (self.indent + self.align)) back_color = self.background_on_switch if idx == self.pos else self.background_color word_color = self.word_on_switch if idx == self.pos else self.word_color check_color = self.check_on_switch if idx == self.pos else self.check_color if self.checked[idx]: - utils.cprint("{}".format(self.check) + " " * self.margin, check_color, back_color, end = '') + utils.cprint("{}".format(self.check) + " " * self.margin, check_color, back_color, end="") else: - utils.cprint(" " * (len(self.check) + self.margin), check_color, back_color, end = '') - utils.cprint(self.choices[idx], word_color, back_color, end = '') - utils.cprint(' ' * (self.max_width - len(self.choices[idx])), on = back_color, end = '') + utils.cprint(" " * (len(self.check) + self.margin), check_color, back_color, end="") + utils.cprint(self.choices[idx], word_color, back_color, end="") + utils.cprint(" " * (self.max_width - len(self.choices[idx])), on=back_color, end="") utils.moveCursorHead() @keyhandler.register(SPACE_CHAR) @@ -332,16 +332,16 @@ def interrupt(self): utils.moveCursorDown(len(self.choices) - self.pos) raise KeyboardInterrupt - def launch(self, default = None): + def launch(self, default=None): if self.prompt: - utils.forceWrite(' ' * self.indent + self.prompt + '\n') - utils.forceWrite('\n' * self.shift) + utils.forceWrite(" " * self.indent + self.prompt + "\n") + utils.forceWrite("\n" * self.shift) if default is None: default = [] if default: - if not type(default).__name__ == 'list': + if not type(default).__name__ == "list": raise TypeError("`default` should be a list of integers!") - if not all([type(i).__name__ == 'int' for i in default]): + if not all([type(i).__name__ == "int" for i in default]): raise TypeError("Indices in `default` should be integer type!") if not all([0 <= i < len(self.choices) for i in default]): raise ValueError("All indices in `default` should be in range [0, len(choices))!") @@ -355,15 +355,9 @@ def launch(self, default = None): if ret is not None: return ret + class YesNo: - def __init__( - self, - prompt, - default="y", - indent=0, - word_color=colors.foreground["default"], - prompt_prefix="[y/n] " - ): + def __init__(self, prompt, default="y", indent=0, word_color=colors.foreground["default"], prompt_prefix="[y/n] "): self.indent = indent if not prompt: raise ValueError("Prompt can not be empty!") @@ -378,33 +372,26 @@ def valid(self, ans): if "yes".startswith(ans) or "no".startswith(ans): return True utils.moveCursorUp(1) - utils.forceWrite(' ' * self.indent + self.prompt + self.default) - utils.forceWrite(' ' * len(ans)) - utils.forceWrite('\b' * len(ans)) + utils.forceWrite(" " * self.indent + self.prompt + self.default) + utils.forceWrite(" " * len(ans)) + utils.forceWrite("\b" * len(ans)) return False def launch(self): - my_input = myInput(word_color = self.word_color) - utils.forceWrite(' ' * self.indent + self.prompt + self.default) + my_input = myInput(word_color=self.word_color) + utils.forceWrite(" " * self.indent + self.prompt + self.default) while True: ans = my_input.input() if ans == "": - return self.default.strip('[]') == 'y' + return self.default.strip("[]") == "y" if not self.valid(ans): continue else: - return 'yes'.startswith(ans.lower()) + return "yes".startswith(ans.lower()) + class Input: - def __init__( - self, - prompt, - default = "", - indent = 0, - word_color = colors.foreground["default"], - strip = False, - pattern = "" - ): + def __init__(self, prompt, default="", indent=0, word_color=colors.foreground["default"], strip=False, pattern=""): self.indent = indent if not prompt: raise ValueError("Prompt can not be empty!") @@ -413,19 +400,19 @@ def __init__( self.word_color = word_color self.strip = strip self.pattern = pattern - + def valid(self, ans): if not bool(re.match(self.pattern, ans)): utils.moveCursorUp(1) - utils.forceWrite(' ' * self.indent + self.prompt + self.default) - utils.forceWrite(' ' * len(ans)) - utils.forceWrite('\b' * len(ans)) + utils.forceWrite(" " * self.indent + self.prompt + self.default) + utils.forceWrite(" " * len(ans)) + utils.forceWrite("\b" * len(ans)) return False return True def launch(self): - utils.forceWrite(' ' * self.indent + self.prompt + self.default) - sess = myInput(word_color = self.word_color) + utils.forceWrite(" " * self.indent + self.prompt + self.default) + sess = myInput(word_color=self.word_color) if not self.pattern: while True: result = sess.input() @@ -434,9 +421,9 @@ def launch(self): return self.default[1:-1] else: utils.moveCursorUp(1) - utils.forceWrite(' ' * self.indent + self.prompt + self.default) - utils.forceWrite(' ' * len(result)) - utils.forceWrite('\b' * len(result)) + utils.forceWrite(" " * self.indent + self.prompt + self.default) + utils.forceWrite(" " * len(result)) + utils.forceWrite("\b" * len(result)) else: break else: @@ -446,59 +433,49 @@ def launch(self): break return result.strip() if self.strip else result + class Password: - def __init__( - self, - prompt, - indent = 0, - hidden = '*', - word_color = colors.foreground["default"] - ): + def __init__(self, prompt, indent=0, hidden="*", word_color=colors.foreground["default"]): self.indent = indent if not prompt: raise ValueError("Prompt can not be empty!") self.prompt = prompt self.hidden = hidden self.word_color = word_color - + def launch(self): - utils.forceWrite(' ' * self.indent + self.prompt) - return myInput(password = True, hidden = self.hidden, word_color = self.word_color).input() + utils.forceWrite(" " * self.indent + self.prompt) + return myInput(password=True, hidden=self.hidden, word_color=self.word_color).input() + class Numbers: - def __init__( - self, - prompt, - indent = 0, - word_color = colors.foreground["default"], - type = float - ): + def __init__(self, prompt, indent=0, word_color=colors.foreground["default"], type=float): self.indent = indent if not prompt: raise ValueError("Prompt can not be empty!") self.prompt = prompt self.word_color = word_color self.type = type - + def valid(self, ans): try: float(ans) return True except: utils.moveCursorUp(1) - utils.forceWrite(' ' * self.indent + self.prompt) - utils.forceWrite(' ' * len(ans)) - utils.forceWrite('\b' * len(ans)) + utils.forceWrite(" " * self.indent + self.prompt) + utils.forceWrite(" " * len(ans)) + utils.forceWrite("\b" * len(ans)) return False - - def launch(self, default = None): + + def launch(self, default=None): if default is not None: try: float(default) except: raise ValueError("`default` should be numeric value!") - my_input = myInput(word_color = self.word_color) - utils.forceWrite(' ' * self.indent + self.prompt) + my_input = myInput(word_color=self.word_color) + utils.forceWrite(" " * self.indent + self.prompt) while True: ans = my_input.input() if ans == "" and default is not None: @@ -508,14 +485,9 @@ def launch(self, default = None): else: return self.type(ans) + class VerticalPrompt: - def __init__( - self, - components, - spacing = 1, - separator = "", - separator_color = colors.foreground["default"] - ): + def __init__(self, components, spacing=1, separator="", separator_color=colors.foreground["default"]): if not components: raise ValueError("Prompt components cannot be empty!") @@ -523,44 +495,45 @@ def __init__( self.spacing = spacing self.separator = separator self.separator_color = separator_color - self.separator_len = len(max(self.components, key = lambda ui: len(ui.prompt)).prompt) + self.separator_len = len(max(self.components, key=lambda ui: len(ui.prompt)).prompt) self.result = [] def summarize(self): for prompt, answer in self.result: print(prompt, answer) - + def launch(self): for ui in self.components: self.result.append((ui.prompt, ui.launch())) if not self.separator: utils.forceWrite("\n" * self.spacing) else: - utils.cprint(self.separator * self.separator_len, color = self.separator_color) + utils.cprint(self.separator * self.separator_len, color=self.separator_color) return self.result + @keyhandler.init class ScrollBar: def __init__( - self, - prompt: str = "", - choices: list = [], - pointer = "→", - up_indicator: str = "↑", - down_indicator: str = "↓", - pointer_color: str = colors.foreground["default"], - indicator_color: str = colors.foreground["default"], - word_color: str = colors.foreground["default"], - word_on_switch: str = colors.REVERSE, - background_color: str = colors.background["default"], - background_on_switch: str = colors.REVERSE, - pad_right = 0, - indent: int = 0, - align = 0, - margin: int = 0, - shift: int = 0, - height = None - ): + self, + prompt: str = "", + choices: list = [], + pointer="→", + up_indicator: str = "↑", + down_indicator: str = "↓", + pointer_color: str = colors.foreground["default"], + indicator_color: str = colors.foreground["default"], + word_color: str = colors.foreground["default"], + word_on_switch: str = colors.REVERSE, + background_color: str = colors.background["default"], + background_on_switch: str = colors.REVERSE, + pad_right=0, + indent: int = 0, + align=0, + margin: int = 0, + shift: int = 0, + height=None, + ): if not choices: raise ValueError("Choices can not be empty!") @@ -571,7 +544,7 @@ def __init__( self.prompt = prompt self.choices = choices - self.pos = 0 # Position of item at current cursor. + self.pos = 0 # Position of item at current cursor. self.indent = indent self.align = align @@ -589,47 +562,46 @@ def __init__( self.background_color = background_color self.background_on_switch = background_on_switch - self.max_width = len(max(self.choices, key = len)) + self.pad_right - self.height = min(len(self.choices), # Size of the scrollbar window. - height if height else len(self.choices)) + self.max_width = len(max(self.choices, key=len)) + self.pad_right + self.height = min(len(self.choices), height if height else len(self.choices)) # Size of the scrollbar window. - self.top = 0 # Position of the top-most item rendered. + self.top = 0 # Position of the top-most item rendered. # scrollbar won't move if pos is in range [top, top + height) # scrollbar moves up if pos < top # scrollbar moves down if pos > top + height - 1 - + def renderRows(self): - self.printRow(self.top, indicator = self.up_indicator if self.top != 0 else '') - utils.forceWrite('\n') + self.printRow(self.top, indicator=self.up_indicator if self.top != 0 else "") + utils.forceWrite("\n") i = self.top for i in range(self.top + 1, self.top + self.height - 1): self.printRow(i) - utils.forceWrite('\n') + utils.forceWrite("\n") if i < len(self.choices) - 1: - self.printRow(i + 1, indicator= self.down_indicator if self.top + self.height != len(self.choices) else '') - utils.forceWrite('\n') - - def printRow(self, idx, indicator=''): - utils.forceWrite(' ' * (self.indent + self.align)) + self.printRow(i + 1, indicator=self.down_indicator if self.top + self.height != len(self.choices) else "") + utils.forceWrite("\n") + + def printRow(self, idx, indicator=""): + utils.forceWrite(" " * (self.indent + self.align)) back_color = self.background_on_switch if idx == self.pos else self.background_color word_color = self.word_on_switch if idx == self.pos else self.word_color if idx == self.pos: - utils.cprint("{}".format(self.pointer) + " " * self.margin, self.pointer_color, back_color, end = '') + utils.cprint("{}".format(self.pointer) + " " * self.margin, self.pointer_color, back_color, end="") else: - utils.cprint(" " * (len(self.pointer) + self.margin), self.pointer_color, back_color, end = '') - utils.cprint(self.choices[idx], word_color, back_color, end = '') - utils.cprint(' ' * (self.max_width - len(self.choices[idx])), on = back_color, end = '') - utils.cprint(indicator, color = self.indicator_color, end = '') + utils.cprint(" " * (len(self.pointer) + self.margin), self.pointer_color, back_color, end="") + utils.cprint(self.choices[idx], word_color, back_color, end="") + utils.cprint(" " * (self.max_width - len(self.choices[idx])), on=back_color, end="") + utils.cprint(indicator, color=self.indicator_color, end="") utils.moveCursorHead() @keyhandler.register(ARROW_UP_KEY) def moveUp(self): if self.pos == self.top: if self.top == 0: - return # Already reached top-most position + return # Already reached top-most position else: utils.clearConsoleDown(self.height) self.pos, self.top = self.pos - 1, self.top - 1 @@ -639,9 +611,8 @@ def moveUp(self): utils.clearLine() old_pos = self.pos self.pos -= 1 - show_arrow = (old_pos == self.top + self.height - 1 and - self.top + self.height < len(self.choices)) - self.printRow(old_pos, indicator = self.down_indicator if show_arrow else '') + show_arrow = old_pos == self.top + self.height - 1 and self.top + self.height < len(self.choices) + self.printRow(old_pos, indicator=self.down_indicator if show_arrow else "") utils.moveCursorUp(1) self.printRow(self.pos) @@ -660,8 +631,8 @@ def moveDown(self): utils.clearLine() old_pos = self.pos self.pos += 1 - show_arrow = (old_pos == self.top and self.top > 0) - self.printRow(old_pos, indicator = self.up_indicator if show_arrow else '') + show_arrow = old_pos == self.top and self.top > 0 + self.printRow(old_pos, indicator=self.up_indicator if show_arrow else "") utils.moveCursorDown(1) self.printRow(self.pos) @@ -681,8 +652,8 @@ def interrupt(self): def launch(self): if self.prompt: - utils.forceWrite(' ' * self.indent + self.prompt + '\n') - utils.forceWrite('\n' * self.shift) + utils.forceWrite(" " * self.indent + self.prompt + "\n") + utils.forceWrite("\n" * self.shift) self.renderRows() utils.moveCursorUp(self.height) with cursor.hide(): @@ -691,11 +662,9 @@ def launch(self): if ret is not None: return ret + class SlidePrompt: - def __init__( - self, - components - ): + def __init__(self, components): self.idx = 0 self.components = components if not components: From 3ccbfdbdb18c47cbf2ec83a652d3dbed52c260e8 Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:50:25 -0500 Subject: [PATCH 05/18] Changed: Autoformatted `bullet/colors.py` with `black -l 120` --- bullet/colors.py | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/bullet/colors.py b/bullet/colors.py index 82da9ff..f21c738 100644 --- a/bullet/colors.py +++ b/bullet/colors.py @@ -1,32 +1,32 @@ foreground = { - "black" : "\u001b[30m", - "red" : "\u001b[31m", - "green" : "\u001b[32m", - "yellow" : "\u001b[33m", - "blue" : "\u001b[34m", - "magenta" : "\u001b[35m", - "cyan" : "\u001b[36m", - "white" : "\u001b[37m", - "default" : "\u001b[39m", + "black": "\u001b[30m", + "red": "\u001b[31m", + "green": "\u001b[32m", + "yellow": "\u001b[33m", + "blue": "\u001b[34m", + "magenta": "\u001b[35m", + "cyan": "\u001b[36m", + "white": "\u001b[37m", + "default": "\u001b[39m", } background = { - "black" : "\u001b[40m", - "red" : "\u001b[41m", - "green" : "\u001b[42m", - "yellow" : "\u001b[43m", - "blue" : "\u001b[44m", - "magenta" : "\u001b[45m", - "cyan" : "\u001b[46m", - "white" : "\u001b[47m", - "default" : "\u001b[49m", + "black": "\u001b[40m", + "red": "\u001b[41m", + "green": "\u001b[42m", + "yellow": "\u001b[43m", + "blue": "\u001b[44m", + "magenta": "\u001b[45m", + "cyan": "\u001b[46m", + "white": "\u001b[47m", + "default": "\u001b[49m", } REVERSE = "\u001b[7m" RESET_REVERSE = "\u001b[27m" RESET = "\u001b[0m" - + + def bright(color): return color[:-1] + ";1m" - From b78e8644401999a57dcc8493351040e4662b653f Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:51:08 -0500 Subject: [PATCH 06/18] Changed: Autoformatted `bullet/cursor.py` with `black -l 120` --- bullet/cursor.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/bullet/cursor.py b/bullet/cursor.py index fbf6b13..27889f6 100644 --- a/bullet/cursor.py +++ b/bullet/cursor.py @@ -4,13 +4,13 @@ # Show and hide cursors -if os.name == 'nt': +if os.name == "nt": import msvcrt import ctypes class _CursorInfo(ctypes.Structure): - _fields_ = [("size", ctypes.c_int), - ("visible", ctypes.c_byte)] + _fields_ = [("size", ctypes.c_int), ("visible", ctypes.c_byte)] + @contextmanager def hide(): @@ -20,24 +20,26 @@ def hide(): finally: _show_cursor() + def _hide_cursor(): - if os.name == 'nt': + if os.name == "nt": ci = _CursorInfo() handle = ctypes.windll.kernel32.GetStdHandle(-11) ctypes.windll.kernel32.GetConsoleCursorInfo(handle, ctypes.byref(ci)) ci.visible = False ctypes.windll.kernel32.SetConsoleCursorInfo(handle, ctypes.byref(ci)) - elif os.name == 'posix': + elif os.name == "posix": sys.stdout.write("\033[?25l") sys.stdout.flush() + def _show_cursor(): - if os.name == 'nt': + if os.name == "nt": ci = _CursorInfo() handle = ctypes.windll.kernel32.GetStdHandle(-11) ctypes.windll.kernel32.GetConsoleCursorInfo(handle, ctypes.byref(ci)) ci.visible = True ctypes.windll.kernel32.SetConsoleCursorInfo(handle, ctypes.byref(ci)) - elif os.name == 'posix': + elif os.name == "posix": sys.stdout.write("\033[?25h") sys.stdout.flush() From f9c7fad9118955b2a57700d06a9afb2af4238c76 Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:52:37 -0500 Subject: [PATCH 07/18] Changed: Autoformatted `bullet/emojis.py` with `black -l 120` --- bullet/emojis.py | 50 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/bullet/emojis.py b/bullet/emojis.py index 75bf7fd..f2025f6 100644 --- a/bullet/emojis.py +++ b/bullet/emojis.py @@ -1,10 +1,42 @@ feelings = [ - "😀", "😄", "😁", "😆", "😅", - "🤣", "😂", "🙂", "😉", "😊", - "😍", "😘", "😋", "😜", "🤪", - "🤨", "😑", "😒", "🙄", "😬", - "😔", "😪", "😴", "🤒", "🤧", - "😵", "😟", "😲", "😥", "😭", - "😖", "😓", "😩", "😤", "😠", - "🤖", "👽", "👻", "👹", "🤡" -] \ No newline at end of file + "😀", + "😄", + "😁", + "😆", + "😅", + "🤣", + "😂", + "🙂", + "😉", + "😊", + "😍", + "😘", + "😋", + "😜", + "🤪", + "🤨", + "😑", + "😒", + "🙄", + "😬", + "😔", + "😪", + "😴", + "🤒", + "🤧", + "😵", + "😟", + "😲", + "😥", + "😭", + "😖", + "😓", + "😩", + "😤", + "😠", + "🤖", + "👽", + "👻", + "👹", + "🤡", +] From 00599bd58b0123cc18be4e72ea2fd7b088a085ad Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:53:38 -0500 Subject: [PATCH 08/18] Changed: Autoformatted `bullet/keyhandler.py` with `black -l 120` --- bullet/keyhandler.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/bullet/keyhandler.py b/bullet/keyhandler.py index 0e08b55..2521e73 100644 --- a/bullet/keyhandler.py +++ b/bullet/keyhandler.py @@ -1,32 +1,37 @@ from .charDef import UNDEFINED_KEY from . import utils + def register(key): - ''' + """ Mark the function with the key code that it handles so that it can found by _KeyHandlerRegisterer. - ''' + """ + def wrap(func): - if not hasattr(func, '_handle_key'): - setattr(func, '_handle_key', [key]) + if not hasattr(func, "_handle_key"): + setattr(func, "_handle_key", [key]) else: func._handle_key.append(key) return func + return wrap + def init(cls): - ''' Rewrite the class to include the _KeyHandlerRegisterer metaclass. ''' + """ Rewrite the class to include the _KeyHandlerRegisterer metaclass. """ return _KeyHandlerRegisterer(cls.__name__, cls.__bases__, cls.__dict__.copy()) + class _KeyHandlerRegisterer(type): def __new__(metacls, name, bases, classdict): result = super().__new__(metacls, name, bases, classdict) - if not hasattr(result, '_key_handler'): - setattr(result, '_key_handler', {}) - setattr(result, 'handle_input', _KeyHandlerRegisterer.handle_input) + if not hasattr(result, "_key_handler"): + setattr(result, "_key_handler", {}) + setattr(result, "handle_input", _KeyHandlerRegisterer.handle_input) for value in classdict.values(): - handled_keys = getattr(value, '_handle_key', []) + handled_keys = getattr(value, "_handle_key", []) for key in handled_keys: result._key_handler[key] = value From 9763f21509021f5642244cbc6c9b71899a1d7574 Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:54:04 -0500 Subject: [PATCH 09/18] Changed: Autoformatted `bullet/styles.py` with `black -l 120` --- bullet/styles.py | 72 ++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 39 deletions(-) diff --git a/bullet/styles.py b/bullet/styles.py index a44e8c6..53c7e94 100644 --- a/bullet/styles.py +++ b/bullet/styles.py @@ -1,58 +1,52 @@ from . import colors -Example = { - "choices" : ["Item {}".format(i) for i in range(1, 6)], - "margin" : 2, - "pad_right" : 5, - "align" : 5, - "shift" : 0 -} +Example = {"choices": ["Item {}".format(i) for i in range(1, 6)], "margin": 2, "pad_right": 5, "align": 5, "shift": 0} # Styles for Bullet Class Ocean = { - "bullet" : "", - "bullet_color" : colors.foreground["cyan"], - "word_color" : colors.foreground["cyan"], - "word_on_switch" : colors.foreground["blue"], - "background_color" : colors.background["blue"], - "background_on_switch" : colors.background["cyan"] + "bullet": "", + "bullet_color": colors.foreground["cyan"], + "word_color": colors.foreground["cyan"], + "word_on_switch": colors.foreground["blue"], + "background_color": colors.background["blue"], + "background_on_switch": colors.background["cyan"], } Greece = { - "bullet" : "α", - "bullet_color" : colors.foreground["white"], - "word_color" : colors.foreground["blue"], - "word_on_switch" : colors.foreground["white"], - "background_color" : colors.background["white"], - "background_on_switch" : colors.background["blue"] + "bullet": "α", + "bullet_color": colors.foreground["white"], + "word_color": colors.foreground["blue"], + "word_on_switch": colors.foreground["white"], + "background_color": colors.background["white"], + "background_on_switch": colors.background["blue"], } Christmas = { - "bullet" : "★", - "bullet_color" : colors.foreground["white"], - "word_color" : colors.foreground["white"], - "word_on_switch" : colors.foreground["red"], - "background_color" : colors.background["red"], - "background_on_switch" : colors.background["green"] + "bullet": "★", + "bullet_color": colors.foreground["white"], + "word_color": colors.foreground["white"], + "word_on_switch": colors.foreground["red"], + "background_color": colors.background["red"], + "background_on_switch": colors.background["green"], } Lime = { - "bullet" : "⊙", - "bullet_color" : colors.foreground["green"], - "word_color" : colors.foreground["yellow"], - "word_on_switch" : colors.foreground["green"], - "background_color" : colors.background["green"], - "background_on_switch" : colors.background["yellow"] + "bullet": "⊙", + "bullet_color": colors.foreground["green"], + "word_color": colors.foreground["yellow"], + "word_on_switch": colors.foreground["green"], + "background_color": colors.background["green"], + "background_on_switch": colors.background["yellow"], } # Use other default styles! Exam = { - "check" : "√", - "check_color" : colors.foreground["red"], - "check_on_switch" : colors.foreground["red"], - "word_color" : colors.foreground["black"], - "word_on_switch" : colors.foreground["black"], - "background_color" : colors.background["white"], - "background_on_switch" : colors.background["yellow"] -} \ No newline at end of file + "check": "√", + "check_color": colors.foreground["red"], + "check_on_switch": colors.foreground["red"], + "word_color": colors.foreground["black"], + "word_on_switch": colors.foreground["black"], + "background_color": colors.background["white"], + "background_on_switch": colors.background["yellow"], +} From 96233fcb1ed89b9472bb47922a6998274fca7070 Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:54:23 -0500 Subject: [PATCH 10/18] Changed: Autoformatted `bullet/utils.py` with `black -l 120` --- bullet/utils.py | 72 ++++++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/bullet/utils.py b/bullet/utils.py index 255df2b..852a0a4 100644 --- a/bullet/utils.py +++ b/bullet/utils.py @@ -8,8 +8,9 @@ COLUMNS, _ = shutil.get_terminal_size() ## Size of console + def mygetc(): - ''' Get raw characters from input. ''' + """ Get raw characters from input. """ fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) try: @@ -19,19 +20,22 @@ def mygetc(): termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) return ch + def getchar(): - ''' Character input parser. ''' + """ Character input parser. """ c = mygetc() - if ord(c) == LINE_BEGIN_KEY or \ - ord(c) == LINE_END_KEY or \ - ord(c) == TAB_KEY or \ - ord(c) == INTERRUPT_KEY or \ - ord(c) == NEWLINE_KEY: - return c - + if ( + ord(c) == LINE_BEGIN_KEY + or ord(c) == LINE_END_KEY + or ord(c) == TAB_KEY + or ord(c) == INTERRUPT_KEY + or ord(c) == NEWLINE_KEY + ): + return c + elif ord(c) == BACK_SPACE_KEY: return c - + elif ord(c) == ESC_KEY: combo = mygetc() if ord(combo) == MOD_KEY_INT: @@ -56,58 +60,64 @@ def getchar(): return UNDEFINED_KEY + # Basic command line functions + def moveCursorLeft(n): - ''' Move cursor left n columns. ''' + """ Move cursor left n columns. """ forceWrite("\033[{}D".format(n)) + def moveCursorRight(n): - ''' Move cursor right n columns. ''' + """ Move cursor right n columns. """ forceWrite("\033[{}C".format(n)) - + + def moveCursorUp(n): - ''' Move cursor up n rows. ''' + """ Move cursor up n rows. """ forceWrite("\033[{}A".format(n)) + def moveCursorDown(n): - ''' Move cursor down n rows. ''' + """ Move cursor down n rows. """ forceWrite("\033[{}B".format(n)) + def moveCursorHead(): - ''' Move cursor to the start of line. ''' + """ Move cursor to the start of line. """ forceWrite("\r") + def clearLine(): - ''' Clear content of one line on the console. ''' + """ Clear content of one line on the console. """ forceWrite(" " * COLUMNS) moveCursorHead() - + + def clearConsoleUp(n): - ''' Clear n console rows (bottom up). ''' + """ Clear n console rows (bottom up). """ for _ in range(n): clearLine() moveCursorUp(1) + def clearConsoleDown(n): - ''' Clear n console rows (top down). ''' + """ Clear n console rows (top down). """ for _ in range(n): clearLine() moveCursorDown(1) moveCursorUp(n) -def forceWrite(s, end = ''): - ''' Dump everthing in the buffer to the console. ''' + +def forceWrite(s, end=""): + """ Dump everthing in the buffer to the console. """ sys.stdout.write(s + end) sys.stdout.flush() -def cprint( - s: str, - color: str = colors.foreground["default"], - on: str = colors.background["default"], - end: str = '\n' - ): - ''' Colored print function. + +def cprint(s: str, color: str = colors.foreground["default"], on: str = colors.background["default"], end: str = "\n"): + """ Colored print function. Args: s: The string to be printed. color: The color of the string. @@ -115,5 +125,5 @@ def cprint( end: Last character appended. Returns: None - ''' - forceWrite(on + color + s + colors.RESET, end = end) + """ + forceWrite(on + color + s + colors.RESET, end=end) From eaa4012809aac8075b8f14c93210a46326e327c7 Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:55:01 -0500 Subject: [PATCH 11/18] Changed: Autoformatted `examples/check.py` with `black -l 120` --- examples/check.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/examples/check.py b/examples/check.py index 40c6480..208f812 100644 --- a/examples/check.py +++ b/examples/check.py @@ -1,6 +1,7 @@ from bullet import Check, keyhandler, styles from bullet.charDef import NEWLINE_KEY + class MinMaxCheck(Check): def __init__(self, min_selections=0, max_selections=None, *args, **kwargs): super().__init__(*args, **kwargs) @@ -17,13 +18,10 @@ def accept(self): def valid(self): return self.min_selections <= sum(1 for c in self.checked if c) <= self.max_selections + client = MinMaxCheck( - prompt = "Choose 2 or 3 from the list: ", - min_selections = 2, - max_selections = 3, - **styles.Example, - **styles.Exam + prompt="Choose 2 or 3 from the list: ", min_selections=2, max_selections=3, **styles.Example, **styles.Exam ) -print('\n', end = '') +print("\n", end="") result = client.launch() print(result) From e6d4f81043df2e451a39df1ed73404f2b87311e5 Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:55:24 -0500 Subject: [PATCH 12/18] Changed: Autoformatted `examples/classic.py` with `black -l 120` --- examples/classic.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/classic.py b/examples/classic.py index 67cd841..e35dbaf 100644 --- a/examples/classic.py +++ b/examples/classic.py @@ -1,15 +1,15 @@ from bullet import Bullet cli = Bullet( - prompt = "\nPlease choose a fruit: ", - choices = ["apple", "banana", "orange", "watermelon", "strawberry"], - indent = 0, - align = 5, - margin = 2, - shift = 0, - bullet = "", - pad_right = 5 - ) + prompt="\nPlease choose a fruit: ", + choices=["apple", "banana", "orange", "watermelon", "strawberry"], + indent=0, + align=5, + margin=2, + shift=0, + bullet="", + pad_right=5, +) result = cli.launch() print("You chose:", result) From 005afcaf68d2d842fbfbd5b1258834b479a711bd Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:55:43 -0500 Subject: [PATCH 13/18] Changed: Autoformatted `examples/colorful.py` with `black -l 120` --- examples/colorful.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/examples/colorful.py b/examples/colorful.py index 6b2cb51..6720e68 100644 --- a/examples/colorful.py +++ b/examples/colorful.py @@ -2,20 +2,20 @@ from bullet import colors cli = Bullet( - prompt = "\nPlease choose a fruit: ", - choices = ["apple", "banana", "orange", "watermelon", "strawberry"], - indent = 0, - align = 5, - margin = 2, - shift = 0, - bullet = "●", - bullet_color=colors.foreground["magenta"], - word_color=colors.foreground["red"], - word_on_switch=colors.foreground["green"], - background_color=colors.background["cyan"], - background_on_switch=colors.background["yellow"], - pad_right = 5 - ) + prompt="\nPlease choose a fruit: ", + choices=["apple", "banana", "orange", "watermelon", "strawberry"], + indent=0, + align=5, + margin=2, + shift=0, + bullet="●", + bullet_color=colors.foreground["magenta"], + word_color=colors.foreground["red"], + word_on_switch=colors.foreground["green"], + background_color=colors.background["cyan"], + background_on_switch=colors.background["yellow"], + pad_right=5, +) result = cli.launch() print("You chose:", result) From 8bcbe46805c39d24f503bc212b5e21bde4cca82c Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:56:01 -0500 Subject: [PATCH 14/18] Changed: Autoformatted `examples/more.py` with `black -l 120` --- examples/more.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/more.py b/examples/more.py index ddf9ffe..eb4983e 100644 --- a/examples/more.py +++ b/examples/more.py @@ -2,11 +2,7 @@ from bullet import Check from bullet import styles -client = Check( - prompt = "Choose from a list: ", - **styles.Example, - **styles.Exam -) -print('\n', end = '') +client = Check(prompt="Choose from a list: ", **styles.Example, **styles.Exam) +print("\n", end="") result = client.launch() -print(result) \ No newline at end of file +print(result) From 0bb158aa6c147549327b0723fd10fc07276a73f1 Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:56:40 -0500 Subject: [PATCH 15/18] Changed: Autoformatted `examples/prompt.py` with `black -l 120` --- examples/prompt.py | 78 ++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 41 deletions(-) diff --git a/examples/prompt.py b/examples/prompt.py index 42b9e4f..5f53803 100644 --- a/examples/prompt.py +++ b/examples/prompt.py @@ -4,50 +4,46 @@ cli = SlidePrompt( [ - YesNo("Are you a student? ", - word_color = colors.foreground["yellow"]), - YesNo("Are you a good student? ", - default = 'y', - word_color = colors.foreground["yellow"]), - Input("Who are you? ", - default = "Batman", - word_color = colors.foreground["yellow"]), - Input("Really? ", - word_color = colors.foreground["yellow"]), - Numbers("How old are you? ", - word_color = colors.foreground["yellow"], - type = int), - Bullet("What is your favorite programming language? ", - choices = ["C++", "Python", "Javascript", "Not here!"], - bullet = " >", - margin = 2, - bullet_color = colors.bright(colors.foreground["cyan"]), - background_color = colors.background["black"], - background_on_switch = colors.background["black"], - word_color = colors.foreground["white"], - word_on_switch = colors.foreground["white"] + YesNo("Are you a student? ", word_color=colors.foreground["yellow"]), + YesNo("Are you a good student? ", default="y", word_color=colors.foreground["yellow"]), + Input("Who are you? ", default="Batman", word_color=colors.foreground["yellow"]), + Input("Really? ", word_color=colors.foreground["yellow"]), + Numbers("How old are you? ", word_color=colors.foreground["yellow"], type=int), + Bullet( + "What is your favorite programming language? ", + choices=["C++", "Python", "Javascript", "Not here!"], + bullet=" >", + margin=2, + bullet_color=colors.bright(colors.foreground["cyan"]), + background_color=colors.background["black"], + background_on_switch=colors.background["black"], + word_color=colors.foreground["white"], + word_on_switch=colors.foreground["white"], ), - Check("What food do you like? ", - choices = ["🍣 Sushi", - "🍜 Ramen", - "🌭 Hotdogs", - "🍔 Hamburgers", - "🍕 Pizza", - "🍝 Spaghetti", - "🍰 Cakes", - "🍩 Donuts"], - check = " √", - margin = 2, - check_color = colors.bright(colors.foreground["red"]), - check_on_switch = colors.bright(colors.foreground["red"]), - background_color = colors.background["black"], - background_on_switch = colors.background["white"], - word_color = colors.foreground["white"], - word_on_switch = colors.foreground["black"] + Check( + "What food do you like? ", + choices=[ + "🍣 Sushi", + "🍜 Ramen", + "🌭 Hotdogs", + "🍔 Hamburgers", + "🍕 Pizza", + "🍝 Spaghetti", + "🍰 Cakes", + "🍩 Donuts", + ], + check=" √", + margin=2, + check_color=colors.bright(colors.foreground["red"]), + check_on_switch=colors.bright(colors.foreground["red"]), + background_color=colors.background["black"], + background_on_switch=colors.background["white"], + word_color=colors.foreground["white"], + word_on_switch=colors.foreground["black"], ), ] ) -print('\n') +print("\n") result = cli.launch() -cli.summarize() \ No newline at end of file +cli.summarize() From e924d17dfb1e31de97ab820a6df68cf61fe6fe9a Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:57:10 -0500 Subject: [PATCH 16/18] Changed: Autoformatted `examples/pump.py` with `black -l 120` --- examples/pump.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/pump.py b/examples/pump.py index 737dcb8..bef5ab5 100644 --- a/examples/pump.py +++ b/examples/pump.py @@ -1,7 +1,8 @@ from bullet import ScrollBar from bullet import colors import random -''' Pumping bars. ''' + +""" Pumping bars. """ n = [random.randint(0, 15) for _ in range(1000)] choices = [] @@ -9,17 +10,17 @@ for i in range(0, len(n) - 1): choices.append(n[i]) choices.append(int((n[i] + n[i + 1]) / 2)) -choices = list(map(lambda i : "▉" * i, choices)) +choices = list(map(lambda i: "▉" * i, choices)) cli = ScrollBar( prompt="", choices=choices, - height = 1, - pointer = "", + height=1, + pointer="", word_color=colors.bright(colors.foreground["cyan"]), word_on_switch=colors.bright(colors.foreground["cyan"]), background_color=colors.background["black"], - background_on_switch=colors.background["black"] + background_on_switch=colors.background["black"], ) -print('\n') -cli.launch() \ No newline at end of file +print("\n") +cli.launch() From 3235b7c3a46ffcdf41519eb3e8733900856ffe0b Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:57:38 -0500 Subject: [PATCH 17/18] Changed: Autoformatted `examples/scrollbar.py` with `black -l 120` --- examples/scrollbar.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/scrollbar.py b/examples/scrollbar.py index 382977b..5b60512 100644 --- a/examples/scrollbar.py +++ b/examples/scrollbar.py @@ -3,18 +3,18 @@ from bullet import colors cli = ScrollBar( - "How are you feeling today? ", + "How are you feeling today? ", emojis.feelings, - height = 5, - align = 5, - margin = 3, - pointer = "👉", + height=5, + align=5, + margin=3, + pointer="👉", pointer_color=colors.foreground["cyan"], - word_color = colors.foreground["white"], + word_color=colors.foreground["white"], word_on_switch=colors.foreground["white"], background_color=colors.background["black"], - background_on_switch=colors.background["black"] + background_on_switch=colors.background["black"], ) -print('\n') +print("\n") result = cli.launch() -print('\n') \ No newline at end of file +print("\n") From c18fbe3846753d09f5fd2d0fc8fc3035cd3155cb Mon Sep 17 00:00:00 2001 From: Andrew Sheridan Date: Sat, 30 Nov 2019 17:57:55 -0500 Subject: [PATCH 18/18] Changed: Autoformatted `examples/star.py` with `black -l 120` --- examples/star.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/examples/star.py b/examples/star.py index 07bb5ce..2404a50 100644 --- a/examples/star.py +++ b/examples/star.py @@ -2,19 +2,19 @@ from bullet import colors cli = Bullet( - prompt = "\nPlease choose a fruit: ", - choices = ["apple", "banana", "orange", "watermelon", "strawberry"], - indent = 0, - align = 5, - margin = 2, - bullet = "★", - bullet_color=colors.bright(colors.foreground["cyan"]), - word_color=colors.bright(colors.foreground["yellow"]), - word_on_switch=colors.bright(colors.foreground["yellow"]), - background_color=colors.background["black"], - background_on_switch=colors.background["black"], - pad_right = 5 - ) + prompt="\nPlease choose a fruit: ", + choices=["apple", "banana", "orange", "watermelon", "strawberry"], + indent=0, + align=5, + margin=2, + bullet="★", + bullet_color=colors.bright(colors.foreground["cyan"]), + word_color=colors.bright(colors.foreground["yellow"]), + word_on_switch=colors.bright(colors.foreground["yellow"]), + background_color=colors.background["black"], + background_on_switch=colors.background["black"], + pad_right=5, +) result = cli.launch() print("You chose:", result)