# Buggy code
def send_notif_to_attendees(order, purchaser_id):
    for holder in order.ticket_holders:
        if holder.user:
            # send notification if the ticket holder is a registered user.
            if holder.user.id != purchaser_id:
                # The ticket holder is not the purchaser
                send_notification(
                    user=holder.user,
                    action=TICKET_PURCHASED_ATTENDEE,
                    title=NOTIFS[TICKET_PURCHASED_ATTENDEE]["title"].format(
                        event_name=order.event.name
                    ),
                    message=NOTIFS[TICKET_PURCHASED_ATTENDEE]["message"].format(
                        pdf_url=holder.pdf_url
                    ),
                )
            else:
                # The Ticket purchaser
                send_notification(
                    user=holder.user,
                    action=TICKET_PURCHASED,
                    title=NOTIFS[TICKET_PURCHASED]["title"].format(
                        invoice_id=order.invoice_number
                    ),
                    message=NOTIFS[TICKET_PURCHASED]["message"].format(
                        pdf_url=holder.pdf_url
                    ),
                )


# Traceback (KeyError)
INFO:werkzeug:127.0.0.1 - - [25/Jul/2018 13:57:35] "POST /v1/orders/852cf23e-f6ca-4af2-ad6d-38639db5fa17/charge? HTTP/1.1" 500 - Traceback (most recent call last):
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask/app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "/home/rs/Pradeep/github/open-event-server/app/__init__.py", line 67, in __call__
return self.app(environ, start_response)
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask/app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask_cors/extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask_cors/extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask/app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask_cors/extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask_cors/extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/rs/Pradeep/github/open-event-server/app/api/helpers/permissions.py", line 45, in decorator
return fn(*args, **kwargs)
File "/home/rs/Pradeep/github/open-event-server/env/src/flask-rest-jsonapi/flask_rest_jsonapi/decorators.py", line 32, in wrapper
return func(*args, **kwargs)
File "/home/rs/Pradeep/github/open-event-server/env/lib/python3.5/site-packages/flask/views.py", line 88, in view
return self.dispatch_request(*args, **kwargs)
File "/home/rs/Pradeep/github/open-event-server/env/src/flask-rest-jsonapi
File "/home/rs/Pradeep/github/open-event-server/app/api/data_layers/ChargesLayer.py", line 58, in create_object
data['paypal_payment_id'])
File "/home/rs/Pradeep/github/open-event-server/app/api/helpers/ticketing.py", line 171, in charge_paypal_order_payment
sesend_notif_to_attendees(order, order.user_id)
File "/home/rs/Pradeep/github/open-event-server/app/api/helpers/notification.py", line 200, in send_notif_to_attendees
pdf_url=holder.pdf_url
KeyError: 'order_url'

# Fixed code
def send_notif_to_attendees(order, purchaser_id):
    for holder in order.ticket_holders:
        if holder.user:
            # send notification if the ticket holder is a registered user.
            if holder.user.id != purchaser_id:
                # The ticket holder is not the purchaser
                send_notification(
                    user=holder.user,
                    action=TICKET_PURCHASED_ATTENDEE,
                    title=NOTIFS[TICKET_PURCHASED_ATTENDEE]["title"].format(
                        event_name=order.event.name
                    ),
                    message=NOTIFS[TICKET_PURCHASED_ATTENDEE]["message"].format(
                        pdf_url=holder.pdf_url
                    ),
                )
            else:
                # The Ticket purchaser
                send_notification(
                    user=holder.user,
                    action=TICKET_PURCHASED,
                    title=NOTIFS[TICKET_PURCHASED]["title"].format(
                        invoice_id=order.invoice_number
                    ),
                    message=NOTIFS[TICKET_PURCHASED]["message"].format(
                        order_url=order.tickets_pdf_url
                    ),
                )