summaryrefslogtreecommitdiff
path: root/unscrambler.py
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2022-02-03 19:39:40 -0800
committerScott Gasch <[email protected]>2022-02-03 19:39:40 -0800
commit90dc74b2ff8f36dd2495632a8150ce37dab61f1c (patch)
tree1a2844dd09cb38d1209c7d3942543dc5758ebc29 /unscrambler.py
parent76bc42a750b1c4d0ce81179337e47dc08db7b386 (diff)
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.
Diffstat (limited to 'unscrambler.py')
-rw-r--r--unscrambler.py33
1 files 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: