diff options
Diffstat (limited to 'venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/_trie/_base.py')
-rw-r--r-- | venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/_trie/_base.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/_trie/_base.py b/venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/_trie/_base.py new file mode 100644 index 0000000..ecfff32 --- /dev/null +++ b/venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/_trie/_base.py | |||
@@ -0,0 +1,37 @@ | |||
1 | from __future__ import absolute_import, division, unicode_literals | ||
2 | |||
3 | from collections import Mapping | ||
4 | |||
5 | |||
6 | class Trie(Mapping): | ||
7 | """Abstract base class for tries""" | ||
8 | |||
9 | def keys(self, prefix=None): | ||
10 | # pylint:disable=arguments-differ | ||
11 | keys = super(Trie, self).keys() | ||
12 | |||
13 | if prefix is None: | ||
14 | return set(keys) | ||
15 | |||
16 | return {x for x in keys if x.startswith(prefix)} | ||
17 | |||
18 | def has_keys_with_prefix(self, prefix): | ||
19 | for key in self.keys(): | ||
20 | if key.startswith(prefix): | ||
21 | return True | ||
22 | |||
23 | return False | ||
24 | |||
25 | def longest_prefix(self, prefix): | ||
26 | if prefix in self: | ||
27 | return prefix | ||
28 | |||
29 | for i in range(1, len(prefix) + 1): | ||
30 | if prefix[:-i] in self: | ||
31 | return prefix[:-i] | ||
32 | |||
33 | raise KeyError(prefix) | ||
34 | |||
35 | def longest_prefix_item(self, prefix): | ||
36 | lprefix = self.longest_prefix(prefix) | ||
37 | return (lprefix, self[lprefix]) | ||