Skip to content

Commit

Permalink
started refactoring to create base classes in models.py
Browse files Browse the repository at this point in the history
  • Loading branch information
dgreisen authored and unknown committed Dec 1, 2010
1 parent f7e732c commit 831d6bf
Showing 1 changed file with 30 additions and 17 deletions.
47 changes: 30 additions & 17 deletions emailconfirmation/models.py
Expand Up @@ -16,16 +16,17 @@

# this code based in-part on django-registration

class EmailAddressManager(models.Manager):

def add_email(self, user, email):
class EmailManager(models.Manager):
def add_object(self, *args, **kwargs):
try:
email_address = self.create(user=user, email=email)
EmailConfirmation.objects.send_confirmation(email_address)
return email_address
obj = self.create(*args, **kwargs)
EmailConfirmation.objects.send_confirmation(obj)
return obj
except IntegrityError:
return None


class EmailAddressManager(EmailManager):
def get_primary(self, user):
try:
return self.get(user=user, primary=True)
Expand All @@ -41,14 +42,15 @@ def get_users_for(self, email):
return [address.user for address in EmailAddress.objects.filter(
verified=True, email=email)]

class EmailAddress(models.Model):

user = models.ForeignKey(User)
email = models.EmailField()
class EmailAddressBase(models.Model):
verified = models.BooleanField(default=False)
email = models.EmailField()
objects = EmailAddressManager()

class EmailAddress(EmailAddressBase):
user = models.ForeignKey(User)
primary = models.BooleanField(default=False)

objects = EmailAddressManager()

def set_as_primary(self, conditional=False):
old_primary = EmailAddress.objects.get_primary(self.user)
Expand Down Expand Up @@ -76,7 +78,7 @@ class Meta:

class EmailConfirmationManager(models.Manager):

def confirm_email(self, confirmation_key):
def confirm(self, confirmation_key):
try:
confirmation = self.get(confirmation_key=confirmation_key)
except self.model.DoesNotExist:
Expand Down Expand Up @@ -108,11 +110,18 @@ def send_confirmation(self, email_address):
path
)
context = {
"user": email_address.user,
# "user": email_address.user,
"activate_url": activate_url,
"current_site": current_site,
"confirmation_key": confirmation_key,
}

# add all fields from email_address to context
fields = [x.name for x in email_address._meta.fields]
fields.remove('verified')
for field in fields:
context[field] = getattr(email_address, field)

subject = render_to_string(
"emailconfirmation/email_confirmation_subject.txt", context)
# remove superfluous line breaks
Expand All @@ -131,22 +140,26 @@ def delete_expired_confirmations(self):
confirmation.delete()

class EmailConfirmation(models.Model):

email_address = models.ForeignKey(EmailAddress)
sent = models.DateTimeField()
confirmation_key = models.CharField(max_length=40)

email_address = models.ForeignKey(EmailAddress)

objects = EmailConfirmationManager()

def key_expired(self):
expiration_date = self.sent + timedelta(
days=settings.EMAIL_CONFIRMATION_DAYS)
days=settings.CONFIRMATION_EXPIRE_AFTER_DAYS)
return expiration_date <= datetime.now()
key_expired.boolean = True


def __unicode__(self):
return u"confirmation for %s" % self.email_address

class Meta:
verbose_name = _("e-mail confirmation")
verbose_name_plural = _("e-mail confirmations")




0 comments on commit 831d6bf

Please sign in to comment.