mirror of https://github.com/tqdm/tqdm.git
cli: fix & update completion
This commit is contained in:
parent
783bd6e070
commit
17482374a5
|
@ -3,10 +3,9 @@ Auto-generate tqdm/completion.sh from docstrings.
|
|||
"""
|
||||
import re
|
||||
import sys
|
||||
from io import open as io_open
|
||||
from os import path
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, path.dirname(path.dirname(__file__)))
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
import tqdm # NOQA
|
||||
import tqdm.cli # NOQA
|
||||
|
||||
|
@ -27,13 +26,12 @@ def doc2opt(doc, user_input=True):
|
|||
# CLI options
|
||||
options = {'-h', '--help', '-v', '--version'}
|
||||
options_input = set()
|
||||
for doc in (tqdm.tqdm.__init__.__doc__, tqdm.cli.CLI_EXTRA_DOC):
|
||||
for doc in (tqdm.tqdm.__doc__, tqdm.cli.CLI_EXTRA_DOC):
|
||||
options.update(doc2opt(doc, user_input=False))
|
||||
options_input.update(doc2opt(doc, user_input=True))
|
||||
options.difference_update('--' + i for i in ('name',) + tqdm.cli.UNSUPPORTED_OPTS)
|
||||
options_input &= options
|
||||
options_input -= {"--log"} # manually dealt with
|
||||
src_dir = path.abspath(path.dirname(__file__))
|
||||
completion = u"""\
|
||||
#!/usr/bin/env bash
|
||||
_tqdm(){{
|
||||
|
@ -58,6 +56,5 @@ complete -F _tqdm tqdm
|
|||
""".format(opts=' '.join(sorted(options)), opts_manual='|'.join(sorted(options_input)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
fncompletion = path.join(path.dirname(src_dir), 'tqdm', 'completion.sh')
|
||||
with io_open(fncompletion, mode='w', encoding='utf-8') as fd:
|
||||
fd.write(completion)
|
||||
(Path(__file__).resolve().parent.parent / 'tqdm' / 'completion.sh').write_text(
|
||||
completion, encoding='utf-8')
|
||||
|
|
66
tqdm/cli.py
66
tqdm/cli.py
|
@ -98,7 +98,7 @@ def posix_pipe(fin, fout, delim=b'\\n', buf_size=256,
|
|||
|
||||
|
||||
# ((opt, type), ... )
|
||||
RE_OPTS = re.compile(r'\n {8}(\S+)\s{2,}:\s*([^,]+)')
|
||||
RE_OPTS = re.compile(r'\n {4}(\S+)\s{2,}:\s*([^,]+)')
|
||||
# better split method assuming no positional args
|
||||
RE_SHLEX = re.compile(r'\s*(?<!\S)--?([^\s=]+)(\s+|=|$)')
|
||||
|
||||
|
@ -107,37 +107,37 @@ UNSUPPORTED_OPTS = ('iterable', 'gui', 'out', 'file')
|
|||
|
||||
# The 8 leading spaces are required for consistency
|
||||
CLI_EXTRA_DOC = r"""
|
||||
Extra CLI Options
|
||||
-----------------
|
||||
name : type, optional
|
||||
TODO: find out why this is needed.
|
||||
delim : chr, optional
|
||||
Delimiting character [default: '\n']. Use '\0' for null.
|
||||
N.B.: on Windows systems, Python converts '\n' to '\r\n'.
|
||||
buf_size : int, optional
|
||||
String buffer size in bytes [default: 256]
|
||||
used when `delim` is specified.
|
||||
bytes : bool, optional
|
||||
If true, will count bytes, ignore `delim`, and default
|
||||
`unit_scale` to True, `unit_divisor` to 1024, and `unit` to 'B'.
|
||||
tee : bool, optional
|
||||
If true, passes `stdin` to both `stderr` and `stdout`.
|
||||
update : bool, optional
|
||||
If true, will treat input as newly elapsed iterations,
|
||||
i.e. numbers to pass to `update()`. Note that this is slow
|
||||
(~2e5 it/s) since every input must be decoded as a number.
|
||||
update_to : bool, optional
|
||||
If true, will treat input as total elapsed iterations,
|
||||
i.e. numbers to assign to `self.n`. Note that this is slow
|
||||
(~2e5 it/s) since every input must be decoded as a number.
|
||||
null : bool, optional
|
||||
If true, will discard input (no stdout).
|
||||
manpath : str, optional
|
||||
Directory in which to install tqdm man pages.
|
||||
comppath : str, optional
|
||||
Directory in which to place tqdm completion.
|
||||
log : str, optional
|
||||
CRITICAL|FATAL|ERROR|WARN(ING)|[default: 'INFO']|DEBUG|NOTSET.
|
||||
Extra CLI Options
|
||||
-----------------
|
||||
name : type, optional
|
||||
TODO: find out why this is needed.
|
||||
delim : chr, optional
|
||||
Delimiting character [default: '\n']. Use '\0' for null.
|
||||
N.B.: on Windows systems, Python converts '\n' to '\r\n'.
|
||||
buf_size : int, optional
|
||||
String buffer size in bytes [default: 256]
|
||||
used when `delim` is specified.
|
||||
bytes : bool, optional
|
||||
If true, will count bytes, ignore `delim`, and default
|
||||
`unit_scale` to True, `unit_divisor` to 1024, and `unit` to 'B'.
|
||||
tee : bool, optional
|
||||
If true, passes `stdin` to both `stderr` and `stdout`.
|
||||
update : bool, optional
|
||||
If true, will treat input as newly elapsed iterations,
|
||||
i.e. numbers to pass to `update()`. Note that this is slow
|
||||
(~2e5 it/s) since every input must be decoded as a number.
|
||||
update_to : bool, optional
|
||||
If true, will treat input as total elapsed iterations,
|
||||
i.e. numbers to assign to `self.n`. Note that this is slow
|
||||
(~2e5 it/s) since every input must be decoded as a number.
|
||||
null : bool, optional
|
||||
If true, will discard input (no stdout).
|
||||
manpath : str, optional
|
||||
Directory in which to install tqdm man pages.
|
||||
comppath : str, optional
|
||||
Directory in which to place tqdm completion.
|
||||
log : str, optional
|
||||
CRITICAL|FATAL|ERROR|WARN(ING)|[default: 'INFO']|DEBUG|NOTSET.
|
||||
"""
|
||||
|
||||
|
||||
|
@ -166,7 +166,7 @@ def main(fp=sys.stderr, argv=None):
|
|||
logging.basicConfig(level=getattr(logging, logLevel),
|
||||
format="%(levelname)s:%(module)s:%(lineno)d:%(message)s")
|
||||
|
||||
d = tqdm.__init__.__doc__ + CLI_EXTRA_DOC
|
||||
d = tqdm.__doc__ + CLI_EXTRA_DOC
|
||||
|
||||
opt_types = dict(RE_OPTS.findall(d))
|
||||
# opt_types['delim'] = 'chr'
|
||||
|
|
|
@ -204,10 +204,8 @@ float, optional.
|
|||
.TP
|
||||
.B \-\-write\-bytes
|
||||
bool, optional.
|
||||
If (default: None) and \f[C]file\f[] is unspecified, bytes will be
|
||||
written in Python 2.
|
||||
If \f[C]True\f[] will also write bytes.
|
||||
In all other cases will default to unicode.
|
||||
Whether to write bytes.
|
||||
If (default: False) will write unicode.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
|
|
Loading…
Reference in New Issue