Skip to content

Commit 8b7f721

Browse files
committed
Merge remote-tracking branch 'origin/feature/use-pretalx-on-2024' into devdev
2 parents 97745af + d7f7f35 commit 8b7f721

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

pyconkr/external_apis/pretalx/client.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import requests
99
from django.conf import settings
1010

11-
from .serializers import PretalxPaginatedSessionSerializer
11+
from .serializers import PretalxPaginatedSessionSerializer, PretalxSessionSerializer
1212

1313
logger = logging.getLogger(__name__)
1414

@@ -39,7 +39,7 @@ def _request(self, method: RequestMethodType, endpoint: str, *args: tuple, **kwa
3939
logger.error(traceback.format_exception(e))
4040
raise PretalxException("Pretalx API 요청에 실패했습니다.") from e
4141

42-
def retrieve_sessions(self, event_name: str, only_confirmed: bool = True) -> dict:
42+
def list_sessions(self, event_name: str, only_confirmed: bool = True) -> dict:
4343
"""세션 목록 조회"""
4444
endpoint = f"api/events/{event_name}/submissions" + ("?state=confirmed" if only_confirmed else "")
4545

@@ -53,5 +53,19 @@ def retrieve_sessions(self, event_name: str, only_confirmed: bool = True) -> dic
5353
except Exception as e:
5454
raise PretalxException("세션 목록을 가져오지 못했습니다, 잠시 후에 다시 시도해주세요.") from e
5555

56+
def retrieve_session(self, event_name: str, session_id: int) -> dict:
57+
"""세션 상세 조회"""
58+
endpoint = f"api/events/{event_name}/submissions/{session_id}"
59+
60+
try:
61+
result = self._request("GET", endpoint)
62+
result.raise_for_status()
63+
64+
parsed_result = PretalxSessionSerializer(data=result.json())
65+
parsed_result.is_valid(raise_exception=True)
66+
return parsed_result.validated_data
67+
except Exception as e:
68+
raise PretalxException("세션을 가져오지 못했습니다, 잠시 후에 다시 시도해주세요.") from e
69+
5670

5771
pretalx_client = PretalxClient()

session/viewsets.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,31 @@ def list(self, request, *args, **kwargs) -> Response:
4040

4141
pretalx_event_name = settings.PRETALX.EVENT_NAME[request.version]
4242
return Response(
43-
data=pretalx_client.retrieve_sessions(
43+
data=pretalx_client.list_sessions(
4444
event_name=pretalx_event_name,
4545
only_confirmed=settings.DEBUG,
4646
)["results"],
4747
)
48+
49+
@extend_schema(
50+
examples={
51+
200: OpenApiResponse(
52+
response=str,
53+
examples=[
54+
OpenApiExample(name="2023년 세션 상세", value=SessionSerializer()),
55+
OpenApiExample(name="2024년 이후 세션 상세 (Pretalx)", value=PretalxSessionSerializer()),
56+
],
57+
),
58+
},
59+
)
60+
def retrieve(self, request, *args, **kwargs) -> Response:
61+
if request.version == 2023 or request.version not in settings.PRETALX.EVENT_NAME:
62+
return super().retrieve(request, *args, **kwargs)
63+
64+
pretalx_event_name = settings.PRETALX.EVENT_NAME[request.version]
65+
return Response(
66+
data=pretalx_client.retrieve_session(
67+
event_name=pretalx_event_name,
68+
session_id=kwargs["pk"],
69+
),
70+
)

0 commit comments

Comments
 (0)