Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/bleach/_vendor/html5lib/_trie/_base.py: 31%

26 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-07-01 06:54 +0000

1from __future__ import absolute_import, division, unicode_literals 

2 

3try: 

4 from collections.abc import Mapping 

5except ImportError: # Python 2.7 

6 from collections import Mapping 

7 

8 

9class Trie(Mapping): 

10 """Abstract base class for tries""" 

11 

12 def keys(self, prefix=None): 

13 # pylint:disable=arguments-differ 

14 keys = super(Trie, self).keys() 

15 

16 if prefix is None: 

17 return set(keys) 

18 

19 return {x for x in keys if x.startswith(prefix)} 

20 

21 def has_keys_with_prefix(self, prefix): 

22 for key in self.keys(): 

23 if key.startswith(prefix): 

24 return True 

25 

26 return False 

27 

28 def longest_prefix(self, prefix): 

29 if prefix in self: 

30 return prefix 

31 

32 for i in range(1, len(prefix) + 1): 

33 if prefix[:-i] in self: 

34 return prefix[:-i] 

35 

36 raise KeyError(prefix) 

37 

38 def longest_prefix_item(self, prefix): 

39 lprefix = self.longest_prefix(prefix) 

40 return (lprefix, self[lprefix])