Source code for utool._internal.meta_util_arg
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
import types
import six
import sys
DEBUG = '--debug' in sys.argv
DEBUG2 = '--debug2' in sys.argv
NO_ASSERTS = '--no-assert' in sys.argv
QUIET = '--quiet' in sys.argv
SILENT = '--silent' in sys.argv
SAFE = '--safe' in sys.argv
STRICT = '--strict' not in sys.argv
REPORT = '--report' not in sys.argv
TRACE = '--trace' in sys.argv
SUPER_STRICT = '--super-strict' in sys.argv or '--superstrict' in sys.argv
VERBOSE = '--verbose' in sys.argv or '--verb' in sys.argv
VERYVERBOSE = '--very-verbose' in sys.argv or '--veryverbose' in sys.argv
NO_INDENT = '--noindent' in sys.argv or '--no-indent' in sys.argv or SILENT
PRINT_ALL_CALLERS = '--print-all-callers' in sys.argv
USE_ASSERT = not NO_ASSERTS
NOT_QUIET = not QUIET
PRINT_INJECT_ORDER = (
VERYVERBOSE
or '--print-inject-order' in sys.argv
or '--verbinject' in sys.argv
or '--print-imports' in sys.argv
or '--verb-inject' in sys.argv
or '--verbimport' in sys.argv
or '--verbimp' in sys.argv
or '--verb-import' in sys.argv
or '--verb-import' in sys.argv
or '--verbose-import' in sys.argv
)
LOGGING_VERBOSE = VERYVERBOSE or '--verb-logging' in sys.argv
if PRINT_INJECT_ORDER:
# HACK
from utool._internal import meta_util_dbg
from six.moves import builtins
N = 0
callername = meta_util_dbg.get_caller_name(N=2 + N, strict=False)
lineno = meta_util_dbg.get_caller_lineno(N=2 + N, strict=False)
fmtdict = dict(N=N, lineno=lineno, callername=callername, modname=__name__)
msg = '[util_inject] N={N} {modname} is imported by {callername} at lineno={lineno}'.format(
**fmtdict
)
builtins.print(msg)
def _try_cast(val, type_):
if type_ in [types.BooleanType] and isinstance(val, six.string_types):
if val.lower() == 'true':
newval = True
elif val.lower() == 'false':
newval = True
else:
newval = type_(val)
return newval
[docs]def get_argflag(flag):
return flag in sys.argv
# FIXME: on a rrrr this get_argval is taken
# instead of the correct one from util_arg
[docs]def get_argval(argstr, type_=None, default=None):
r"""
Returns a value of an argument specified on the command line after some flag
CommandLine:
python -c "import utool; print([(type(x), x) for x in [utool.get_argval('--quest')]])" --quest="holy grail"
python -c "import utool; print([(type(x), x) for x in [utool.get_argval('--quest')]])" --quest="42"
python -c "import utool; print([(type(x), x) for x in [utool.get_argval('--quest')]])" --quest=42
python -c "import utool; print([(type(x), x) for x in [utool.get_argval('--quest')]])" --quest 42
python -c "import utool; print([(type(x), x) for x in [utool.get_argval('--quest', float)]])" --quest 42
Example:
>>> # DISABLE_DOCTEST
>>> from utool.util_arg import * # NOQA
>>> import sys
>>> sys.argv.extend(['--spam', 'eggs', '--quest=holy grail', '--ans=42'])
>>> get_argval('--spam', type_=str, default=None)
eggs
>>> get_argval('--quest', type_=str, default=None)
holy grail
>>> get_argval('--ans', type_=int, default=None)
42
"""
arg_after = default
if type_ is bool:
arg_after = False if default is None else default
try:
# New for loop way (accounts for =)
for argx, item in enumerate(sys.argv):
if item == argstr:
if argx < len(sys.argv):
if type_ is bool:
arg_after = True
else:
arg_after = _try_cast(sys.argv[argx + 1], type_)
if item.startswith(argstr + '='):
val_after = ''.join(item.split('=')[1:])
arg_after = _try_cast(val_after, type_)
except Exception:
pass
return arg_after