Compare commits

...

3 Commits

Author SHA1 Message Date
f914759b71 Fix @retry 2021-01-10 22:46:20 -05:00
58d150279f Handle bool values in state 2021-01-10 21:26:34 -05:00
b2efaa99a4 Handle null values in state 2021-01-10 20:56:46 -05:00
5 changed files with 70 additions and 8 deletions

View File

@ -160,6 +160,10 @@ def _sqlite_type(value):
def _serialize(value):
if isinstance(value, bytes):
return base64.b64encode(value)
if value is None:
return None
if isinstance(value, bool):
return value
return str(value)

View File

@ -11,13 +11,16 @@ last_time_called = dict()
def retry(attempts, callback=None):
def decorate(func):
retries = attempts
while retries > 0:
try:
func()
except Exception as e:
if callback:
callback(e)
def wrapper(*args, **kwargs):
retries = attempts
while retries > 0:
try:
return func(*args, **kwargs)
except Exception as e:
if callback:
callback(e)
retries -= 1
return wrapper
return decorate

View File

@ -2,7 +2,7 @@ from setuptools import setup
setup(
name="hexlib",
version="1.20",
version="1.23",
description="Misc utility methods",
author="simon987",
author_email="me@simon987.net",

View File

@ -47,3 +47,31 @@ class TestPersistentState(TestCase):
val["id"] = 1
self.assertDictEqual(val, s["a"][1])
def test_none(self):
s = PersistentState()
val = {"a": 1, "b": None}
s["a"][1] = val
s["a"][1] = {
"a": None
}
val["a"] = None
val["id"] = 1
self.assertDictEqual(val, s["a"][1])
def test_bool(self):
s = PersistentState()
val = {"a": True, "b": False}
s["a"][1] = val
s["a"][1] = {
"a": True
}
val["a"] = True
val["id"] = 1
self.assertDictEqual(val, s["a"][1])

27
test/test_retry.py Normal file
View File

@ -0,0 +1,27 @@
from unittest import TestCase
from hexlib.db import VolatileState, VolatileBooleanState
from hexlib.misc import retry
class TestRetry(TestCase):
def test_simple(self):
@retry(attempts=3)
def a(i):
return i + 1
self.assertEqual(a(1), 2)
def test_error(self):
arr = []
def cb(e):
arr.append(e)
@retry(attempts=3, callback=cb)
def a(i):
raise Exception("err")
a(1)
self.assertEqual(3, len(arr))