Skip to content
Snippets Groups Projects
Commit 4a1c5f2c authored by inso's avatar inso
Browse files

Fixed bugs in person caching

- Error when an exception was raised
- Interblocking because of missing finally clause
parent e49c2887
No related branches found
No related tags found
No related merge requests found
......@@ -11,7 +11,7 @@ from ucoinpy.api import bma
from ucoinpy import PROTOCOL_VERSION
from ucoinpy.documents.certification import SelfCertification
from ucoinpy.documents.membership import Membership
from cutecoin.tools.exceptions import PersonNotFoundError,\
from ..tools.exceptions import Error, PersonNotFoundError,\
MembershipNotFoundError
from PyQt5.QtCore import QMutex
......@@ -51,6 +51,8 @@ class cached(object):
except KeyError:
value = self.func(inst, community)
inst._cache[community.currency][self.func.__name__] = value
finally:
inst._cache_mutex.unlock()
inst._cache_mutex.unlock()
return value
......@@ -341,29 +343,33 @@ class Person(object):
:return: True if a changed was made by the reload.
'''
self._cache_mutex.lock()
if community.currency not in self._cache:
self._cache[community.currency] = {}
change = False
try:
if community.currency not in self._cache:
self._cache[community.currency] = {}
change = False
before = self._cache[community.currency][func.__name__]
except KeyError:
change = True
value = func(self, community)
value = func(self, community)
if not change:
if type(value) is dict:
hash_before = (hash(tuple(frozenset(sorted(before.keys())))),
hash(tuple(frozenset(sorted(before.items())))))
hash_after = (hash(tuple(frozenset(sorted(value.keys())))),
hash(tuple(frozenset(sorted(value.items())))))
change = hash_before != hash_after
elif type(value) is bool:
change = before != value
if not change:
if type(value) is dict:
hash_before = (hash(tuple(frozenset(sorted(before.keys())))),
hash(tuple(frozenset(sorted(before.items())))))
hash_after = (hash(tuple(frozenset(sorted(value.keys())))),
hash(tuple(frozenset(sorted(value.items())))))
change = hash_before != hash_after
elif type(value) is bool:
change = before != value
self._cache[community.currency][func.__name__] = value
self._cache_mutex.unlock()
self._cache[community.currency][func.__name__] = value
except KeyError:
change = True
except Error:
return False
finally:
self._cache_mutex.unlock()
return change
def jsonify(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment