diff --git a/commands/__init__.py b/commands/__init__.py index 7a580b59..5832a173 100644 --- a/commands/__init__.py +++ b/commands/__init__.py @@ -46,22 +46,6 @@ def __call__(self, parser, namespace, values, option_string=None): parser.format_help() ) -class CreditParser(int): - """ - argparse type helper for handling suffixes for thousand, million and "billion" - """ - - suffixes = dict(zip("kmb", map(lambda x: 10**x, (3, 6, 9)))) # damn american billion. What's wrong with milliard? - - def __new__(cls, val, **kwargs): - if isinstance(val, str): - if val[-1] in CreditParser.suffixes: - val = int(float(val[:-1]) * CreditParser.suffixes[val[-1]]) - return super(CreditParser, cls).__new__(cls, val, **kwargs) - - @classmethod - def register(cls, target): - target.register('type', 'credits', CreditParser) def addArguments(group, options, required, topGroup=None): """ @@ -73,7 +57,7 @@ def addArguments(group, options, required, topGroup=None): for option in options: if isinstance(option, parsing.MutuallyExclusiveGroup): exGrp = (topGroup or group).add_mutually_exclusive_group() - CreditParser.register(exGrp) + parsing.registerParserHelpers(exGrp) addArguments(exGrp, option.arguments, required, topGroup=group) else: assert not required in option.kwargs @@ -187,7 +171,7 @@ def error(self, message): ) ) parser.set_defaults(_editing=False) - CreditParser.register(parser) + parsing.registerParserHelpers(parser) subParsers = parser.add_subparsers(title='Command Options') subParser = subParsers.add_parser(cmdModule.name, @@ -195,7 +179,7 @@ def error(self, message): add_help=False, epilog=cmdModule.epilog, ) - CreditParser.register(subParser) + parsing.registerParserHelpers(subParser) arguments = cmdModule.arguments if arguments: diff --git a/commands/parsing.py b/commands/parsing.py index 3785a273..627e8e07 100644 --- a/commands/parsing.py +++ b/commands/parsing.py @@ -13,4 +13,26 @@ def __init__(self, *args, **kwargs): class MutuallyExclusiveGroup(object): def __init__(self, *args): - self.arguments = list(args) \ No newline at end of file + self.arguments = list(args) + +# Derived classes + +class CreditParser(int): + """ + argparse helper for parsing numeric prefixes, i.e. + 'k' for thousand, 'm' for million and 'b' for billion. + """ + suffixes = {'k': 10**3, 'm': 10**6, 'b': 10**9} + def __new__(cls, val, **kwargs): + if isinstance(val, str): + if val[-1] in CreditParser.suffixes: + val = int(float(val[:-1]) * CreditParser.suffixes[val[-1]]) + return super().__new__(cls, val, **kwargs) + +__tdParserHelpers = { + 'credits': CreditParser, +} + +def registerParserHelpers(into): + for typeName, helper in __tdParserHelpers.items(): + into.register('type', typeName, helper)