Make it clear in arg message that this is a library. Dependency
authorScott Gasch <[email protected]>
Fri, 4 Feb 2022 03:39:40 +0000 (19:39 -0800)
committerScott Gasch <[email protected]>
Fri, 4 Feb 2022 03:39:40 +0000 (19:39 -0800)
inject the index file name to the c'tor to override the flag.

unscrambler.py

index 78c1f9b4f7e7c1a5ef618b54eeed2eb012db7a4d..9df82f61a516b78541feddf864ca49f9ce31668b 100644 (file)
@@ -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: