summaryrefslogtreecommitdiff
path: root/payments
diff options
context:
space:
mode:
authorMario César <mariocesar.c50@gmail.com>2016-03-07 04:49:00 -0400
committerMario César <mariocesar.c50@gmail.com>2016-03-07 04:49:00 -0400
commitdad351666a61bdb94fe4d6b610d08f579ec0d3c6 (patch)
treefd81e656a1813e7e9aeb5d4bb504be8e6fa696fe /payments
parent915f278f827a7527bec89a26d13b4645ff4d261e (diff)
downloaddjango-payments-taler-dad351666a61bdb94fe4d6b610d08f579ec0d3c6.tar.gz
django-payments-taler-dad351666a61bdb94fe4d6b610d08f579ec0d3c6.tar.bz2
django-payments-taler-dad351666a61bdb94fe4d6b610d08f579ec0d3c6.zip
Use default manager instead of a harcoded `objects` reference to updates the payment token, and a more pythonic retrie for tokens
Diffstat (limited to 'payments')
-rw-r--r--payments/models.py20
1 files changed, 13 insertions, 7 deletions
diff --git a/payments/models.py b/payments/models.py
index 4d9e95a..5b68289 100644
--- a/payments/models.py
+++ b/payments/models.py
@@ -115,14 +115,20 @@ class BasePayment(models.Model):
if commit:
self.save()
- def save(self, *args, **kwargs):
+ def save(self, **kwargs):
if not self.token:
- for _i in range(100):
- token = str(uuid4())
- if not type(self).objects.filter(token=token).exists():
- self.token = token
- break
- return super(BasePayment, self).save(*args, **kwargs)
+ tries = {} # Stores a set of tried values
+ while True:
+ token = uuid4().hex
+ if token in tries and len(tries) >= 100: # After 100 tries we are impliying an infinite loop
+ raise SystemExit('A possible infinite loop was detected')
+ else:
+ if not self._default_manager.filter(token=token).exists():
+ self.token = token
+ break
+ tries.add(token)
+
+ return super(BasePayment, self).save(**kwargs)
def __unicode__(self):
return self.variant