From e2bd385b2d43157eba6de8696ea02ad1e92a219d Mon Sep 17 00:00:00 2001 From: cevans87 Date: Wed, 11 Dec 2019 21:22:23 -0800 Subject: [PATCH] Fixes memoize with db hash key inconsistencies --- atools/_memoize_decorator.py | 9 +++++---- setup.py | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/atools/_memoize_decorator.py b/atools/_memoize_decorator.py index 6e11f1c..0af482c 100644 --- a/atools/_memoize_decorator.py +++ b/atools/_memoize_decorator.py @@ -3,6 +3,7 @@ from dataclasses import dataclass, field from datetime import timedelta from functools import partial, wraps +from hashlib import sha256 import inspect from pathlib import Path from sqlite3 import connect, Connection @@ -65,7 +66,7 @@ def __post_init__(self) -> None: if self.db is not None: self.db.execute(dedent(f''' CREATE TABLE IF NOT EXISTS `{self.table_name}` ( - k integer PRIMARY KEY, + k TEXT PRIMARY KEY, t FLOAT, e FLOAT, v TEXT NOT NULL @@ -152,7 +153,7 @@ def expire_one_memo(self) -> None: elif self.size is not None and self.size < len(self.memos): (k, _) = self.memos.popitem(last=False) if (self.db is not None) and (k is not None): - self.db.execute(f"DELETE FROM `{self.table_name}` WHERE k = {k}") + self.db.execute(f"DELETE FROM `{self.table_name}` WHERE k = '{k}'") self.db.commit() def finalize_memo(self, memo: _Memo, key: int) -> Any: @@ -206,7 +207,7 @@ async def decorator(*args, **kwargs) -> Any: key[i] = await v key = tuple(key) - key = hash(key) + key = sha256(str(key).encode()).hexdigest() memo: _AsyncMemo = self.get_memo(key) @@ -244,7 +245,7 @@ def decorator(*args, **kwargs): else: key = self.get_key(*args, **kwargs) - key = hash(key) + key = sha256(str(key).encode()).hexdigest() with self._sync_lock: memo: _SyncMemo = self.get_memo(key) diff --git a/setup.py b/setup.py index 3f767b9..e34ee02 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name='atools', - version='0.9.1', + version='0.9.2', packages=find_packages(), python_requires='>=3.6', url='https://github.com/cevans87/atools',