mirror of
https://github.com/dbcli/pgcli.git
synced 2024-10-04 01:08:51 +03:00
Split the classes to separate files and upgrade prompt_toolkit.
This commit is contained in:
parent
a721336d85
commit
80ef752a52
66
pgcli.py
66
pgcli.py
@ -1,69 +1,37 @@
|
||||
#!/usr/bin/env python
|
||||
from __future__ import unicode_literals
|
||||
import sys
|
||||
from __future__ import print_function
|
||||
|
||||
import click
|
||||
import psycopg2
|
||||
|
||||
from prompt_toolkit import CommandLineInterface, AbortAction, Exit
|
||||
from prompt_toolkit.completion import Completer, Completion
|
||||
from pgcompleter import PGCompleter
|
||||
from pgstyle import PGStyle
|
||||
from prompt_toolkit.line import Line
|
||||
from prompt_toolkit.layout import Layout
|
||||
from prompt_toolkit.layout.prompt import DefaultPrompt
|
||||
from prompt_toolkit.layout.menus import CompletionMenu
|
||||
|
||||
from pygments.token import Token
|
||||
from pygments.style import Style
|
||||
from pygments.lexers.sql import SqlLexer
|
||||
from pygments.styles.default import DefaultStyle
|
||||
|
||||
|
||||
class SqlCompleter(Completer):
|
||||
keywords = [
|
||||
'SELECT',
|
||||
'INSERT',
|
||||
'ALTER',
|
||||
'DROP',
|
||||
'DELETE',
|
||||
'FROM',
|
||||
'WHERE',
|
||||
]
|
||||
|
||||
def get_completions(self, document):
|
||||
word_before_cursor = document.get_word_before_cursor()
|
||||
|
||||
for keyword in self.keywords:
|
||||
if (keyword.startswith(word_before_cursor) or
|
||||
keyword.startswith(word_before_cursor.upper())):
|
||||
yield Completion(keyword, -len(word_before_cursor))
|
||||
|
||||
|
||||
class DocumentStyle(Style):
|
||||
styles = {
|
||||
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',
|
||||
Token.SelectedText: '#ffffff bg:#6666aa',
|
||||
Token.IncrementalSearchMatch: '#ffffff bg:#4444aa',
|
||||
Token.IncrementalSearchMatch.Current: '#ffffff bg:#44aa44',
|
||||
}
|
||||
styles.update(DefaultStyle.styles)
|
||||
from prompt_toolkit.layout.menus import CompletionsMenu
|
||||
|
||||
from pygments.lexers import SqlLexer
|
||||
|
||||
@click.command()
|
||||
def pgcli():
|
||||
@click.option('-h', '--host', default='localhost')
|
||||
@click.option('-U', '--user', prompt=True, envvar='USER')
|
||||
@click.password_option('-P', '--password', default='',
|
||||
confirmation_prompt=False)
|
||||
@click.argument('database', envvar='USER')
|
||||
def pgcli(database, host, user, password):
|
||||
print('database: %s host: %s user: %s password: %s' % (database, host, user, password))
|
||||
layout = Layout(before_input=DefaultPrompt('> '),
|
||||
menus=[CompletionMenu()],
|
||||
menus=[CompletionsMenu()],
|
||||
lexer=SqlLexer)
|
||||
line = Line(completer=SqlCompleter())
|
||||
cli = CommandLineInterface(style=DocumentStyle, layout=layout, line=line)
|
||||
line = Line(completer=PGCompleter())
|
||||
cli = CommandLineInterface(style=PGStyle, layout=layout, line=line)
|
||||
|
||||
try:
|
||||
while True:
|
||||
document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION)
|
||||
print 'You entered:', document.text
|
||||
print ('You entered:', document.text)
|
||||
except Exit:
|
||||
print 'GoodBye!'
|
||||
|
||||
|
||||
print ('GoodBye!')
|
||||
|
20
pgcompleter.py
Normal file
20
pgcompleter.py
Normal file
@ -0,0 +1,20 @@
|
||||
from prompt_toolkit.completion import Completer, Completion
|
||||
|
||||
class PGCompleter(Completer):
|
||||
keywords = [
|
||||
'SELECT',
|
||||
'INSERT',
|
||||
'ALTER',
|
||||
'DROP',
|
||||
'DELETE',
|
||||
'FROM',
|
||||
'WHERE',
|
||||
]
|
||||
|
||||
def get_completions(self, document):
|
||||
word_before_cursor = document.get_word_before_cursor()
|
||||
|
||||
for keyword in self.keywords:
|
||||
if (keyword.startswith(word_before_cursor) or
|
||||
keyword.startswith(word_before_cursor.upper())):
|
||||
yield Completion(keyword, -len(word_before_cursor))
|
15
pgstyle.py
Normal file
15
pgstyle.py
Normal file
@ -0,0 +1,15 @@
|
||||
from pygments.token import Token
|
||||
from pygments.style import Style
|
||||
from pygments.styles.default import DefaultStyle
|
||||
|
||||
class PGStyle(Style):
|
||||
styles = {
|
||||
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',
|
||||
Token.SelectedText: '#ffffff bg:#6666aa',
|
||||
Token.IncrementalSearchMatch: '#ffffff bg:#4444aa',
|
||||
Token.IncrementalSearchMatch.Current: '#ffffff bg:#44aa44',
|
||||
}
|
||||
styles.update(DefaultStyle.styles)
|
Loading…
Reference in New Issue
Block a user