Override cliff command parser to handle argparser conflict_handler
The argparse conflict_handler is hardcoded in Cliff, this patch override the command.Command().get_parser from Cliff in order to change the value. The conflict_handler from argparse is important for the VF because it's allow callers to override VF CLI args. Change-Id: I72524eeb3fc1ac0f384dcef25de61089ff15f67f
This commit is contained in:
parent
eaf304f62e
commit
29b147e431
|
@ -0,0 +1,57 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# Copyright 2021 Red Hat, 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.
|
||||||
|
|
||||||
|
|
||||||
|
from cliff import _argparse
|
||||||
|
from cliff.command import Command
|
||||||
|
from cliff.lister import Lister
|
||||||
|
|
||||||
|
|
||||||
|
class BaseCommand(Command):
|
||||||
|
"""Base Command client implementation class"""
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
"""Argument parser for base command"""
|
||||||
|
parser = _argparse.ArgumentParser(
|
||||||
|
description=self.get_description(),
|
||||||
|
epilog=self.get_epilog(),
|
||||||
|
prog=prog_name,
|
||||||
|
formatter_class=_argparse.SmartHelpFormatter,
|
||||||
|
conflict_handler='resolve',
|
||||||
|
)
|
||||||
|
for hook in self._hooks:
|
||||||
|
hook.obj.get_parser(parser)
|
||||||
|
return parser
|
||||||
|
|
||||||
|
|
||||||
|
class BaseLister(Lister):
|
||||||
|
"""Base Lister client implementation class"""
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
"""Argument parser for base lister"""
|
||||||
|
parser = super(BaseLister, self).get_parser(prog_name)
|
||||||
|
vf_parser = _argparse.ArgumentParser(
|
||||||
|
description=self.get_description(),
|
||||||
|
epilog=self.get_epilog(),
|
||||||
|
prog=prog_name,
|
||||||
|
formatter_class=_argparse.SmartHelpFormatter,
|
||||||
|
conflict_handler='resolve',
|
||||||
|
)
|
||||||
|
|
||||||
|
for action in parser._actions:
|
||||||
|
vf_parser._add_action(action)
|
||||||
|
|
||||||
|
return vf_parser
|
|
@ -16,15 +16,14 @@
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from cliff.command import Command
|
|
||||||
from cliff.lister import Lister
|
|
||||||
|
|
||||||
from validations_libs import constants
|
from validations_libs import constants
|
||||||
from validations_libs.validation_actions import ValidationActions
|
from validations_libs.validation_actions import ValidationActions
|
||||||
from validations_libs.validation_logs import ValidationLogs
|
from validations_libs.validation_logs import ValidationLogs
|
||||||
|
from validations_libs.cli.base import BaseCommand
|
||||||
|
from validations_libs.cli.base import BaseLister
|
||||||
|
|
||||||
|
|
||||||
class ListHistory(Lister):
|
class ListHistory(BaseLister):
|
||||||
"""Display Validations execution history"""
|
"""Display Validations execution history"""
|
||||||
|
|
||||||
def get_parser(self, parser):
|
def get_parser(self, parser):
|
||||||
|
@ -70,7 +69,7 @@ class ListHistory(Lister):
|
||||||
history_limit=parsed_args.history_limit)
|
history_limit=parsed_args.history_limit)
|
||||||
|
|
||||||
|
|
||||||
class GetHistory(Command):
|
class GetHistory(BaseCommand):
|
||||||
"""Display details about a Validation execution"""
|
"""Display details about a Validation execution"""
|
||||||
|
|
||||||
def get_parser(self, parser):
|
def get_parser(self, parser):
|
||||||
|
|
|
@ -17,15 +17,14 @@
|
||||||
import getpass
|
import getpass
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from cliff.command import Command
|
|
||||||
|
|
||||||
from validations_libs import constants
|
from validations_libs import constants
|
||||||
from validations_libs.validation_actions import ValidationActions
|
from validations_libs.validation_actions import ValidationActions
|
||||||
from validations_libs.cli import common
|
from validations_libs.cli import common
|
||||||
|
from validations_libs.cli.base import BaseCommand
|
||||||
from validations_libs.cli.parseractions import CommaListAction, KeyValueAction
|
from validations_libs.cli.parseractions import CommaListAction, KeyValueAction
|
||||||
|
|
||||||
|
|
||||||
class Run(Command):
|
class Run(BaseCommand):
|
||||||
"""Validation Run client implementation class"""
|
"""Validation Run client implementation class"""
|
||||||
|
|
||||||
def get_parser(self, parser):
|
def get_parser(self, parser):
|
||||||
|
|
Loading…
Reference in New Issue