Skip to content

Commit

Permalink
Merge pull request #243 from bogdal/python3
Browse files Browse the repository at this point in the history
Add compatibility with python3 and use uuid4
  • Loading branch information
patrys committed Feb 25, 2015
2 parents 78a2e18 + 7c8e1fc commit 32d85df
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 33 deletions.
2 changes: 1 addition & 1 deletion saleor/cart/forms.py
Expand Up @@ -120,7 +120,7 @@ class ReplaceCartLineFormSet(BaseFormSet):
form = ReplaceCartLineForm
max_num = DEFAULT_MAX_NUM
validate_max = False
min_num = None
min_num = 0
validate_min = False

def __init__(self, *args, **kwargs):
Expand Down
3 changes: 3 additions & 0 deletions saleor/core/__init__.py
@@ -0,0 +1,3 @@

TOKEN_PATTERN = ('(?P<token>[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}'
'-[0-9a-z]{12})')
9 changes: 2 additions & 7 deletions saleor/order/models.py
Expand Up @@ -57,19 +57,14 @@ class Order(models.Model, ItemSet):
anonymous_user_email = models.EmailField(blank=True, default='',
editable=False)
token = models.CharField(
pgettext_lazy('Order field', 'token'),
max_length=36, blank=True, default='')
pgettext_lazy('Order field', 'token'), max_length=36, unique=True)

class Meta:
ordering = ('-last_status_change',)

def save(self, *args, **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
self.token = str(uuid4())
return super(Order, self).save(*args, **kwargs)

def change_status(self, status):
Expand Down
10 changes: 4 additions & 6 deletions saleor/order/urls.py
@@ -1,15 +1,13 @@
from django.conf.urls import patterns, url

from ..core import TOKEN_PATTERN
from . import views


TOKEN_PATTERN = ('(?P<token>[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}'
'-[0-9a-z]{12})')

urlpatterns = patterns(
'',
url(r'^%s/$' % TOKEN_PATTERN, views.details, name='details'),
url(r'^%s/payment/(?P<variant>[-\w]+)/$' % TOKEN_PATTERN,
url(r'^%s/$' % (TOKEN_PATTERN,), views.details, name='details'),
url(r'^%s/payment/(?P<variant>[-\w]+)/$' % (TOKEN_PATTERN,),
views.start_payment, name='payment'),
url(r'^%s/cancel-payment/$' % TOKEN_PATTERN, views.cancel_payment,
url(r'^%s/cancel-payment/$' % (TOKEN_PATTERN,), views.cancel_payment,
name='cancel-payment'))
26 changes: 9 additions & 17 deletions saleor/registration/models.py
@@ -1,12 +1,12 @@
from __future__ import unicode_literals
from datetime import timedelta
from uuid import uuid4

from django.db import models
from django.contrib.auth import authenticate, get_user_model
from django.conf import settings
from django.core.urlresolvers import reverse
from django.utils import timezone
from django.utils.crypto import get_random_string

now = timezone.now

Expand All @@ -23,33 +23,25 @@ class Meta:

class UniqueTokenManager(models.Manager): # this might end up in `utils`

def __init__(self, token_field, token_length):
def __init__(self, token_field):
self.token_field = token_field
self.token_length = token_length
super(UniqueTokenManager, self).__init__()

def create(self, **kwargs):
assert self.token_field not in kwargs, 'Token field already filled.'
for _x in xrange(100):
token = get_random_string(self.token_length)
conflict_filter = {self.token_field: token}
conflict = self.get_query_set().filter(**conflict_filter)
if not conflict.exists():
kwargs[self.token_field] = token
return super(UniqueTokenManager, self).create(**kwargs)
raise RuntimeError('Could not create unique token.')
kwargs[self.token_field] = str(uuid4())
return super(UniqueTokenManager, self).create(**kwargs)


class AbstractToken(models.Model):

TOKEN_LENGTH = 32
def default_valid_date():
return now() + timedelta(settings.ACCOUNT_ACTIVATION_DAYS)

token = models.CharField(max_length=TOKEN_LENGTH, unique=True)
valid_until = models.DateTimeField(
default=lambda: now() + timedelta(settings.ACCOUNT_ACTIVATION_DAYS))
token = models.CharField(max_length=36, unique=True)
valid_until = models.DateTimeField(default=default_valid_date)

objects = UniqueTokenManager(token_field='token',
token_length=TOKEN_LENGTH)
objects = UniqueTokenManager(token_field='token')

class Meta:
abstract = True
Expand Down
5 changes: 3 additions & 2 deletions saleor/registration/urls.py
@@ -1,5 +1,6 @@
from django.conf.urls import patterns, url

from ..core import TOKEN_PATTERN
from . import views


Expand All @@ -13,9 +14,9 @@
name='change_password'),
url(r'^request_email_confirmation/$', views.request_email_confirmation,
name='request_email_confirmation'),
url(r'^confirm_email/(?P<token>\w+)/$', views.confirm_email,
url(r'^confirm_email/%s/$' % (TOKEN_PATTERN,), views.confirm_email,
name='confirm_email'),
url(r'^request_email_change/$', views.request_email_change,
name='request_email_change'),
url(r'^change_email/(?P<token>\w+)/$', views.change_email,
url(r'^change_email/%s/$' % (TOKEN_PATTERN,), views.change_email,
name='change_email'))

0 comments on commit 32d85df

Please sign in to comment.