Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add compatibility with python3 and use uuid4 #243

Merged
merged 3 commits into from Feb 25, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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'))