Skip to content

Commit

Permalink
Cleaned up pinax.apps.signup_codes
Browse files Browse the repository at this point in the history
check_signup_code has been moved to SignupCode.check
  • Loading branch information
brosner committed Sep 11, 2011
1 parent dee12b8 commit 26c84f0
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 47 deletions.
2 changes: 0 additions & 2 deletions pinax/apps/signup_codes/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@
from pinax.apps.signup_codes.models import SignupCode



class SignupCodeAdmin(admin.ModelAdmin):
list_display = ["code", "max_uses", "use_count", "expiry", "created"]
search_fields = ["code", "email"]
list_filter = ["created"]



admin.site.register(SignupCode, SignupCodeAdmin)
4 changes: 2 additions & 2 deletions pinax/apps/signup_codes/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from django.conf import settings

from pinax.apps.account.forms import GroupForm, SignupForm as BaseSignupForm
from pinax.apps.signup_codes.models import SignupCode, check_signup_code
from pinax.apps.signup_codes.models import SignupCode


class SignupForm(BaseSignupForm):
Expand All @@ -11,7 +11,7 @@ class SignupForm(BaseSignupForm):

def clean_signup_code(self):
code = self.cleaned_data.get("signup_code")
signup_code = check_signup_code(code)
signup_code = SignupCode.check(code)
if signup_code:
return signup_code
else:
Expand Down
48 changes: 23 additions & 25 deletions pinax/apps/signup_codes/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from django.core.mail import send_mail
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.template.loader import render_to_string
from django.utils.hashcompat import sha_constructor

Expand All @@ -14,8 +15,7 @@


class SignupCode(models.Model):
"""
"""

code = models.CharField(max_length=40)
max_uses = models.PositiveIntegerField(default=0)
expiry = models.DateTimeField(null=True, blank=True)
Expand Down Expand Up @@ -44,6 +44,25 @@ def create(cls, email, expiry, group=None):
code = sha_constructor("".join(bits)).hexdigest()
return cls(code=code, email=email, max_uses=1, expiry=expiry)

@classmethod
def check(cls, code):
if code:
try:
signup_code = cls._default_manager.get(code=code)
except cls.DoesNotExist:
return False
else:
# check max uses
if signup_code.max_uses and signup_code.max_uses < signup_code.use_count + 1:
return False
else:
if signup_code.expiry and datetime.datetime.now() > signup_code.expiry:
return False
else:
return signup_code
else:
return False

def calculate_use_count(self):
self.use_count = self.signupcoderesult_set.count()
self.save()
Expand Down Expand Up @@ -74,35 +93,14 @@ def send(self, group=None):


class SignupCodeResult(models.Model):
"""
"""

signup_code = models.ForeignKey(SignupCode)
user = models.ForeignKey(User)
timestamp = models.DateTimeField(default=datetime.datetime.now)


@receiver(post_save, sender=SignupCodeResult)
def signup_code_result_save(sender, instance=None, created=False, **kwargs):
if instance:
signup_code = instance.signup_code
signup_code.calculate_use_count()

post_save.connect(signup_code_result_save, sender=SignupCodeResult)


def check_signup_code(code):
if code:
try:
signup_code = SignupCode.objects.get(code=code)
except SignupCode.DoesNotExist:
return False
else:
# check max uses
if signup_code.max_uses and signup_code.max_uses < signup_code.use_count + 1:
return False
else:
if signup_code.expiry and datetime.datetime.now() > signup_code.expiry:
return False
else:
return signup_code
else:
return False
2 changes: 1 addition & 1 deletion pinax/apps/signup_codes/signals.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import django.dispatch


signup_code_used = django.dispatch.Signal(providing_args=["signup_code_result",])
signup_code_used = django.dispatch.Signal(providing_args=["signup_code_result"])
7 changes: 2 additions & 5 deletions pinax/apps/signup_codes/tests/test_invite_user.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import datetime
import os

from datetime import datetime, timedelta

from django.conf import settings
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
Expand All @@ -13,8 +12,6 @@
from signup_codes.models import SignupCode




class InviteUserTest(TestCase):

urls = "signup_codes.tests.signup_codes_urls"
Expand Down Expand Up @@ -85,7 +82,7 @@ def test_accept_invite(self):
#print help(self)
# Create an invitation
email = "joe@example.com"
expiry = datetime.now() + timedelta(hours=1)
expiry = datetime.datetime.now() + datetime.timedelta(hours=1)
code = sha_constructor("%s%s%s%s" % (
settings.SECRET_KEY,
email,
Expand Down
7 changes: 0 additions & 7 deletions pinax/apps/signup_codes/urls.py

This file was deleted.

8 changes: 3 additions & 5 deletions pinax/apps/signup_codes/views.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
from django.conf import settings
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect, Http404
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.utils.translation import ugettext
from django.core.exceptions import ObjectDoesNotExist

from django.contrib import messages
from django.contrib.admin.views.decorators import staff_member_required

from pinax.apps.account.utils import get_default_redirect, user_display
from pinax.apps.signup_codes.models import check_signup_code
from pinax.apps.signup_codes.models import SignupCode
from pinax.apps.signup_codes.forms import SignupForm, InviteUserForm



def group_and_bridge(request):
"""
Given the request we can depend on the GroupMiddleware to provide the
Expand Down Expand Up @@ -80,7 +78,7 @@ def signup(request, **kwargs):
)
return HttpResponseRedirect(success_url)
else:
signup_code = check_signup_code(code)
signup_code = SignupCode.check(code)
if signup_code:
initial = {
"signup_code": code,
Expand Down

0 comments on commit 26c84f0

Please sign in to comment.