class PromptTest(unittest.TestCase): def setUp(self): self.line = Line() self.line.insert_text('some text') self.code = Code(self.line.document) self.prompt = Prompt(self.line, self.code) def _test_token_text_list(self, data): # Test whether data is list of (Token, text) tuples. for token, text in data: self.assertIsInstance(token, pygments.token._TokenType) self.assertIsInstance(text, six.text_type) def test_get_prompt(self): result = list(self.prompt.get_prompt()) self._test_token_text_list(result) def test_second_line_prefix(self): result = list(self.prompt.get_second_line_prefix()) self._test_token_text_list(result) def test_get_help_tokens(self): result = list(self.prompt.get_second_line_prefix()) self._test_token_text_list(result)
def main(): layout = Layout(left_margin=LeftMarginWithLineNumbers(), before_input=DefaultPrompt(text='Before input >> '), after_input=Prompt(' << after input'), top_toolbars=[ TextToolbar('This is a top toolbar', token=Token.TopToolbar1), TextToolbar('This is another top toolbar', token=Token.TopToolbar2), ], bottom_toolbars=[ ArgToolbar(), SearchToolbar(), CompletionsToolbar(), TextToolbar('This is a bottom toolbar', token=Token.BottomToolbar1), TextToolbar('This is another bottom toolbar', token=Token.BottomToolbar2), ], show_tildes=True, menus=[CompletionsMenu()]) cli = CommandLineInterface(layout=layout, style=TestStyle, line=Line(is_multiline=True, completer=TestCompleter())) code_obj = cli.read_input(initial_value=lipsum) print('You said: ' + code_obj.text)
def main(): cli = CommandLineInterface(layout=layout, style=TestStyle, line=Line(validator=EmailValidator())) document = cli.read_input() print('You said: ' + document.text)
def loop(cmd, history_file): from prompt_toolkit import CommandLineInterface, AbortAction from prompt_toolkit import Exit from prompt_toolkit.layout import Layout from prompt_toolkit.line import Line from prompt_toolkit.renderer import Output cli_line = Line(completer=SQLCompleter(cmd.connection, cmd.lines), history=TruncatedFileHistory( history_file, max_length=MAX_HISTORY_LENGTH)) layout = Layout( before_input=CrashPrompt(cmd.lines), menus=[], lexer=SqlLexer, bottom_toolbars=[], show_tildes=False, ) key_binding_factories = _detect_key_bindings() cli = CommandLineInterface(style=MonokaiStyle, layout=layout, line=cli_line, key_binding_factories=key_binding_factories) output = Output(cli.renderer.stdout) global get_num_columns def get_num_columns(): return output.get_size().columns try: while True: doc = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION) cmd.process(doc.text) except Exit: # Quit on Ctrl-D keypress cmd.logger.warn(u'Bye!') return
def main(): cli = CommandLineInterface(line=Line( history=FileHistory('.example-history-file'))) try: while True: document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION) print('You said: ' + document.text) except Exit: pass
def main(): cli = CommandLineInterface( style=AnimalStyle, layout=Layout(before_input=DefaultPrompt('Give some animals: '), menus=[CompletionsMenu()]), line=Line(completer=AnimalCompleter()), create_async_autocompleters=True, ) print('Press tab to complete') code_obj = cli.read_input() print('You said: ' + code_obj.text)
def main(database): connection = sqlite3.connect(database) layout = Layout(before_input=DefaultPrompt('> '), lexer=SqlLexer, menus=[CompletionsMenu()]) line = Line(completer=SqlCompleter()) cli = CommandLineInterface(style=DocumentStyle, layout=layout, line=line) try: while True: document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION) with connection: messages = connection.execute(document.text) for message in messages: print message except Exit: print 'GoodBye!'
def main(): layout = Layout(before_input=DefaultPrompt('> '), menus=[CompletionMenu()]) line = Line(RESTCompleter()) cli = CommandLineInterface(style=DocumentStyle, layout=layout, line=line) try: while True: document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION) input_args = document.text.split(' ') if len(input_args) < 2: raise AssertionError( "Must provide at least a method and a url") response = process_request(input_args) print 'Response:', response.json() except Exit: print 'GoodBye!'
def cli(database, user, password, host, port): from pgcli import __file__ as package_root package_root = os.path.dirname(package_root) default_config = os.path.join(package_root, 'pgclirc') # Write default config. write_default_config(default_config, '~/.pgclirc') # Load config. config = load_config('~/.pgclirc') # Connect to the database. try: pgexecute = PGExecute(database, user, password, host, port) except Exception as e: click.secho(e.message, err=True, fg='red') exit(1) layout = Layout(before_input=DefaultPrompt('%s> ' % database), menus=[CompletionsMenu()], lexer=SqlLexer) completer = PGCompleter(config.getboolean('main', 'smart_completion')) completer.extend_special_commands(pgexecute.special_commands.keys()) completer.extend_table_names(pgexecute.tables()) completer.extend_column_names(pgexecute.all_columns()) line = Line(completer=completer, history=FileHistory(os.path.expanduser('~/.pgcli-history'))) cli = CommandLineInterface(style=PGStyle, layout=layout, line=line) try: while True: document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION) try: rows, headers, status = pgexecute.run(document.text) if rows: print(tabulate(rows, headers, tablefmt='psql')) print(status) except Exception as e: click.secho(e.message, err=True, fg='red') except Exit: print ('GoodBye!')
def setUp(self): self.line = Line() self.line.insert_text('some text') self.code = Code(self.line.document) self.prompt = Prompt(self.line, self.code)
def setUp(self): self.cli = Line()
class LineTest(unittest.TestCase): def setUp(self): self.cli = Line() def test_setup(self): self.assertEqual(self.cli.text, '') self.assertEqual(self.cli.cursor_position, 0) def test_insert_text(self): self.cli.insert_text('some_text') self.assertEqual(self.cli.text, 'some_text') self.assertEqual(self.cli.cursor_position, len('some_text')) def test_cursor_movement(self): self.cli.insert_text('some_text') self.cli.cursor_left() self.cli.cursor_left() self.cli.cursor_left() self.cli.cursor_right() self.cli.insert_text('A') self.assertEqual(self.cli.text, 'some_teAxt') self.assertEqual(self.cli.cursor_position, len('some_teA')) def test_home_end(self): self.cli.insert_text('some_text') self.cli.home() self.cli.insert_text('A') self.cli.end() self.cli.insert_text('B') self.assertEqual(self.cli.text, 'Asome_textB') self.assertEqual(self.cli.cursor_position, len('Asome_textB')) def test_backspace(self): self.cli.insert_text('some_text') self.cli.cursor_left() self.cli.cursor_left() self.cli.delete_character_before_cursor() self.assertEqual(self.cli.text, 'some_txt') self.assertEqual(self.cli.cursor_position, len('some_t')) def test_cursor_word_back(self): self.cli.insert_text('hello world word3') self.cli.cursor_word_back() self.assertEqual(self.cli.text, 'hello world word3') self.assertEqual(self.cli.cursor_position, len('hello world ')) def test_cursor_to_start_of_line(self): self.cli.insert_text('hello world\n line2\nline3') self.assertEqual(self.cli.cursor_position, len('hello world\n line2\nline3')) self.cli.cursor_position = len('hello world\n li') # Somewhere on the second line. self.cli.cursor_to_start_of_line() self.assertEqual(self.cli.cursor_position, len('hello world\n')) self.cli.cursor_to_start_of_line(after_whitespace=True) self.assertEqual(self.cli.cursor_position, len('hello world\n ')) def test_cursor_to_end_of_line(self): self.cli.insert_text('hello world\n line2\nline3') self.cli.cursor_position = 0 self.cli.cursor_to_end_of_line() self.assertEqual(self.cli.cursor_position, len('hello world')) def test_cursor_word_forward(self): self.cli.insert_text('hello world word3') self.cli.home() self.cli.cursor_word_forward() self.assertEqual(self.cli.text, 'hello world word3') self.assertEqual(self.cli.cursor_position, len('hello ')) def test_cursor_to_end_of_word(self): self.cli.insert_text('hello world') self.cli.home() self.cli.cursor_to_end_of_word() self.assertEqual(self.cli.cursor_position, len('hello') - 1) self.cli.cursor_to_end_of_word() self.assertEqual(self.cli.cursor_position, len('hello world') - 1) def test_delete_word(self): self.cli.insert_text('hello world word3') self.cli.home() self.cli.cursor_word_forward() self.cli.delete_word() self.assertEqual(self.cli.text, 'hello word3') self.assertEqual(self.cli.cursor_position, len('hello ')) def test_delete_until_end(self): self.cli.insert_text('this is a sentence.') self.cli.home() self.cli.cursor_word_forward() self.cli.delete_until_end() self.assertEqual(self.cli.text, 'this ') self.assertEqual(self.cli.cursor_position, len('this ')) def test_delete_until_end_of_line(self): self.cli.insert_text('line1\nline2\nline3') self.cli.cursor_position = len('line1\nli') deleted_text = self.cli.delete_until_end_of_line() self.assertEqual(self.cli.text, 'line1\nli\nline3') self.assertEqual(deleted_text, 'ne2') # If we only have one line. self.cli.reset() self.cli.insert_text('line1') self.cli.cursor_position = 2 deleted_text = self.cli.delete_until_end_of_line() self.assertEqual(self.cli.text, 'li') self.assertEqual(deleted_text, 'ne1') def test_cursor_up(self): # Cursor up to a line thats longer. self.cli.insert_text('long line1\nline2') self.cli.cursor_up() self.assertEqual(self.cli.document.cursor_position, 5) # Going up when already at the top. self.cli.cursor_up() self.assertEqual(self.cli.document.cursor_position, 5) # Going up to a line that's shorter. self.cli.reset() self.cli.insert_text('line1\nlong line2') self.cli.cursor_up() self.assertEqual(self.cli.document.cursor_position, 5) def test_cursor_down(self): self.cli.insert_text('line1\nline2') self.cli.cursor_position = 3 # Normally going down self.cli.cursor_down() self.assertEqual(self.cli.document.cursor_position, len('line1\nlin')) # Going down to a line that's storter. self.cli.reset() self.cli.insert_text('long line1\na\nb') self.cli.cursor_position = 3 self.cli.cursor_down() self.assertEqual(self.cli.document.cursor_position, len('long line1\na')) def test_auto_up_and_down(self): self.cli.insert_text('line1\nline2') with self.assertRaises(ReturnInput): self.cli.return_input() self.cli.insert_text('long line3\nlong line4') # Test current self.assertEqual(self.cli.text, 'long line3\nlong line4') self.assertEqual(self.cli.cursor_position, len('long line3\nlong line4')) # Go up. self.cli.auto_up() self.assertEqual(self.cli.text, 'long line3\nlong line4') self.assertEqual(self.cli.cursor_position, len('long line3')) # Go up again (goes to first item.) self.cli.auto_up() self.assertEqual(self.cli.text, 'line1\nline2') self.assertEqual(self.cli.cursor_position, len('line1\nline2')) # Go up again (goes to first line of first item.) self.cli.auto_up() self.assertEqual(self.cli.text, 'line1\nline2') self.assertEqual(self.cli.cursor_position, len('line1')) # Go up again (while we're at the first item in history.) # (Nothing changes.) self.cli.auto_up() self.assertEqual(self.cli.text, 'line1\nline2') self.assertEqual(self.cli.cursor_position, len('line1')) # Go down (to second line of first item.) self.cli.auto_down() self.assertEqual(self.cli.text, 'line1\nline2') self.assertEqual(self.cli.cursor_position, len('line1\nline2')) # Go down again (to first line of second item.) # (Going down goes to the first character of a line.) self.cli.auto_down() self.assertEqual(self.cli.text, 'long line3\nlong line4') self.assertEqual(self.cli.cursor_position, len('')) # Go down again (to second line of second item.) self.cli.auto_down() self.assertEqual(self.cli.text, 'long line3\nlong line4') self.assertEqual(self.cli.cursor_position, len('long line3\n')) # Go down again after the last line. (nothing should happen.) self.cli.auto_down() self.assertEqual(self.cli.text, 'long line3\nlong line4') self.assertEqual(self.cli.cursor_position, len('long line3\n')) def test_delete_current_line(self): self.cli.insert_text('line1\nline2\nline3') self.cli.cursor_up() deleted_text = self.cli.delete_current_line() self.assertEqual(self.cli.text, 'line1\nline3') self.assertEqual(deleted_text, 'line2') self.assertEqual(self.cli.cursor_position, len('line1\n')) def test_join_next_line(self): self.cli.insert_text('line1\nline2\nline3') self.cli.cursor_up() self.cli.join_next_line() self.assertEqual(self.cli.text, 'line1\nline2line3') # Test when there is no '\n' in the text self.cli.reset() self.cli.insert_text('line1') self.cli.cursor_position = 0 self.cli.join_next_line() self.assertEqual(self.cli.text, 'line1') def test_go_to_matching_bracket(self): self.cli.insert_text('A ( B [ C ) >') self.cli.home() self.cli.cursor_right() self.cli.cursor_right() self.assertEqual(self.cli.cursor_position, 2) self.cli.go_to_matching_bracket() self.assertEqual(self.cli.cursor_position, 10) self.cli.go_to_matching_bracket() self.assertEqual(self.cli.cursor_position, 2) def test_newline(self): self.cli.insert_text('hello world') self.cli.newline() self.assertEqual(self.cli.text, 'hello world\n') def test_swap_characters_before_cursor(self): self.cli.insert_text('hello world') self.cli.cursor_left() self.cli.cursor_left() self.cli.swap_characters_before_cursor() self.assertEqual(self.cli.text, 'hello wrold')
Error: '#000000 bg:#ff8888', # Completion Menu Token.Menu.Completions.Completion.Current: 'bg:#00aaaa #000000', Token.Menu.Completions.Completion: 'bg:#008888 #ffffff', Token.Menu.Completions.ProgressButton: 'bg:#003333', Token.Menu.Completions.ProgressBar: 'bg:#00aaaa', } if __name__ == '__main__': cli = CommandLineInterface(layout=Layout( before_input=DefaultPrompt('(pdb) '), after_input=CompletionHint(grammar), menus=[CompletionsMenu()]), line=Line(completer=ShellCompleter(grammar)), style=PdbStyle) try: while True: document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION) try: parse_info = get_parse_info(grammar, document) except InvalidCommandException: print('Invalid command\n') continue else: print(parse_info.get_variables()) except Exit:
class LineTest(unittest.TestCase): def setUp(self): self.cli = Line() def test_initial(self): self.assertEqual(self.cli.text, '') self.assertEqual(self.cli.cursor_position, 0) def test_insert_text(self): self.cli.insert_text('some_text') self.assertEqual(self.cli.text, 'some_text') self.assertEqual(self.cli.cursor_position, len('some_text')) def test_cursor_movement(self): self.cli.insert_text('some_text') self.cli.cursor_left() self.cli.cursor_left() self.cli.cursor_left() self.cli.cursor_right() self.cli.insert_text('A') self.assertEqual(self.cli.text, 'some_teAxt') self.assertEqual(self.cli.cursor_position, len('some_teA')) def test_backspace(self): self.cli.insert_text('some_text') self.cli.cursor_left() self.cli.cursor_left() self.cli.delete_before_cursor() self.assertEqual(self.cli.text, 'some_txt') self.assertEqual(self.cli.cursor_position, len('some_t')) def test_cursor_up(self): # Cursor up to a line thats longer. self.cli.insert_text('long line1\nline2') self.cli.cursor_up() self.assertEqual(self.cli.document.cursor_position, 5) # Going up when already at the top. self.cli.cursor_up() self.assertEqual(self.cli.document.cursor_position, 5) # Going up to a line that's shorter. self.cli.reset() self.cli.insert_text('line1\nlong line2') self.cli.cursor_up() self.assertEqual(self.cli.document.cursor_position, 5) def test_cursor_down(self): self.cli.insert_text('line1\nline2') self.cli.cursor_position = 3 # Normally going down self.cli.cursor_down() self.assertEqual(self.cli.document.cursor_position, len('line1\nlin')) # Going down to a line that's storter. self.cli.reset() self.cli.insert_text('long line1\na\nb') self.cli.cursor_position = 3 self.cli.cursor_down() self.assertEqual(self.cli.document.cursor_position, len('long line1\na')) # def test_auto_up_and_down(self): # self.cli.insert_text('long line3\nlong line4') # # # Test current # self.assertEqual(self.cli.text, 'long line3\nlong line4') # self.assertEqual(self.cli.cursor_position, len('long line3\nlong line4')) # # # Go up. # self.cli.auto_up() # self.assertEqual(self.cli.text, 'long line3\nlong line4') # self.assertEqual(self.cli.cursor_position, len('long line3')) # # # Go up again (goes to first item.) # self.cli.auto_up() # self.assertEqual(self.cli.text, 'line1\nline2') # self.assertEqual(self.cli.cursor_position, len('line1\nline2')) # # # Go up again (goes to first line of first item.) # self.cli.auto_up() # self.assertEqual(self.cli.text, 'line1\nline2') # self.assertEqual(self.cli.cursor_position, len('line1')) # # # Go up again (while we're at the first item in history.) # # (Nothing changes.) # self.cli.auto_up() # self.assertEqual(self.cli.text, 'line1\nline2') # self.assertEqual(self.cli.cursor_position, len('line1')) # # # Go down (to second line of first item.) # self.cli.auto_down() # self.assertEqual(self.cli.text, 'line1\nline2') # self.assertEqual(self.cli.cursor_position, len('line1\nline2')) # # # Go down again (to first line of second item.) # # (Going down goes to the first character of a line.) # self.cli.auto_down() # self.assertEqual(self.cli.text, 'long line3\nlong line4') # self.assertEqual(self.cli.cursor_position, len('')) # # # Go down again (to second line of second item.) # self.cli.auto_down() # self.assertEqual(self.cli.text, 'long line3\nlong line4') # self.assertEqual(self.cli.cursor_position, len('long line3\n')) # # # Go down again after the last line. (nothing should happen.) # self.cli.auto_down() # self.assertEqual(self.cli.text, 'long line3\nlong line4') # self.assertEqual(self.cli.cursor_position, len('long line3\n')) def test_join_next_line(self): self.cli.insert_text('line1\nline2\nline3') self.cli.cursor_up() self.cli.join_next_line() self.assertEqual(self.cli.text, 'line1\nline2line3') # Test when there is no '\n' in the text self.cli.reset() self.cli.insert_text('line1') self.cli.cursor_position = 0 self.cli.join_next_line() self.assertEqual(self.cli.text, 'line1') def test_newline(self): self.cli.insert_text('hello world') self.cli.newline() self.assertEqual(self.cli.text, 'hello world\n') def test_swap_characters_before_cursor(self): self.cli.insert_text('hello world') self.cli.cursor_left() self.cli.cursor_left() self.cli.swap_characters_before_cursor() self.assertEqual(self.cli.text, 'hello wrold')