Fix fingerprint with mixed int and str keys

Create a fallback hash function to handle mixed key types in dictionaries
and lists, ensuring consistent hashing across different data structures.

Fallback called is prefixed with "HO_" to indicate its usage.
This commit is contained in:
Clemens Schwaighofer
2026-01-27 15:56:17 +09:00
parent fe913608c4
commit 82a759dd21
4 changed files with 269 additions and 13 deletions

View File

@@ -5,6 +5,7 @@ test list helpers
from typing import Any
from corelibs.debug_handling.dump_data import dump_data
from corelibs.iterator_handling.list_helpers import is_list_in_list, convert_to_list, make_unique_list_of_dicts
from corelibs.iterator_handling.fingerprint import dict_hash_crc
def __test_is_list_in_list_a():
@@ -29,7 +30,8 @@ def __make_unique_list_of_dicts():
{"a": 3, "b": 4, "nested": {"x": 30, "y": 40}}
]
unique_dicts = make_unique_list_of_dicts(dict_list)
print(f"Unique dicts: {dump_data(unique_dicts)}")
dhf = dict_hash_crc(unique_dicts)
print(f"Unique dicts: {dump_data(unique_dicts)} [{dhf}]")
dict_list = [
{"a": 1, 1: "one"},
@@ -37,7 +39,8 @@ def __make_unique_list_of_dicts():
{"a": 2, 1: "one"}
]
unique_dicts = make_unique_list_of_dicts(dict_list)
print(f"Unique dicts: {dump_data(unique_dicts)}")
dhf = dict_hash_crc(unique_dicts)
print(f"Unique dicts: {dump_data(unique_dicts)} [{dhf}]")
dict_list = [
{"a": 1, "b": [1, 2, 3]},
@@ -46,7 +49,8 @@ def __make_unique_list_of_dicts():
1, 2, "String", 1, "Foobar"
]
unique_dicts = make_unique_list_of_dicts(dict_list)
print(f"Unique dicts: {dump_data(unique_dicts)}")
dhf = dict_hash_crc(unique_dicts)
print(f"Unique dicts: {dump_data(unique_dicts)} [{dhf}]")
dict_list: list[Any] = [
[],
@@ -59,7 +63,17 @@ def __make_unique_list_of_dicts():
{"a": {}},
]
unique_dicts = make_unique_list_of_dicts(dict_list)
print(f"Unique dicts: {dump_data(unique_dicts)}")
dhf = dict_hash_crc(unique_dicts)
print(f"Unique dicts: {dump_data(unique_dicts)} [{dhf}]")
dict_list: list[Any] = [
(1, 2),
(1, 2),
(2, 3),
]
unique_dicts = make_unique_list_of_dicts(dict_list)
dhf = dict_hash_crc(unique_dicts)
print(f"Unique dicts: {dump_data(unique_dicts)} [{dhf}]")
def main():