From 895b8cc9c4ba30af4a23af6532fedcb036610556 2017-11-16 01:29:50 From: Christopher Neugebauer Date: 2017-11-16 01:29:50 Subject: [PATCH] Adds monkey patch of schedule --- diff --git a/pinaxcon/monkey_patch.py b/pinaxcon/monkey_patch.py index 64e7b3bedfb5247263c81973673886061ab69250..f6252deb0b7d36c7f225e74744d07d949c3a4ff8 100644 --- a/pinaxcon/monkey_patch.py +++ b/pinaxcon/monkey_patch.py @@ -1,4 +1,5 @@ from django.conf import settings +from django.contrib.auth.models import User from django.core.mail import EmailMultiAlternatives from functools import wraps @@ -12,6 +13,7 @@ class MonkeyPatchMiddleware(object): def do_monkey_patch(): patch_stripe_card_defaults() + patch_conference_schedule() # Remove this function from existence global do_monkey_patch @@ -24,9 +26,71 @@ def patch_stripe_card_defaults(): 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 == "keynote": + update_keynote(request, slot_data) + else: + pass + + return schedule + + def update_presentation(request, slot_data, presentation): + try: + slot_data["reviewer"] = ( + 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["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", + slot_data["description"] = "Keynote presentation from North Bay Python 2017" + slot_data["conf_url"] = "https://2017.northbaypython.org" + slot_data["cancelled"] = False, + slot_data["reviewer"] = "" + slot_data["licence"] = "CC BY-SA" + slot_data["twitter_id"] = author_twitter_id + slot_data["released"] = True + + sv._schedule_json = schedule_json