Eric Fried d1a515eac0 Import argparse directly
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
2020-01-14 11:37:05 -06:00

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