web: fix cache invalidation for API

master
Kasownik 2017-03-10 13:26:16 +01:00
parent 74b72691e4
commit f212be7223
2 changed files with 11 additions and 8 deletions

View File

@ -61,6 +61,8 @@ class MemberTransfer(db.Model):
self.year = year
self.month = month
self.transfer = transfer
mc.delete('kasownik-stats_for_month-{}-{}'.format(year, month))
mc.delete('kasownik-cashflow-{}-{}'.format(year, month))
class PaymentStatus(enum.Enum):
@ -250,19 +252,16 @@ class Member(db.Model):
else:
return '{}@hackerspace.pl'.format(self.username)
def invalidate_cache(self):
cache_key = 'kasownik-payment_status-{}'.format(self.username)
mc.delete(cache_key)
def get_status(self):
def get_status(self, force_refresh = False):
"""It's better to call this after doing a full select of data."""
cache_key = 'kasownik-payment_status-{}'.format(self.username)
cache_data = mc.get(cache_key)
if cache_data and cache_enabled:
if cache_data and cache_enabled and not force_refresh:
data = json.loads(cache_data)
return data
else:
cache_data = self._get_status_uncached()
mc.delete('kasownik-months_due-{}'.format(self.username))
mc.set(cache_key, json.dumps(cache_data))
return cache_data

View File

@ -221,6 +221,7 @@ def admin_match_auto():
matched = 0
left = 0
transfers_unmatched = logic.get_unmatched_transfers()
affected_members = []
for transfer in transfers_unmatched:
matchability, member, months = transfer.get_matchability()
if matchability == models.Transfer.MATCH_OK:
@ -232,13 +233,15 @@ def admin_match_auto():
mt = models.MemberTransfer(None, year, month, transfer)
member.transfers.append(mt)
db.session.add(mt)
flash("Matched transfer {} to member {} for month {}-{}".format(transfer.id, member.username, year, month))
flash("Matched transfer {} for {:.2f}PLN to member {} for month {}-{}".format(transfer.id, transfer.amount/100, member.username, year, month))
year, month = member._yearmonth_increment((year,month))
matched += 1
member.invalidate_cache()
affected_members.append(member)
else:
left += 1
db.session.commit()
for member in affected_members:
member.get_status(force_refresh=True)
flash("Matched %i, %i left" % (matched, left))
return redirect(url_for("admin_fetch"))
@ -267,6 +270,7 @@ def match(username, uid, months):
db.session.add(mt)
db.session.commit()
member.get_status(force_refresh=True)
return "ok, %i PLN get!" % transfer.amount