misc.py 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. """ Misc utils
  2. Hacked together by / Copyright 2020 Ross Wightman
  3. """
  4. import argparse
  5. import ast
  6. import re
  7. def natural_key(string_):
  8. """See http://www.codinghorror.com/blog/archives/001018.html"""
  9. return [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', string_.lower())]
  10. def add_bool_arg(parser, name, default=False, help=''):
  11. dest_name = name.replace('-', '_')
  12. group = parser.add_mutually_exclusive_group(required=False)
  13. group.add_argument('--' + name, dest=dest_name, action='store_true', help=help)
  14. group.add_argument('--no-' + name, dest=dest_name, action='store_false', help=help)
  15. parser.set_defaults(**{dest_name: default})
  16. class ParseKwargs(argparse.Action):
  17. def __call__(self, parser, namespace, values, option_string=None):
  18. kw = {}
  19. for value in values:
  20. key, value = value.split('=')
  21. try:
  22. kw[key] = ast.literal_eval(value)
  23. except ValueError:
  24. kw[key] = str(value) # fallback to string (avoid need to escape on command line)
  25. setattr(namespace, self.dest, kw)