Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/openpyxl/utils/indexed_list.py: 20%
33 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1# Copyright (c) 2010-2022 openpyxl
4class IndexedList(list):
5 """
6 List with optimised access by value
7 Based on Alex Martelli's recipe
9 http://code.activestate.com/recipes/52303-the-auxiliary-dictionary-idiom-for-sequences-with-/
10 """
12 _dict = {}
14 def __init__(self, iterable=None):
15 self.clean = True
16 self._dict = {}
17 if iterable is not None:
18 self.clean = False
19 for idx, val in enumerate(iterable):
20 self._dict[val] = idx
21 list.append(self, val)
23 def _rebuild_dict(self):
24 self._dict = {}
25 idx = 0
26 for value in self:
27 if value not in self._dict:
28 self._dict[value] = idx
29 idx += 1
30 self.clean = True
32 def __contains__(self, value):
33 if not self.clean:
34 self._rebuild_dict()
35 return value in self._dict
37 def index(self, value):
38 if value in self:
39 return self._dict[value]
40 raise ValueError
42 def append(self, value):
43 if value not in self._dict:
44 self._dict[value] = len(self)
45 list.append(self, value)
47 def add(self, value):
48 self.append(value)
49 return self._dict[value]