Config: Implement custom argparse TextHelpFormatter to keep line return
This commit is contained in:
parent
9c35ead28e
commit
e6ce412db0
1 changed files with 22 additions and 0 deletions
|
@ -8,8 +8,10 @@ from getpass import getpass
|
||||||
from logging.config import fileConfig
|
from logging.config import fileConfig
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import stat
|
import stat
|
||||||
import sys
|
import sys
|
||||||
|
import textwrap
|
||||||
|
|
||||||
import argcomplete
|
import argcomplete
|
||||||
import keyring
|
import keyring
|
||||||
|
@ -388,6 +390,25 @@ class ConfigSection:
|
||||||
return '\n'.join(lines)
|
return '\n'.join(lines)
|
||||||
|
|
||||||
|
|
||||||
|
class RawWrappedTextHelpFormatter(argparse.RawDescriptionHelpFormatter):
|
||||||
|
|
||||||
|
def _split_lines(self, text, width):
|
||||||
|
result = []
|
||||||
|
for line in textwrap.dedent(text).splitlines():
|
||||||
|
# Keep empty line
|
||||||
|
if line == "":
|
||||||
|
result.append(line)
|
||||||
|
continue
|
||||||
|
# Split ident prefix and line text
|
||||||
|
m = re.match('^( *)(.*)$', line)
|
||||||
|
ident = m.group(1)
|
||||||
|
line_text = m.group(2)
|
||||||
|
# Wrap each lines and add in result with ident prefix
|
||||||
|
for l in textwrap.wrap(line_text, width - len(ident)):
|
||||||
|
result.append(ident + l)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
""" Configuration helper """
|
""" Configuration helper """
|
||||||
|
|
||||||
|
@ -543,6 +564,7 @@ class Config:
|
||||||
|
|
||||||
self.options_parser = argparse.ArgumentParser(
|
self.options_parser = argparse.ArgumentParser(
|
||||||
description=kwargs.pop('description', self.appname),
|
description=kwargs.pop('description', self.appname),
|
||||||
|
formatter_class=RawWrappedTextHelpFormatter,
|
||||||
**kwargs)
|
**kwargs)
|
||||||
|
|
||||||
self.options_parser.add_argument(
|
self.options_parser.add_argument(
|
||||||
|
|
Loading…
Reference in a new issue