summaryrefslogtreecommitdiff
path: root/venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/_trie/_base.py
diff options
context:
space:
mode:
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.py37
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 @@
1from __future__ import absolute_import, division, unicode_literals
2
3from collections import Mapping
4
5
6class 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])