tqdm

Форк
0
/
mkcompletion.py 
60 строк · 1.6 Кб
1
"""
2
Auto-generate tqdm/completion.sh from docstrings.
3
"""
4
import re
5
import sys
6
from pathlib import Path
7

8
sys.path.insert(0, str(Path(__file__).parent.parent))
9
import tqdm  # NOQA
10
import tqdm.cli  # NOQA
11

12
RE_OPT = re.compile(r'(\w+)  :', flags=re.M)
13
RE_OPT_INPUT = re.compile(r'(\w+)  : (?:str|int|float|chr|dict|tuple)', flags=re.M)
14

15

16
def doc2opt(doc, user_input=True):
17
    """
18
    doc  : str, document to parse
19
    user_input  : bool, optional.
20
      [default: True] for only options requiring user input
21
    """
22
    RE = RE_OPT_INPUT if user_input else RE_OPT
23
    return ('--' + i for i in RE.findall(doc))
24

25

26
# CLI options
27
options = {'-h', '--help', '-v', '--version'}
28
options_input = set()
29
for doc in (tqdm.tqdm.__doc__, tqdm.cli.CLI_EXTRA_DOC):
30
    options.update(doc2opt(doc, user_input=False))
31
    options_input.update(doc2opt(doc, user_input=True))
32
options.difference_update('--' + i for i in ('name',) + tqdm.cli.UNSUPPORTED_OPTS)
33
options_input &= options
34
options_input -= {"--log"}  # manually dealt with
35
completion = u"""\
36
#!/usr/bin/env bash
37
_tqdm(){{
38
  local cur prv
39
  cur="${{COMP_WORDS[COMP_CWORD]}}"
40
  prv="${{COMP_WORDS[COMP_CWORD - 1]}}"
41

42
  case ${{prv}} in
43
  {opts_manual})
44
    # await user input
45
    ;;
46
  "--log")
47
    COMPREPLY=($(compgen -W \
48
      'CRITICAL FATAL ERROR WARN WARNING INFO DEBUG NOTSET' -- ${{cur}}))
49
    ;;
50
  *)
51
    COMPREPLY=($(compgen -W '{opts}' -- ${{cur}}))
52
    ;;
53
  esac
54
}}
55
complete -F _tqdm tqdm
56
""".format(opts=' '.join(sorted(options)), opts_manual='|'.join(sorted(options_input)))
57

58
if __name__ == "__main__":
59
    (Path(__file__).resolve().parent.parent / 'tqdm' / 'completion.sh').write_text(
60
        completion, encoding='utf-8')
61

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.