annotate gpp/core/functions.py @ 318:c550933ff5b6

Fix a bug where you'd get an error when trying to delete a forum thread (topic does not exist). Apparently when you call topic.delete() the posts would get deleted, but the signal handler for each one would run, and it would try to update the topic's post count or something, but the topic was gone? Reworked the code a bit and explicitly delete the posts first. I also added a sync() call on the parent forum since post counts were not getting adjusted.
author Brian Neal <bgneal@gmail.com>
date Sat, 05 Feb 2011 21:46:52 +0000
parents 767cedc7d12a
children 20af29454e83
rev   line source
gremmie@1 1 """This file houses various core utility functions for GPP"""
bgneal@176 2 import datetime
bgneal@227 3 import re
bgneal@316 4 import logging
gremmie@1 5
gremmie@1 6 import django.core.mail
gremmie@1 7 from django.contrib.sites.models import Site
gremmie@1 8 from django.conf import settings
gremmie@1 9
bgneal@181 10 import mailer
bgneal@181 11
gremmie@1 12
bgneal@252 13 def send_mail(subject, message, from_email, recipient_list,
bgneal@252 14 fail_silently=False, auth_user=None, auth_password=None,
bgneal@252 15 expedite=False):
gremmie@1 16 """The main gpp send email function.
gremmie@1 17 Use this function to send email from the site. It will obey debug settings and
bgneal@252 18 log all emails. The expedite flag, when True, will bypass the mail queue.
gremmie@1 19 """
gremmie@1 20
bgneal@252 21 if settings.MAILER_ENQUEUE_MAIL and not expedite:
bgneal@180 22 mailer.enqueue_mail(subject, message, from_email, recipient_list)
bgneal@180 23 elif settings.GPP_SEND_EMAIL:
gremmie@1 24 django.core.mail.send_mail(subject, message, from_email, recipient_list,
gremmie@1 25 fail_silently, auth_user, auth_password)
gremmie@1 26
bgneal@316 27 logging.debug('EMAIL:\nFrom: %s\nTo: %s\nSubject: %s\nMessage:\n%s',
bgneal@316 28 from_email, str(recipient_list), subject, message)
gremmie@1 29
gremmie@1 30
gremmie@1 31 def email_admins(subject, message):
gremmie@1 32 """Emails the site admins. Goes through the site send_mail function."""
gremmie@1 33 site = Site.objects.get_current()
gremmie@1 34 subject = '[%s] %s' % (site.name, subject)
bgneal@316 35 send_mail(subject,
bgneal@316 36 message,
gremmie@1 37 '%s@%s' % (settings.GPP_NO_REPLY_EMAIL, site.domain),
gremmie@1 38 [mail_tuple[1] for mail_tuple in settings.ADMINS])
gremmie@1 39
gremmie@1 40
gremmie@1 41 def email_managers(subject, message):
gremmie@1 42 """Emails the site managers. Goes through the site send_mail function."""
gremmie@1 43 site = Site.objects.get_current()
gremmie@1 44 subject = '[%s] %s' % (site.name, subject)
bgneal@316 45 send_mail(subject,
bgneal@316 46 msg,
gremmie@1 47 '%s@%s' % (settings.GPP_NO_REPLY_EMAIL, site.domain),
gremmie@1 48 [mail_tuple[1] for mail_tuple in settings.MANAGERS])
gremmie@1 49
gremmie@1 50
gremmie@1 51 def get_full_name(user):
gremmie@1 52 """Returns the user's full name if available, otherwise falls back
gremmie@1 53 to the username."""
gremmie@1 54 full_name = user.get_full_name()
gremmie@1 55 if full_name:
gremmie@1 56 return full_name
gremmie@1 57 return user.username
bgneal@9 58
bgneal@176 59
bgneal@176 60 BASE_YEAR = 2010
bgneal@176 61
bgneal@176 62 def copyright_str():
bgneal@176 63 curr_year = datetime.datetime.now().year
bgneal@176 64 if curr_year == BASE_YEAR:
bgneal@176 65 year_range = str(BASE_YEAR)
bgneal@176 66 else:
bgneal@176 67 year_range = "%d - %d" % (BASE_YEAR, curr_year)
bgneal@176 68
bgneal@176 69 return 'Copyright (C) %s, SurfGuitar101.com' % year_range
bgneal@227 70
bgneal@227 71
bgneal@227 72 IP_PAT = re.compile('(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})')
bgneal@227 73
bgneal@227 74 def get_ip(request):
bgneal@227 75 """Returns the IP from the request or None if it cannot be retrieved."""
bgneal@227 76 ip = request.META.get('HTTP_X_FORWARDED_FOR',
bgneal@227 77 request.META.get('REMOTE_ADDR'))
bgneal@227 78
bgneal@227 79 if ip:
bgneal@227 80 match = IP_PAT.match(ip)
bgneal@227 81 ip = match.group(1) if match else None
bgneal@227 82
bgneal@227 83 return ip
bgneal@241 84
bgneal@241 85
bgneal@241 86 def get_page(qdict):
bgneal@241 87 """Attempts to retrieve the value for "page" from the given query dict and
bgneal@241 88 return it as an integer. If the key cannot be found or converted to an
bgneal@241 89 integer, 1 is returned.
bgneal@241 90 """
bgneal@241 91 n = qdict.get('page', 1)
bgneal@241 92 try:
bgneal@241 93 n = int(n)
bgneal@241 94 except ValueError:
bgneal@241 95 n = 1
bgneal@241 96 return n