From 90dc74b2ff8f36dd2495632a8150ce37dab61f1c Mon Sep 17 00:00:00 2001 From: Scott Gasch Date: Thu, 3 Feb 2022 19:39:40 -0800 Subject: [PATCH] Make it clear in arg message that this is a library. Dependency inject the index file name to the c'tor to override the flag. --- unscrambler.py | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/unscrambler.py b/unscrambler.py index 78c1f9b..9df82f6 100644 --- a/unscrambler.py +++ b/unscrambler.py @@ -1,15 +1,18 @@ #!/usr/bin/env python3 import logging -from typing import Dict, Mapping +from typing import Dict, Mapping, Optional import config import decorator_utils +import file_utils import list_utils -cfg = config.add_commandline_args(f'Unscramble! ({__file__})', 'A fast word unscrambler.') +cfg = config.add_commandline_args( + f'Unscrambler base library ({__file__})', 'A fast word unscrambler.' +) cfg.add_argument( - "--unscramble_indexfile", + "--unscrambler_default_indexfile", help="Path to a file of signature -> word index.", metavar="FILENAME", default="/usr/share/dict/sparse_index", @@ -98,25 +101,31 @@ class Unscrambler(object): """ - def __init__(self): + def __init__(self, indexfile: Optional[str] = None): # Cached index per instance. self.sigs = [] self.words = [] - if 'unscramble_indexfile' in config.config: - indexfile = config.config['unscramble_indexfile'] - else: - indexfile = "/usr/share/dict/sparse_index" - - with open(indexfile, 'r') as rf: + filename = self.get_indexfile(indexfile) + with open(filename, 'r') as rf: lines = rf.readlines() for line in lines: line = line[:-1] (fsig, word) = line.split('+') - fsig = int(fsig, 16) - self.sigs.append(fsig) + isig = int(fsig, 16) + self.sigs.append(isig) self.words.append(word) + def get_indexfile(self, indexfile: Optional[str]) -> str: + if indexfile is None: + if 'unscrambler_default_indexfile' in config.config: + indexfile = config.config['unscramble_indexfile'] + else: + indexfile = "/usr/share/dict/sparse_index" + else: + assert file_utils.file_is_readable(indexfile), f"Can't read {indexfile}" + return indexfile + # 52 bits @staticmethod def _compute_word_fingerprint(word: str, population: Mapping[str, int]) -> int: -- 2.46.0