Skip to content

Commit

Permalink
Trigger hide/unhidden schedule to tickets system (#212)
Browse files Browse the repository at this point in the history
* trigger hide/unhidden schedule to tickets system

* fix flake8: remove unsued assign variable

* rework log error message

* fix code review, log content and avoid using deprecated funtion

---------

Co-authored-by: lcduong <[email protected]>
  • Loading branch information
odkhang and lcduong authored Oct 10, 2024
1 parent 6813587 commit 90b38ea
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 0 deletions.
64 changes: 64 additions & 0 deletions src/pretalx/orga/tasks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import logging

Check failure on line 1 in src/pretalx/orga/tasks.py

View workflow job for this annotation

GitHub Actions / black

would reformat
from datetime import datetime, timedelta, timezone
from urllib.parse import urljoin

import jwt
import requests
from django.conf import settings

from pretalx.celery_app import app

logger = logging.getLogger(__name__)


def generate_sso_token(user_email):
jwt_payload = {
"email": user_email,
"has_perms": "orga.edit_schedule",
"exp": datetime.now(timezone.utc) + timedelta(hours=1),
"iat": datetime.now(timezone.utc),
}
jwt_token = jwt.encode(jwt_payload, settings.SECRET_KEY, algorithm="HS256")
return jwt_token


def set_header_token(user_email):
token = generate_sso_token(user_email)
# Define the headers, including the Authorization header with the Bearer token
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
}
return headers


@app.task(
bind=True,
name="pretalx.orga.trigger_public_schedule",
max_retries=3,
default_retry_delay=60,
)
def trigger_public_schedule(
self, is_show_schedule, event_slug, organiser_slug, user_email
):
try:
headers = set_header_token(user_email)
payload = {"is_show_schedule": is_show_schedule}
# Send the POST request with the payload and the headers
ticket_uri = urljoin(
settings.EVENTYAY_TICKET_BASE_PATH,
f"api/v1/{organiser_slug}/{event_slug}/schedule-public/",
)
response = requests.post(ticket_uri, json=payload, headers=headers)
response.raise_for_status() # Raise exception for bad status codes
except requests.RequestException as e:
logger.error(
"Error occurred when triggering hide/unhide schedule for tickets component."
"Event: %s, Organiser: %s. Error: %s",
event_slug, organiser_slug, e,
)
# Retry the task if an exception occurs (with exponential backoff by default)
try:
self.retry(exc=e)
except self.MaxRetriesExceededError:
logger.error("Max retries exceeded for sending organizer webhook.")
25 changes: 25 additions & 0 deletions src/pretalx/orga/views/schedule.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import collections

Check failure on line 1 in src/pretalx/orga/views/schedule.py

View workflow job for this annotation

GitHub Actions / black

would reformat
import datetime as dt
import json
import logging
from contextlib import suppress

import dateutil.parser
from celery.exceptions import TaskError
from csp.decorators import csp_update
from django.conf import settings
from django.contrib import messages
Expand Down Expand Up @@ -53,6 +55,9 @@
)


logger = logging.getLogger(__name__)


@method_decorator(
csp_update(SCRIPT_SRC=SCRIPT_SRC, DEFAULT_SRC=DEFAULT_SRC), name="dispatch"
)
Expand Down Expand Up @@ -236,6 +241,26 @@ def dispatch(self, request, event):
not self.request.event.feature_flags["show_schedule"]
)
self.request.event.save()
# Trigger tickets to hidden/unhidden schedule menu
try:
from pretalx.orga.tasks import trigger_public_schedule

trigger_public_schedule.apply_async(
kwargs={
"is_show_schedule": self.request.event.feature_flags[
"show_schedule"
],
"event_slug": self.request.event.slug,
"organiser_slug": self.request.event.organiser.slug,
"user_email": self.request.user.email,
},
ignore_result=True,
)
except (TaskError, ConnectionError) as e:
logger.warning("Unexpected error when trying to trigger "
"schedule's state to external system: %s", e)
except Exception as e:
logger.error("Unexpected error in task: %s", e)
return redirect(self.request.event.orga_urls.schedule)


Expand Down

0 comments on commit 90b38ea

Please sign in to comment.