Mercurial > public > sg101
diff core/functions.py @ 581:ee87ea74d46b
For Django 1.4, rearranged project structure for new manage.py.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sat, 05 May 2012 17:10:48 -0500 |
parents | gpp/core/functions.py@4b9970ad0edb |
children | e888d627928f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/functions.py Sat May 05 17:10:48 2012 -0500 @@ -0,0 +1,117 @@ +"""This file houses various core utility functions for GPP""" +import datetime +import re +import logging + +from django.contrib.sites.models import Site +from django.conf import settings +import django.core.mail + +import core.tasks + + +def send_mail(subject, message, from_email, recipient_list, defer=True, **kwargs): + """ + The main send email function. Use this function to send email from the + site. All applications should use this function instead of calling + Django's directly. + If defer is True, the email will be sent to a Celery task to actually send + the email. Otherwise it is sent on the caller's thread. In any event, the + email will be logged at the DEBUG level. + + """ + # Guard against empty email addresses + recipient_list = [dest for dest in recipient_list if dest] + if not recipient_list: + logging.warning("Empty recipient_list in send_mail") + return + + logging.debug('EMAIL:\nFrom: %s\nTo: %s\nSubject: %s\nMessage:\n%s', + from_email, str(recipient_list), subject, message) + + if defer: + core.tasks.send_mail.delay(subject, message, from_email, recipient_list, + **kwargs) + else: + django.core.mail.send_mail(subject, message, from_email, recipient_list, + **kwargs) + + +def email_admins(subject, message): + """Emails the site admins. Goes through the site send_mail function.""" + site = Site.objects.get_current() + subject = '[%s] %s' % (site.name, subject) + send_mail(subject, + message, + '%s@%s' % (settings.GPP_NO_REPLY_EMAIL, site.domain), + [mail_tuple[1] for mail_tuple in settings.ADMINS]) + + +def email_managers(subject, message): + """Emails the site managers. Goes through the site send_mail function.""" + site = Site.objects.get_current() + subject = '[%s] %s' % (site.name, subject) + send_mail(subject, + msg, + '%s@%s' % (settings.GPP_NO_REPLY_EMAIL, site.domain), + [mail_tuple[1] for mail_tuple in settings.MANAGERS]) + + +def get_full_name(user): + """Returns the user's full name if available, otherwise falls back + to the username.""" + full_name = user.get_full_name() + if full_name: + return full_name + return user.username + + +BASE_YEAR = 2010 + +def copyright_str(): + curr_year = datetime.datetime.now().year + if curr_year == BASE_YEAR: + year_range = str(BASE_YEAR) + else: + year_range = "%d - %d" % (BASE_YEAR, curr_year) + + return 'Copyright (C) %s, SurfGuitar101.com' % year_range + + +IP_PAT = re.compile('(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})') + +def get_ip(request): + """Returns the IP from the request or None if it cannot be retrieved.""" + ip = request.META.get('HTTP_X_FORWARDED_FOR', + request.META.get('REMOTE_ADDR')) + + if ip: + match = IP_PAT.match(ip) + ip = match.group(1) if match else None + + return ip + + +def get_page(qdict): + """Attempts to retrieve the value for "page" from the given query dict and + return it as an integer. If the key cannot be found or converted to an + integer, 1 is returned. + """ + n = qdict.get('page', 1) + try: + n = int(n) + except ValueError: + n = 1 + return n + + +def quote_message(who, message): + """ + Builds a message reply by quoting the existing message in a + typical email-like fashion. The quoting is compatible with Markdown. + """ + msg = "> %s" % message.replace('\n', '\n> ') + if msg.endswith('\n> '): + msg = msg[:-2] + + return "*%s wrote:*\n\n%s\n\n" % (who, msg)