
We were importing _argparse (private) from cliff to get at argparse.HelpFormatter, which was present there only because it was being transitively imported directly from argparse itself. Commit 584352dcd008d58c433136539b22a6ae9d6c45cc got rid of this transitive import, which means that rsdclient would have broken on the next cliff release. This commit just imports argparse directly instead. And because that was the only reference to cliff in the project, this commit also removes it from the requirements. For more information, see http://lists.openstack.org/pipermail/openstack-discuss/2020-January/011852.html Change-Id: I7f99d80a3be38acc45af83e54b32ebc2f5b40859
58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
# Copyright 2017 Intel, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
|
|
import argparse
|
|
|
|
from osc_lib.command import command
|
|
|
|
|
|
class Command(command.Command):
|
|
|
|
def get_parser(self, prog_name):
|
|
parser = super(Command, self).get_parser(prog_name)
|
|
parser.formatter_class = _SmartHelpFormatter
|
|
|
|
return parser
|
|
|
|
|
|
class _SmartHelpFormatter(argparse.HelpFormatter):
|
|
"""New smart argparse HelpFormatter
|
|
|
|
Smart help formatter to output raw help message if it contains newline
|
|
and heading whitespaces.
|
|
"""
|
|
|
|
def _split_lines(self, text, width):
|
|
lines = text.splitlines() if '\n' in text else [text]
|
|
wrap_lines = []
|
|
for each_line in lines:
|
|
if each_line == '':
|
|
# Handle newline case
|
|
wrap_lines.append('')
|
|
elif each_line.startswith(' '):
|
|
# Handle heading whitespaces case
|
|
spaces_width = len(each_line) - len(each_line.lstrip())
|
|
lines = super(_SmartHelpFormatter, self)._split_lines(
|
|
each_line, width - spaces_width)
|
|
wrap_lines.extend([' ' * spaces_width + line
|
|
for line in lines])
|
|
else:
|
|
# Handle normal case
|
|
wrap_lines.extend(
|
|
super(_SmartHelpFormatter, self)._split_lines(
|
|
each_line, width)
|
|
)
|
|
return wrap_lines
|