Files @ 7677bd7eeaae
Branch filter:

Location: CopyleftConf/copyleftconf-website/pinaxcon/monkey_patch.py

Christopher Neugebauer
Merge remote-tracking branch 'origin/2019' into chrisjrn/2019
from __future__ import absolute_import

from django.conf import settings
from django.contrib.auth.models import User
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_stripe_card_defaults()
    patch_conference_schedule()

    # Remove this function from existence
    global do_monkey_patch
    do_monkey_patch = lambda: None


def patch_stripe_card_defaults():
    from pinax.stripe.actions import sources
    from collections import defaultdict

    old_sync_card = sources.sync_card

    @wraps(old_sync_card)
    def sync_card(customer, source):
        d = defaultdict(str)
        d.update(source)
        return old_sync_card(customer, d)

    sources.sync_card = sync_card


def patch_conference_schedule():
    from symposion.schedule import views as sv
    from symposion.schedule import models as sm

    old_schedule_json = sv._schedule_json

    @wraps(old_schedule_json)
    def schedule_json(request):
        schedule = old_schedule_json(request)

        for slot_data in schedule:
            slot = sm.Slot.objects.get(id=slot_data["conf_key"])
            presentation = slot.content
            if presentation is not None:
                update_presentation(request, slot_data, presentation)
            elif slot.kind.label.lower() == "keynote":
                update_keynote(request, slot_data)
            elif slot.kind.label.lower() == "housekeeping":
                update_housekeeping(request, slot_data)
            else:
                pass

        return schedule

    def update_presentation(request, slot_data, presentation):
        try:
            slot_data["reviewers"] = (
                presentation.speaker.conferencespeaker.reviewer
                if request.user.is_staff else ["redacted"]
            )
            slot_data["license"] = "CC BY-SA"
            slot_data["released"] = presentation.proposal_base.talkproposal.recording_release
            slot_data["twitter_id"] = presentation.speaker.conferencespeaker.twitter_username
        except Exception as e:
            print e

    def update_keynote(request, slot_data):
        keynotes = {
            "Brandon Rhodes": (User.objects.get(username="brandon").email, "brandon_rhodes"),
            "Carina C. Zona": (User.objects.get(username="cczona").email, "cczona"),
        }
        for speaker, values in keynotes.items():
            print speaker
            if speaker in slot_data["name"]:
                author_name = speaker
                author_email, author_twitter_id = values

        slot_data["name"] = "Keynote"
        slot_data["authors"] = [author_name]
        slot_data["contact"] = [
            author_email
        ] if request.user.is_staff else ["redacted"]
        slot_data["abstract"] = "Keynote presentation from North Bay Python 2017 by " + author_name
        slot_data["description"] = "Keynote presentation from North Bay Python 2017 by " + author_name
        slot_data["conf_url"] = "https://2017.northbaypython.org"
        slot_data["cancelled"] = False
        slot_data["reviewers"] = ""
        slot_data["license"] = "CC BY-SA"
        slot_data["twitter_id"] = author_twitter_id
        slot_data["released"] = True

    def update_housekeeping(request, slot_data):
        slot_data["contact"] = [
            "spam@northbaypython.org"
        ] if request.user.is_staff else ["redacted"]


    sv._schedule_json = schedule_json