- termcolor modified to use bold by default

- uses colors in readline



git-svn-id: http://galileo.dmi.unict.it/svn/relational/trunk@297 014f5005-505e-4b48-8d0a-63407b615a7c
master
LtWorf 2011-04-01 10:28:47 +07:00
parent 3ca26b10c6
commit 4a296c52cf
5 changed files with 184 additions and 36 deletions

@ -1,6 +1,7 @@
1.1 1.1
- Incorrect relational operations now raise an exception instead of returning None - Incorrect relational operations now raise an exception instead of returning None
- Forces relations to have correct names for attributes - Forces relations to have correct names for attributes
- Colored output in readline mode
1.0 1.0
- Adds history in the GUI - Adds history in the GUI

@ -1,3 +1,5 @@
Ori Avtalion for suggesting some improvements Ori Avtalion for suggesting some improvements
Chris Lamb for being interested Chris Lamb for being interested
Emilio Di Prima for the windows port Emilio Di Prima for the windows port
Konstantin Lepa <konstantin.lepa at gmail.com> (for the termcolor module)

@ -24,9 +24,10 @@ import logging
import os.path import os.path
import os import os
import sys import sys
import curses
from relational import relation, parser, rtypes from relational import relation, parser, rtypes
from termcolor import colored
class SimpleCompleter(object): class SimpleCompleter(object):
'''Handles completion''' '''Handles completion'''
@ -96,7 +97,7 @@ completer=SimpleCompleter(['LIST','LOAD ','UNLOAD ','HELP ','QUIT','SAVE ','_PRO
def load_relation(filename,defname=None): def load_relation(filename,defname=None):
if not os.path.isfile(filename): if not os.path.isfile(filename):
print >> sys.stderr, "%s is not a file" % filename print >> sys.stderr, colored("%s is not a file" % filename,'red')
return None return None
f=filename.split('/') f=filename.split('/')
@ -106,16 +107,16 @@ def load_relation(filename,defname=None):
defname=defname[:-4] defname=defname[:-4]
if not rtypes.is_valid_relation_name(defname): if not rtypes.is_valid_relation_name(defname):
print >> sys.stderr, "%s is not a valid relation name" % defname print >> sys.stderr, colored("%s is not a valid relation name" % defname,'red')
return return
try: try:
relations[defname]=relation.relation(filename) relations[defname]=relation.relation(filename)
completer.add_completion(defname) completer.add_completion(defname)
print "Loaded relation %s"% defname print colored("Loaded relation %s"% defname,'green',attrs=['bold'])
return defname return defname
except Exception, e: except Exception, e:
print e print >>sys.stderr,colored(e,'red')
return None return None
def help(command): def help(command):
@ -151,7 +152,10 @@ def help(command):
def exec_line(command): def exec_line(command):
command=command.strip() command=command.strip()
if command=='QUIT':
if command.startswith(';'):
return
elif command=='QUIT':
sys.exit(0) sys.exit(0)
elif command.startswith('HELP'): elif command.startswith('HELP'):
help(command) help(command)
@ -159,10 +163,10 @@ def exec_line(command):
for i in relations: for i in relations:
if not i.startswith('_'): if not i.startswith('_'):
print i print i
elif command.startswith('LOAD'): #Loads a relation elif command.startswith('LOAD '): #Loads a relation
pars=command.split(' ') pars=command.split(' ')
if len(pars)==1: if len(pars)==1:
print "Missing parameter" print colored("Missing parameter",'red')
return return
filename=pars[1] filename=pars[1]
@ -172,34 +176,34 @@ def exec_line(command):
defname=None defname=None
load_relation(filename,defname) load_relation(filename,defname)
elif command.startswith('UNLOAD'): elif command.startswith('UNLOAD '):
pars=command.split(' ') pars=command.split(' ')
if len(pars)<2: if len(pars)<2:
print "Missing parameter" print colored("Missing parameter",'red')
return return
if pars[1] in relations: if pars[1] in relations:
del relations[pars[1]] del relations[pars[1]]
completer.remove_completion(pars[1]) completer.remove_completion(pars[1])
else: else:
print "No such relation %s" % pars[1] print colored("No such relation %s" % pars[1],'red')
pass pass
elif command.startswith('SAVE'): elif command.startswith('SAVE '):
pars=command.split(' ') pars=command.split(' ')
if len(pars)!=3: if len(pars)!=3:
print "Missing parameter" print colored("Missing parameter",'red')
return return
filename=pars[1] filename=pars[1]
defname=pars[2] defname=pars[2]
if defname not in relations: if defname not in relations:
print "No such relation %s" % defname print colored("No such relation %s" % defname,'red')
return return
try: try:
relations[defname].save(filename) relations[defname].save(filename)
except Exception,e: except Exception,e:
print e print colored(e,'red')
else: else:
exec_query(command) exec_query(command)
@ -249,7 +253,7 @@ def exec_query(command):
try: try:
pyquery=parser.parse(query) pyquery=parser.parse(query)
result=eval(pyquery,relations) result=eval(pyquery,relations)
print "-> query: %s" % pyquery print colored("-> query: %s" % pyquery,'green')
if printrel: if printrel:
print print
@ -259,22 +263,11 @@ def exec_query(command):
completer.add_completion(relname) completer.add_completion(relname)
except Exception, e: except Exception, e:
print e print colored(e,'red')
def main(files=[]): def main(files=[]):
print colored('> ','blue') + "; Type HELP to get the HELP"
import locale print colored('> ','blue') + "; Completion is activated using the tab (if supported by the terminal)"
locale.setlocale(locale.LC_ALL, '')
code = locale.getpreferredencoding()
print curses.can_change_color()
curses.color_pair(curses.A_BOLD)
print "> ; Type HELP to get the HELP"
print "> ; Completion is activated using the tab (if supported by the terminal)"
for i in files: for i in files:
load_relation(i) load_relation(i)
@ -288,8 +281,8 @@ def main(files=[]):
while True: while True:
try: try:
line = raw_input('> ') line = raw_input(colored('> ','blue'))
if isinstance(line,str) and len(line)>0 and not line.startswith(';'): if isinstance(line,str) and len(line)>0:
exec_line(line) exec_line(line)
except EOFError: except EOFError:
print print
@ -297,5 +290,5 @@ def main(files=[]):
if __name__ == "__main__": if __name__ == "__main__":
main()
main()

@ -0,0 +1,152 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2008-2009 Konstantin Lepa <konstantin.lepa@gmail.com>.
#
# This file is part of termcolor.
#
# termcolor is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 3, or (at your option) any later
# version.
#
# termcolor is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License
# along with termcolor. If not, see <http://www.gnu.org/licenses/>.
"""ANSII Color formatting for output in terminal."""
import os
__ALL__ = [ 'colored' ]
ATTRIBUTES = dict(
zip([
'bold',
'dark',
'',
'underline',
'blink',
'',
'reverse',
'concealed'
],
range(1, 9)
)
)
del ATTRIBUTES['']
HIGHLIGHTS = dict(
zip([
'on_grey',
'on_red',
'on_green',
'on_yellow',
'on_blue',
'on_magenta',
'on_cyan',
'on_white'
],
range(40, 48)
)
)
COLORS = dict(
zip([
'grey',
'red',
'green',
'yellow',
'blue',
'magenta',
'cyan',
'white',
],
range(30, 38)
)
)
RESET = '\033[0m'
def colored(text, color=None, on_color=None, attrs=['bold']):
"""Colorize text.
Available text colors:
red, green, yellow, blue, magenta, cyan, white.
Available text highlights:
on_red, on_green, on_yellow, on_blue, on_magenta, on_cyan, on_white.
Available attributes:
bold, dark, underline, blink, reverse, concealed.
Example:
colored('Hello, World!', 'red', 'on_grey', ['blue', 'blink'])
colored('Hello, World!', 'green')
"""
if os.getenv('ANSI_COLORS_DISABLED') is None:
fmt_str = '\033[%dm%s'
if color is not None:
text = fmt_str % (COLORS[color], text)
if on_color is not None:
text = fmt_str % (HIGHLIGHTS[on_color], text)
if attrs is not None:
for attr in attrs:
text = fmt_str % (ATTRIBUTES[attr], text)
text += RESET
return text
if __name__ == '__main__':
print 'Current terminal type: ', os.getenv('TERM')
print 'Test basic colors:'
print colored('Grey color', 'grey')
print colored('Red color', 'red')
print colored('Green color', 'green')
print colored('Yellow color', 'yellow')
print colored('Blue color', 'blue')
print colored('Magenta color', 'magenta')
print colored('Cyan color', 'cyan')
print colored('White color', 'white')
print '-' * 78
print 'Test highlights:'
print colored('On grey color', on_color='on_grey')
print colored('On red color', on_color='on_red')
print colored('On green color', on_color='on_green')
print colored('On yellow color', on_color='on_yellow')
print colored('On blue color', on_color='on_blue')
print colored('On magenta color', on_color='on_magenta')
print colored('On cyan color', on_color='on_cyan')
print colored('On white color', color='grey', on_color='on_white')
print '-' * 78
print 'Test attributes:'
print colored('Bold grey color', 'grey', attrs=['bold'])
print colored('Dark red color', 'red', attrs=['dark'])
print colored('Underline green color', 'green', attrs=['underline'])
print colored('Blink yellow color', 'yellow', attrs=['blink'])
print colored('Reversed blue color', 'blue', attrs=['reverse'])
print colored('Concealed Magenta color', 'magenta', attrs=['concealed'])
print colored('Bold underline reverse cyan color', 'cyan',
attrs=['bold', 'underline', 'reverse'])
print colored('Dark blink concealed white color', 'white',
attrs=['dark', 'blink', 'concealed'])
print '-' * 78
print 'Test mixing:'
print colored('Underline red on grey color', 'red', 'on_grey',
['underline'])
print colored('Reversed green on red color', 'green', 'on_red', ['reverse'])

@ -20,7 +20,7 @@
# author Salvo "LtWorf" Tomaselli <tiposchi@tiscali.it> # author Salvo "LtWorf" Tomaselli <tiposchi@tiscali.it>
from relational import relation, parser, optimizer from relational import relation, parser, optimizer
from relational_readline.termcolor import colored
import os import os
print relation print relation
@ -139,7 +139,7 @@ def run_exec_test(testname):
fields_ok = fields_ok and glob[i]==exp_result[i] fields_ok = fields_ok and glob[i]==exp_result[i]
if fields_ok: if fields_ok:
print "\033[32;1mTest passed\033[0m" print colored('Test passed','green')
return True return True
except: except:
pass pass