annotate bitsyauth/dictionary.py @ 41:d4522af2c6e5

refactor
author Jeff Hammel <jhammel@mozilla.com>
date Sat, 28 Dec 2013 12:56:06 -0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
41
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
1 import random
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
2
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
3 class Dictionary(object):
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
4 def __init__(self, dictionary_file='/usr/share/dict/american-english'):
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
5 self.dictionary_file = dictionary_file
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
6 with open(dictionary_file) as f:
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
7 self.wordlist = []
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
8 for line in f:
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
9 line = line.strip()
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
10 if not line or not line.isalpha():
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
11 continue
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
12 line = line.lower()
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
13 self.wordlist.append(line)
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
14 self.wordlist = tuple(self.wordlist)
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
15 self._min_lengths = {}
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
16
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
17 def random_word(self, min_length=5):
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
18 """
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
19 choose random word
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
20
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
21 min_length -- minimum word length
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
22 """
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
23
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
24 if min_length not in self._min_lengths:
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
25 # cache
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
26 self._min_lengths[min_lengths] = [i for i in self.wordlist
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
27 if len(i) > min_length]
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
28 return random.Random().choice(self._min_lengths[min_length])
d4522af2c6e5 refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
29