# Copyright (C) 2012 Anaconda, Inc # SPDX-License-Identifier: BSD-3-Clause """ Collection of custom argparse actions. """ from argparse import Action, _CountAction from ..common.constants import NULL class NullCountAction(_CountAction): @staticmethod def _ensure_value(namespace, name, value): if getattr(namespace, name, NULL) in (NULL, None): setattr(namespace, name, value) return getattr(namespace, name) def __call__(self, parser, namespace, values, option_string=None): new_count = self._ensure_value(namespace, self.dest, 0) + 1 setattr(namespace, self.dest, new_count) class ExtendConstAction(Action): """ A derivative of _AppendConstAction and Python 3.8's _ExtendAction """ def __init__( self, option_strings, dest, const, default=None, type=None, choices=None, required=False, help=None, metavar=None, ): super().__init__( option_strings=option_strings, dest=dest, nargs="*", const=const, default=default, type=type, choices=choices, required=required, help=help, metavar=metavar, ) def __call__(self, parser, namespace, values, option_string=None): items = getattr(namespace, self.dest, None) items = [] if items is None else items[:] items.extend(values or [self.const]) setattr(namespace, self.dest, items)