1
0
Fork 0
pgcli/pgcli.py

50 lines
1.7 KiB
Python
Raw Normal View History

2014-10-12 17:31:54 +00:00
#!/usr/bin/env python
from __future__ import unicode_literals
from __future__ import print_function
2014-10-12 22:07:34 +00:00
import click
2014-10-12 17:31:54 +00:00
2014-10-12 17:45:35 +00:00
from prompt_toolkit import CommandLineInterface, AbortAction, Exit
from pgcompleter import PGCompleter
from pgstyle import PGStyle
2014-11-22 07:43:11 +00:00
from pgexecute import PGExecute
2014-10-12 17:31:54 +00:00
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 CompletionsMenu
2014-10-12 17:31:54 +00:00
from pygments.lexers import SqlLexer
2014-10-12 17:31:54 +00:00
2014-10-12 22:07:34 +00:00
@click.command()
@click.option('-h', '--host', default='localhost')
2014-11-22 07:43:11 +00:00
@click.option('-p', '--port', default=5432)
@click.option('-U', '--user', prompt=True, envvar='USER')
2014-11-23 08:09:00 +00:00
@click.password_option('-W', '--password', default='',
confirmation_prompt=False)
@click.argument('database', envvar='USER')
2014-11-22 07:43:11 +00:00
def pgcli(database, user, password, host, port):
2014-11-23 08:09:00 +00:00
try:
pgexecute = PGExecute(database, user, password, host, port)
except Exception as e:
click.secho(e.message, err=True, fg='red')
exit(1)
2014-11-22 07:43:11 +00:00
layout = Layout(before_input=DefaultPrompt('%s> ' % database),
menus=[CompletionsMenu()],
2014-10-12 17:45:35 +00:00
lexer=SqlLexer)
completer = PGCompleter()
completer.extend_keywords(pgexecute.tables())
completer.extend_keywords(pgexecute.all_columns())
line = Line(completer=completer)
cli = CommandLineInterface(style=PGStyle, layout=layout, line=line)
2014-10-12 17:31:54 +00:00
2014-10-12 17:45:35 +00:00
try:
while True:
document = cli.read_input(on_exit=AbortAction.RAISE_EXCEPTION)
2014-11-23 08:09:00 +00:00
try:
print(pgexecute.run(document.text))
except Exception as e:
click.secho("Does not compute!", fg='red')
click.secho(e.message, err=True, fg='red')
2014-10-12 17:45:35 +00:00
except Exit:
print ('GoodBye!')