symposion_app/pinaxcon/monkey_patch.py
Christopher Neugebauer ecabf31e54 Assorted fixes (#47)
* Invokes the site tree fix from previous fixes.

* Adds a disclaimer noting that previous years’ accounts have not been carried over.

Fixes #43

* Adds proposal type to the proposal summary page.

Fixes #40

* Adds travel/accommodation assistance to the proposals page, but makes it only visible to speakers in the proposal, or review managers.

Fixes #41.
Fixes #42.

* Reduces a lot of the whitespace in the header and footer.

Fixes #44

* Proposals review page now shows information for every speaker on a proposal.

Fixes #45

* Makes sure that non_field_errors are displayed by forms.

Fixes #37
2016-07-09 23:14:31 +10:00

78 lines
2.2 KiB
Python

from django.conf import settings
from django.core.mail import EmailMultiAlternatives
from functools import wraps
class MonkeyPatchMiddleware(object):
''' Ensures that our monkey patching only gets called after it is safe to do so.'''
def process_request(self, request):
do_monkey_patch()
def do_monkey_patch():
patch_speaker_profile_form()
patch_accounts_to_send_bcc()
fix_sitetree_check_access_500s()
# Remove this function from existence
global do_monkey_patch
do_monkey_patch = lambda: None
def patch_speaker_profile_form():
''' Replaces textarea widgets with markdown editors. '''
import widgets
from symposion.speakers.forms import SpeakerForm
fields = SpeakerForm.base_fields
fields["biography"].widget = widgets.AceMarkdownEditor()
fields["experience"].widget = widgets.AceMarkdownEditor()
fields["accessibility"].widget = widgets.AceMarkdownEditor()
def patch_accounts_to_send_bcc():
''' Patches django-user-accounts' email functions to send a BCC e-mail to
the default BCC e-mail address. '''
from account import hooks
# django-user-accounts always uses send_mail like:
# send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, to)
if hasattr(settings, "ENVELOPE_BCC_LIST"):
bcc_email = settings.ENVELOPE_BCC_LIST
else:
bcc_email = None
def send_mail(subject, message, from_email, to):
email = EmailMultiAlternatives(
subject,
message,
from_email,
to,
bcc=bcc_email,
)
email.send()
hooks.send_mail = send_mail
def fix_sitetree_check_access_500s():
''' django-sitetree has a bug: https://github.com/idlesign/django-sitetree/pull/167/files
-- it swallows the cause of all 500 errors. This swallows KeyErrors from
the failing function. '''
from sitetree.sitetreeapp import SiteTree
old_check_access = SiteTree.check_access
@wraps(SiteTree.check_access)
def check_access(self, *a, **k):
try:
return old_check_access(self, *a, **k)
except KeyError:
return False
SiteTree.check_access = check_access