Skip to content

Commit

Permalink
단건 조회 API 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
MU-Software committed Sep 6, 2024
1 parent 97745af commit 45f54c2
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 3 deletions.
18 changes: 16 additions & 2 deletions pyconkr/external_apis/pretalx/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import requests
from django.conf import settings

from .serializers import PretalxPaginatedSessionSerializer
from .serializers import PretalxPaginatedSessionSerializer, PretalxSessionSerializer

logger = logging.getLogger(__name__)

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

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

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

def retrieve_session(self, event_name: str, session_id: int) -> dict:
"""세션 상세 조회"""
endpoint = f"api/events/{event_name}/submissions/{session_id}"

try:
result = self._request("GET", endpoint)
result.raise_for_status()

parsed_result = PretalxSessionSerializer(data=result.json())
parsed_result.is_valid(raise_exception=True)
return parsed_result.validated_data
except Exception as e:
raise PretalxException("세션을 가져오지 못했습니다, 잠시 후에 다시 시도해주세요.") from e


pretalx_client = PretalxClient()
25 changes: 24 additions & 1 deletion session/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,31 @@ def list(self, request, *args, **kwargs) -> Response:

pretalx_event_name = settings.PRETALX.EVENT_NAME[request.version]
return Response(
data=pretalx_client.retrieve_sessions(
data=pretalx_client.list_sessions(
event_name=pretalx_event_name,
only_confirmed=settings.DEBUG,
)["results"],
)

@extend_schema(
examples={
200: OpenApiResponse(
response=str,
examples=[
OpenApiExample(name="2023년 세션 상세", value=SessionSerializer()),
OpenApiExample(name="2024년 이후 세션 상세 (Pretalx)", value=PretalxSessionSerializer()),
],
),
},
)
def retrieve(self, request, *args, **kwargs) -> Response:
if request.version == 2023 or request.version not in settings.PRETALX.EVENT_NAME:
return super().retrieve(request, *args, **kwargs)

pretalx_event_name = settings.PRETALX.EVENT_NAME[request.version]
return Response(
data=pretalx_client.retrieve_session(
event_name=pretalx_event_name,
session_id=kwargs["pk"],
),
)

0 comments on commit 45f54c2

Please sign in to comment.