Skip to content

Commit 8f290f4

Browse files
authored
fix(skore-local-project): Go through storage in insertion order (#2011)
Rather than in alphabetical key order. > Caches may be iterated by either insertion order or sorted order. The default ordering uses insertion order. To iterate by sorted order, use iterkeys. The sort order is determined by the database which makes it valid only for str, bytes, int, and float data types. Other types of keys will be serialized which is likely to have a meaningless sorted order. > > ```python > >>> for key in 'cab': > ... cache[key] = None > >>> list(cache) > ['c', 'a', 'b'] > >>> list(cache.iterkeys()) > ['a', 'b', 'c'] > >>> cache.peekitem() > ('b', None) > >>> cache.peekitem(last=False) > ('c', None) > ``` https://grantjenks.com/docs/diskcache/tutorial.html
1 parent c9d4677 commit 8f290f4

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

skore-local-project/src/skore_local_project/storage.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def __len__(self) -> int:
7575

7676
def __iter__(self) -> Iterator[str]:
7777
"""
78-
Yield the keys in the storage.
78+
Yield the keys in the storage in insertion order.
7979
8080
Returns
8181
-------
@@ -139,40 +139,40 @@ def __delitem__(self, key: str):
139139

140140
def keys(self) -> Iterator[str]:
141141
"""
142-
Get an iterator over the keys in the storage.
142+
Get an iterator over the keys in the storage in insertion order.
143143
144144
Returns
145145
-------
146146
Iterator[str]
147147
An iterator yielding all keys in the storage.
148148
"""
149149
with Cache(self.directory) as storage:
150-
return storage.iterkeys()
150+
yield from storage
151151

152152
def values(self) -> Iterator[Any]:
153153
"""
154-
Get an iterator over the values in the storage.
154+
Get an iterator over the values in the storage in insertion order.
155155
156156
Returns
157157
-------
158158
Iterator[Any]
159159
An iterator yielding all values in the storage.
160160
"""
161161
with Cache(self.directory) as storage:
162-
for key in storage.iterkeys():
162+
for key in storage:
163163
yield storage[key]
164164

165165
def items(self) -> Iterator[tuple[str, Any]]:
166166
"""
167-
Get an iterator over the (key, value) pairs in the storage.
167+
Get an iterator over the (key, value) pairs in the storage in insertion order.
168168
169169
Returns
170170
-------
171171
Iterator[tuple[str, Any]]
172172
An iterator yielding all (key, value) pairs in the storage.
173173
"""
174174
with Cache(self.directory) as storage:
175-
for key in storage.iterkeys():
175+
for key in storage:
176176
yield (key, storage[key])
177177

178178
def __repr__(self) -> str:

skore-local-project/tests/unit/test_storage.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,16 @@ def test_delitem(self, storage):
5656
assert len(storage) == 0
5757

5858
def test_keys(self, storage):
59-
storage["<key1>"] = "<value1>"
6059
storage["<key2>"] = "<value2>"
60+
storage["<key1>"] = "<value1>"
6161

62-
assert list(storage.keys()) == ["<key1>", "<key2>"]
62+
assert list(storage.keys()) == ["<key2>", "<key1>"]
6363

6464
def test_values(self, storage):
65-
storage["<key1>"] = "<value1>"
6665
storage["<key2>"] = "<value2>"
66+
storage["<key1>"] = "<value1>"
6767

68-
assert list(storage.values()) == ["<value1>", "<value2>"]
68+
assert list(storage.values()) == ["<value2>", "<value1>"]
6969

7070
def test_items(self, storage):
7171
storage["<key1>"] = "<value1>"

0 commit comments

Comments
 (0)