# HG changeset patch # User Brian Neal # Date 1372618983 18000 # Node ID c10322a646d9e04eaf767349d690eaebf56ad0ff # Parent efdb3b57fb46714c9b8eec22cd65232bfce3a2b9 First working version of the keygen command. diff -r efdb3b57fb46 -r c10322a646d9 m209/keylist/config.py --- a/m209/keylist/config.py Thu Jun 27 21:54:55 2013 -0500 +++ b/m209/keylist/config.py Sun Jun 30 14:03:03 2013 -0500 @@ -59,31 +59,20 @@ letter_check=section['check']) -def write_key_list(fname, key_list): - """Updates the file named by fname with the given key_list. +def write(fname, key_lists): + """Writes the key lists to the file named fname in config file format. - If the file doesn't exist, it is created and the key_list is written to it. - - If the file already exists, it is read and searched for a section that - matches the key_list indicator name. If found, this section is updated and - the file is written back out. If the section is not found, one for the - key_list is added and the file is written out. + key_lists must be an iterable of KeyList objects. """ config = configparser.ConfigParser(interpolation=None) - config.read(fname) - # If the section for this key list doesn't exist, add one - if not config.has_section(key_list.indicator): - config.add_section(key_list.indicator) + for key_list in key_lists: + config[key_list.indicator] = {} + config[key_list.indicator]['lugs'] = key_list.lugs + for n, wheel in enumerate(WHEELS): + config[key_list.indicator][wheel] = key_list.pin_list[n] + config[key_list.indicator]['check'] = key_list.letter_check - # Now update it - section = config[key_list.indicator] - section['lugs'] = key_list.lugs - for n, wheel in enumerate(WHEELS): - section[wheel] = key_list.pin_list[n] - section['check'] = key_list.letter_check - - # Write the file with open(fname, 'w') as fp: config.write(fp) diff -r efdb3b57fb46 -r c10322a646d9 m209/keylist/tests/test_config.py --- a/m209/keylist/tests/test_config.py Thu Jun 27 21:54:55 2013 -0500 +++ b/m209/keylist/tests/test_config.py Sun Jun 30 14:03:03 2013 -0500 @@ -13,7 +13,7 @@ import unittest from ..key_list import KeyList -from ..config import read_key_list, write_key_list +from ..config import read_key_list, write @contextmanager @@ -48,11 +48,10 @@ os.close(fd) with file_remover(path): - write_key_list(path, key_list1) + write(path, [key_list1]) key_list2 = read_key_list(path, key_list1.indicator) self.assertEqual(key_list1, key_list2) kl3 = read_key_list(path, 'BB') self.assertTrue(kl3 is None) - diff -r efdb3b57fb46 -r c10322a646d9 m209/main.py --- a/m209/main.py Thu Jun 27 21:54:55 2013 -0500 +++ b/m209/main.py Sun Jun 30 14:03:03 2013 -0500 @@ -14,6 +14,7 @@ from .keylist.generate import generate_key_list from .keylist.key_list import valid_indicator, IndicatorIter +from .keylist.config import write as write_config DESC = "M-209 simulator and utility program" @@ -25,7 +26,7 @@ """Validation/conversion function for validating the supplied starting key list indicator. - Returns the string valud if valid, otherwise raises an ArgumentTypeError. + Returns the string value if valid, otherwise raises an ArgumentTypeError. """ if s == '*' or valid_indicator(s): @@ -65,13 +66,14 @@ def keygen(args): """Key list generation subcommand processor""" - print('Creating key list!', args) + logging.info("Creating key list file: %s", args.file) if not args.overwrite and os.path.exists(args.file): sys.exit("File '{}' exists. Use -o to overwrite\n".format(args.file)) if args.start == '*': # random indicators indicators = random.sample([i for i in IndicatorIter()], args.number) + indicators.sort() else: it = IndicatorIter(args.start) n = len(it) @@ -83,8 +85,7 @@ key_lists = (generate_key_list(indicator) for indicator in indicators) - for key_list in key_lists: - print(key_list) + write_config(args.file, key_lists) def main(argv=None): @@ -140,9 +141,14 @@ args = parser.parse_args(args=argv) log_level = getattr(logging, args.log.upper()) - logging.basicConfig(level=log_level, format='%(levelname)s:%(message)s') + logging.basicConfig(level=log_level, format='%(message)s') - args.subcommand(args) + try: + args.subcommand(args) + except EnvironmentError as ex: + sys.exit('{}\n'.format(ex)) + except KeyboardInterrupt: + sys.exit('Interrupted\n') if __name__ == '__main__':