Files @ 808a70eb093c
Branch filter:

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

Christopher Neugebauer
Revert "Hide Rego"

This reverts commit 70498db51bab734952b3c4b8733e664cf370051c.

Revert "Comment out ticket sales message"

This reverts commit c012168d45f5d430329a3ce9dd46f14d808cf140.
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