summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarijan Smetko <msmetko@msmetko.xyz>2022-01-22 20:10:52 +0100
committerGitHub <noreply@github.com>2022-01-22 21:10:52 +0200
commitc49d9fa30143c9c4effcfa38b373e506383e829c (patch)
tree603967428c156b8045fb3bdacedee277951eca3d
parent0321d6d82529431a68ff899ada787bf45aaaac65 (diff)
Migrate from optparse to argparse (#291)
-rwxr-xr-xbin/q.py90
1 files changed, 44 insertions, 46 deletions
diff --git a/bin/q.py b/bin/q.py
index 653b8e5..31d10c1 100755
--- a/bin/q.py
+++ b/bin/q.py
@@ -43,7 +43,7 @@ import os
import sys
import sqlite3
import glob
-from optparse import OptionParser,OptionGroup
+from argparse import ArgumentParser
import codecs
import locale
import time
@@ -3205,7 +3205,8 @@ def get_option_with_default(p, option_type, option, default):
QRC_FILENAME_ENVVAR = 'QRC_FILENAME'
def dump_default_values_as_qrc(parser,exclusions):
- m = parser.get_default_values().__dict__
+ m = parser.parse_args([]).__dict__
+ m.pop('leftover')
print("[options]",file=sys.stdout)
for k in sorted(m.keys()):
if k not in exclusions:
@@ -3339,106 +3340,103 @@ def initialize_command_line_parser(p, qrc_filename):
print("Incorrect value '%s' for option %s in .qrc file %s (option type is %s)" % (
e.actual_value, e.option, qrc_filename, e.option_type))
sys.exit(199)
- parser = OptionParser(prog="q",usage=USAGE_TEXT)
- parser.add_option("-v", "--version", dest="version", default=False, action="store_true",
- help="Print version")
- parser.add_option("-V", "--verbose", dest="verbose", default=default_verbose, action="store_true",
+ parser = ArgumentParser(prog="q",usage=USAGE_TEXT)
+ parser.add_argument("-v", "--version", action="store_true", help="Print version")
+ parser.add_argument("-V", "--verbose", default=default_verbose, action="store_true",
help="Print debug info in case of problems")
- parser.add_option("-S", "--save-db-to-disk", dest="save_db_to_disk_filename", default=default_save_db_to_disk,
+ parser.add_argument("-S", "--save-db-to-disk", dest="save_db_to_disk_filename", default=default_save_db_to_disk,
help="Save database to an sqlite database file")
- parser.add_option("-C", "--caching-mode", dest="caching_mode", default=default_caching_mode,
+ parser.add_argument("-C", "--caching-mode", default=default_caching_mode,
help="Choose the autocaching mode (none/read/readwrite). Autocaches files to disk db so further queries will be faster. Caching is done to a side-file with the same name of the table, but with an added extension .qsql")
- parser.add_option("", "--dump-defaults", dest="dump_defaults", default=False, action="store_true",
+ parser.add_argument("--dump-defaults", action="store_true",
help="Dump all default values for parameters and exit. Can be used in order to make sure .qrc file content is being read properly.")
- parser.add_option("", "--max-attached-sqlite-databases", dest="max_attached_sqlite_databases", default=default_max_attached_sqlite_databases,type="int",
+ parser.add_argument("--max-attached-sqlite-databases", default=default_max_attached_sqlite_databases,type=int,
help="Set the maximum number of concurrently-attached sqlite dbs. This is a compile time definition of sqlite. q's performance will slow down once this limit is reached for a query, since it will perform table copies in order to avoid that limit.")
# -----------------------------------------------
- input_data_option_group = OptionGroup(parser, "Input Data Options")
- input_data_option_group.add_option("-H", "--skip-header", dest="skip_header", default=default_skip_header,
+ input_data_option_group = parser.add_argument_group("Input Data Options")
+ input_data_option_group.add_argument("-H", "--skip-header", default=default_skip_header,
action="store_true",
help="Skip header row. This has been changed from earlier version - Only one header row is supported, and the header row is used for column naming")
- input_data_option_group.add_option("-d", "--delimiter", dest="delimiter", default=default_delimiter,
+ input_data_option_group.add_argument("-d", "--delimiter", default=default_delimiter,
help="Field delimiter. If none specified, then space is used as the delimiter.")
- input_data_option_group.add_option("-p", "--pipe-delimited", dest="pipe_delimited", default=default_pipe_delimited,
+ input_data_option_group.add_argument("-p", "--pipe-delimited", default=default_pipe_delimited,
action="store_true",
help="Same as -d '|'. Added for convenience and readability")
- input_data_option_group.add_option("-t", "--tab-delimited", dest="tab_delimited", default=default_tab_delimited,
+ input_data_option_group.add_argument("-t", "--tab-delimited", default=default_tab_delimited,
action="store_true",
help="Same as -d <tab>. Just a shorthand for handling standard tab delimited file You can use $'\\t' if you want (this is how Linux expects to provide tabs in the command line")
- input_data_option_group.add_option("-e", "--encoding", dest="encoding", default=default_encoding,
+ input_data_option_group.add_argument("-e", "--encoding", default=default_encoding,
help="Input file encoding. Defaults to UTF-8. set to none for not setting any encoding - faster, but at your own risk...")
- input_data_option_group.add_option("-z", "--gzipped", dest="gzipped", default=default_gzipped, action="store_true",
+ input_data_option_group.add_argument("-z", "--gzipped", default=default_gzipped, action="store_true",
help="Data is gzipped. Useful for reading from stdin. For files, .gz means automatic gunzipping")
- input_data_option_group.add_option("-A", "--analyze-only", dest="analyze_only", default=default_analyze_only,
+ input_data_option_group.add_argument("-A", "--analyze-only", default=default_analyze_only,
action='store_true',
help="Analyze sample input and provide information about data types")
- input_data_option_group.add_option("-m", "--mode", dest="mode", default=default_mode,
+ input_data_option_group.add_argument("-m", "--mode", default=default_mode,
help="Data parsing mode. fluffy, relaxed and strict. In strict mode, the -c column-count parameter must be supplied as well")
- input_data_option_group.add_option("-c", "--column-count", dest="column_count", default=default_column_count,
+ input_data_option_group.add_argument("-c", "--column-count", default=default_column_count,
help="Specific column count when using relaxed or strict mode")
- input_data_option_group.add_option("-k", "--keep-leading-whitespace", dest="keep_leading_whitespace_in_values",
+ input_data_option_group.add_argument("-k", "--keep-leading-whitespace", dest="keep_leading_whitespace_in_values",
default=default_keep_leading_whitespace_in_values, action="store_true",
help="Keep leading whitespace in values. Default behavior strips leading whitespace off values, in order to provide out-of-the-box usability for simple use cases. If you need to preserve whitespace, use this flag.")
- input_data_option_group.add_option("--disable-double-double-quoting", dest="disable_double_double_quoting",
+ input_data_option_group.add_argument("--disable-double-double-quoting",
default=default_disable_double_double_quoting, action="store_false",
help="Disable support for double double-quoting for escaping the double quote character. By default, you can use \"\" inside double quoted fields to escape double quotes. Mainly for backward compatibility.")
- input_data_option_group.add_option("--disable-escaped-double-quoting", dest="disable_escaped_double_quoting",
+ input_data_option_group.add_argument("--disable-escaped-double-quoting",
default=default_disable_escaped_double_quoting, action="store_false",
help="Disable support for escaped double-quoting for escaping the double quote character. By default, you can use \\\" inside double quoted fields to escape double quotes. Mainly for backward compatibility.")
- input_data_option_group.add_option("--as-text", dest="disable_column_type_detection",
+ input_data_option_group.add_argument("--as-text", dest="disable_column_type_detection",
default=default_disable_column_type_detection, action="store_true",
help="Don't detect column types - All columns will be treated as text columns")
- input_data_option_group.add_option("-w", "--input-quoting-mode", dest="input_quoting_mode",
+ input_data_option_group.add_argument("-w", "--input-quoting-mode",
default=default_input_quoting_mode,
help="Input quoting mode. Possible values are all, minimal and none. Note the slightly misleading parameter name, and see the matching -W parameter for output quoting.")
- input_data_option_group.add_option("-M", "--max-column-length-limit", dest="max_column_length_limit",
+ input_data_option_group.add_argument("-M", "--max-column-length-limit",
default=default_max_column_length_limit,
help="Sets the maximum column length.")
- input_data_option_group.add_option("-U", "--with-universal-newlines", dest="with_universal_newlines",
+ input_data_option_group.add_argument("-U", "--with-universal-newlines",
default=default_with_universal_newlines, action="store_true",
help="Expect universal newlines in the data. Limitation: -U works only with regular files for now, stdin or .gz files are not supported yet.")
- parser.add_option_group(input_data_option_group)
# -----------------------------------------------
- output_data_option_group = OptionGroup(parser, "Output Options")
- output_data_option_group.add_option("-D", "--output-delimiter", dest="output_delimiter",
+ output_data_option_group = parser.add_argument_group("Output Options")
+ output_data_option_group.add_argument("-D", "--output-delimiter",
default=default_output_delimiter,
help="Field delimiter for output. If none specified, then the -d delimiter is used if present, or space if no delimiter is specified")
- output_data_option_group.add_option("-P", "--pipe-delimited-output", dest="pipe_delimited_output",
+ output_data_option_group.add_argument("-P", "--pipe-delimited-output",
default=default_pipe_delimited_output, action="store_true",
help="Same as -D '|'. Added for convenience and readability.")
- output_data_option_group.add_option("-T", "--tab-delimited-output", dest="tab_delimited_output",
+ output_data_option_group.add_argument("-T", "--tab-delimited-output",
default=default_tab_delimited_output, action="store_true",
help="Same as -D <tab>. Just a shorthand for outputting tab delimited output. You can use -D $'\\t' if you want.")
- output_data_option_group.add_option("-O", "--output-header", dest="output_header", default=default_output_header,
+ output_data_option_group.add_argument("-O", "--output-header", default=default_output_header,
action="store_true",
help="Output header line. Output column-names are determined from the query itself. Use column aliases in order to set your column names in the query. For example, 'select name FirstName,value1/value2 MyCalculation from ...'. This can be used even if there was no header in the input.")
- output_data_option_group.add_option("-b", "--beautify", dest="beautify", default=default_beautify,
+ output_data_option_group.add_argument("-b", "--beautify", default=default_beautify,
action="store_true",
help="Beautify output according to actual values. Might be slow...")
- output_data_option_group.add_option("-f", "--formatting", dest="formatting", default=default_formatting,
+ output_data_option_group.add_argument("-f", "--formatting", default=default_formatting,
help="Output-level formatting, in the format X=fmt,Y=fmt etc, where X,Y are output column numbers (e.g. 1 for first SELECT column etc.")
- output_data_option_group.add_option("-E", "--output-encoding", dest="output_encoding",
+ output_data_option_group.add_argument("-E", "--output-encoding",
default=default_output_encoding,
help="Output encoding. Defaults to 'none', leading to selecting the system/terminal encoding")
- output_data_option_group.add_option("-W", "--output-quoting-mode", dest="output_quoting_mode",
+ output_data_option_group.add_argument("-W", "--output-quoting-mode",
default=default_output_quoting_mode,
help="Output quoting mode. Possible values are all, minimal, nonnumeric and none. Note the slightly misleading parameter name, and see the matching -w parameter for input quoting.")
- output_data_option_group.add_option("-L", "--list-user-functions", dest="list_user_functions",
+ output_data_option_group.add_argument("-L", "--list-user-functions",
default=default_list_user_functions, action="store_true",
help="List all user functions")
- parser.add_option("", "--overwrite-qsql", dest="overwrite_qsql", default=default_overwrite_qsql,
+ parser.add_argument("--overwrite-qsql", default=default_overwrite_qsql,
help="When used, qsql files (both caches and store-to-db) will be overwritten if they already exist. Use with care.")
- parser.add_option_group(output_data_option_group)
# -----------------------------------------------
- query_option_group = OptionGroup(parser, "Query Related Options")
- query_option_group.add_option("-q", "--query-filename", dest="query_filename", default=default_query_filename,
+ query_option_group = parser.add_argument_group("Query Related Options")
+ query_option_group.add_argument("-q", "--query-filename", default=default_query_filename,
help="Read query from the provided filename instead of the command line, possibly using the provided query encoding (using -Q).")
- query_option_group.add_option("-Q", "--query-encoding", dest="query_encoding", default=default_query_encoding,
+ query_option_group.add_argument("-Q", "--query-encoding", default=default_query_encoding,
help="query text encoding. Experimental. Please send your feedback on this")
- parser.add_option_group(query_option_group)
# -----------------------------------------------
- (options, args) = parser.parse_args()
- return args, options, parser
+ parser.add_argument('leftover', nargs='*')
+ args = parser.parse_args()
+ return args.leftover, args, parser
def parse_qrc_file():