diff options
| author | Victor Uriarte <victor.m.uriarte@intel.com> | 2016-06-11 22:52:01 -0700 |
|---|---|---|
| committer | Victor Uriarte <victor.m.uriarte@intel.com> | 2016-06-12 12:45:15 -0700 |
| commit | e331dcf5da3195016d9d1aae87019798f51a36b6 (patch) | |
| tree | e56c13dca8bd498e6b6d6bd720284275c965e515 /sqlparse | |
| parent | db0f9247b30a905778288f4343888b0510cee093 (diff) | |
| download | sqlparse-e331dcf5da3195016d9d1aae87019798f51a36b6.tar.gz | |
Migrate optparse to argparse; optparse deprecated in py2.7
cleanup example
Diffstat (limited to 'sqlparse')
| -rw-r--r-- | sqlparse/__main__.py | 183 |
1 files changed, 106 insertions, 77 deletions
diff --git a/sqlparse/__main__.py b/sqlparse/__main__.py index 3f61064..28abb6c 100644 --- a/sqlparse/__main__.py +++ b/sqlparse/__main__.py @@ -6,110 +6,139 @@ # This module is part of python-sqlparse and is released under # the BSD License: http://www.opensource.org/licenses/bsd-license.php -import optparse +import argparse import sys import sqlparse +from sqlparse.compat import PY2 from sqlparse.exceptions import SQLParseError _CASE_CHOICES = ['upper', 'lower', 'capitalize'] -parser = optparse.OptionParser(usage='%prog [OPTIONS] FILE, ...', - version='%%prog %s' % sqlparse.__version__) -parser.set_description(('Format FILE according to OPTIONS. Use "-" as FILE ' - 'to read from stdin.')) -parser.add_option('-v', '--verbose', dest='verbose', action='store_true') -parser.add_option('-o', '--outfile', dest='outfile', metavar='FILE', - help='write output to FILE (defaults to stdout)') -group = parser.add_option_group('Formatting Options') -group.add_option('-k', '--keywords', metavar='CHOICE', - dest='keyword_case', choices=_CASE_CHOICES, - help=('change case of keywords, CHOICE is one of %s' - % ', '.join('"%s"' % x for x in _CASE_CHOICES))) -group.add_option('-i', '--identifiers', metavar='CHOICE', - dest='identifier_case', choices=_CASE_CHOICES, - help=('change case of identifiers, CHOICE is one of %s' - % ', '.join('"%s"' % x for x in _CASE_CHOICES))) -group.add_option('-l', '--language', metavar='LANG', - dest='output_format', choices=['python', 'php'], - help=('output a snippet in programming language LANG, ' - 'choices are "python", "php"')) -group.add_option('--strip-comments', dest='strip_comments', - action='store_true', default=False, - help='remove comments') -group.add_option('-r', '--reindent', dest='reindent', - action='store_true', default=False, - help='reindent statements') -group.add_option('--indent_width', dest='indent_width', default=2, - help='indentation width (defaults to 2 spaces)') -group.add_option('-a', '--reindent_aligned', - action='store_true', default=False, - help='reindent statements to aligned format') -group.add_option('-s', '--use_space_around_operators', - action='store_true', default=False, - help='place spaces around mathematical operators') -group.add_option('--wrap_after', dest='wrap_after', default=0, - help='Column after which lists should be wrapped') - -_FORMATTING_GROUP = group - - -def _error(msg, exit_=None): +# TODO: Add CLI Tests +# TODO: Simplify formatter by using argparse `type` arguments +parser = argparse.ArgumentParser( + prog='sqlparse', + description='Format FILE according to OPTIONS. Use "-" as FILE ' + 'to read from stdin.', + usage='%(prog)s [OPTIONS] FILE, ...', + version=sqlparse.__version__,) + +parser.add_argument('filename') + +parser.add_argument( + '-o', '--outfile', + dest='outfile', + metavar='FILE', + help='write output to FILE (defaults to stdout)') + +group = parser.add_argument_group('Formatting Options') + +group.add_argument( + '-k', '--keywords', + metavar='CHOICE', + dest='keyword_case', + choices=_CASE_CHOICES, + help='change case of keywords, CHOICE is one of {0}'.format( + ', '.join('"{0}"'.format(x) for x in _CASE_CHOICES))) + +group.add_argument( + '-i', '--identifiers', + metavar='CHOICE', + dest='identifier_case', + choices=_CASE_CHOICES, + help='change case of identifiers, CHOICE is one of {0}'.format( + ', '.join('"{0}"'.format(x) for x in _CASE_CHOICES))) + +group.add_argument( + '-l', '--language', + metavar='LANG', + dest='output_format', + choices=['python', 'php'], + help='output a snippet in programming language LANG, ' + 'choices are "python", "php"') + +group.add_argument( + '--strip-comments', + dest='strip_comments', + action='store_true', + default=False, + help='remove comments') + +group.add_argument( + '-r', '--reindent', + dest='reindent', + action='store_true', + default=False, + help='reindent statements') + +group.add_argument( + '--indent_width', + dest='indent_width', + default=2, + type=int, + help='indentation width (defaults to 2 spaces)') + +group.add_argument( + '-a', '--reindent_aligned', + action='store_true', + default=False, + help='reindent statements to aligned format') + +group.add_argument( + '-s', '--use_space_around_operators', + action='store_true', + default=False, + help='place spaces around mathematical operators') + +group.add_argument( + '--wrap_after', + dest='wrap_after', + default=0, + type=int, + help='Column after which lists should be wrapped') + + +def _error(msg): """Print msg and optionally exit with return code exit_.""" sys.stderr.write('[ERROR] %s\n' % msg) - if exit_ is not None: - sys.exit(exit_) -def _build_formatter_opts(options): - """Convert command line options to dictionary.""" - d = {} - for option in _FORMATTING_GROUP.option_list: - d[option.dest] = getattr(options, option.dest) - return d +def main(args=None): + args = parser.parse_args(args) - -def main(): - options, args = parser.parse_args() - if options.verbose: - sys.stderr.write('Verbose mode\n') - - if len(args) != 1: - _error('No input data.') - parser.print_usage() - sys.exit(1) - - if '-' in args: # read from stdin + if args.filename == '-': # read from stdin data = sys.stdin.read() else: try: - data = ''.join(open(args[0]).readlines()) - except OSError: - err = sys.exc_info()[1] # Python 2.5 compatibility - _error('Failed to read %s: %s' % (args[0], err), exit_=1) + data = ''.join(open(args.filename).readlines()) + except IOError as e: + _error('Failed to read %s: %s' % (args.filename, e)) + return 1 - if options.outfile: + if args.outfile: try: - stream = open(options.outfile, 'w') - except OSError: - err = sys.exc_info()[1] # Python 2.5 compatibility - _error('Failed to open %s: %s' % (options.outfile, err), exit_=1) + stream = open(args.outfile, 'w') + except IOError as e: + _error('Failed to open %s: %s' % (args.outfile, e)) + return 1 else: stream = sys.stdout - formatter_opts = _build_formatter_opts(options) + formatter_opts = vars(args) try: formatter_opts = sqlparse.formatter.validate_options(formatter_opts) - except SQLParseError: - err = sys.exc_info()[1] # Python 2.5 compatibility - _error('Invalid options: %s' % err, exit_=1) + except SQLParseError as e: + _error('Invalid options: %s' % e) + return 1 s = sqlparse.format(data, **formatter_opts) - if sys.version_info < (3,): + if PY2: s = s.encode('utf-8', 'replace') stream.write(s) stream.flush() + return 0 if __name__ == '__main__': - main() + sys.exit(main()) |
