Extension

Extension 페이지는 `ahttp_client`의 고유적인 기능은 벗어나지만, 개발에 도움이 될 수 있는 기능을 서술합니다.

다중 후킹(Mulitple Hooking)

여러 메소드에서 후킹을 할 수있도록 해주는 데코레이터 메소드 입니다. 일반적인 상황에서 ahttp_client 의 후킹 기능은 요청 전과 후로 하나의 메소드만 정의할 수 있습니다.

@multiple_hook(hook, index)

이 데코레이터 메소드를 이용하여 HTTP 요청 전과 HTTP 요청 후의 후킹을 하나 이상 설정할 수 있습니다.

매개변수:
  • hook – hooking에 사용되는 데코레이터 함수가 입력됩니다.`RequestCore.before_hook()` 또는 RequestCore.after_hook() 가 될 수 있습니다.

  • index (Optional[int]) – 후킹 할 순서를 정의합니다.

Example

 1class MetroAPI(Session):
 2    def __init__(self, loop: asyncio.AbstractEventLoop):
 3        super().__init__("https://api.yhs.kr", loop=loop)
 4
 5    @request("GET", "/metro/station")
 6    async def station_search_with_query(
 7            self,
 8            response: aiohttp.ClientResponse,
 9            name: Query | str
10    ) -> dict[str, Any]:
11        return await response.json()
12
13    @multiple_hook(station_search_with_query.before_hook)
14    async def before_hook_1(self, obj, path):
15        # Set-up before request
16        return obj, path
17
18    @multiple_hook(station_search_with_query.before_hook)
19    async def before_hook_2(self, obj, path):
20        # Set-up before request
21        return obj, path

Pydantic Response Model

참고

이 기능을 이용하기 위해서는 pydantic 패키지가 필요합니다.

pip install pydantic

json 형태로 반환받은 데이터를 직렬화하여, pydantic.BaseModel 에 확장된 데이터 클래스로 반환힙니다.

@pydantic_response_model(model)

request method가 pydantic.BaseModel로 상속된 데이터 클래스로 반환할 수 있도록 만듭니다.

매개변수:
  • model (Optional[pydantic.BaseModel]) – API에서 불러온 값을 파싱할 pydantic.BaseModel 에 상속된 데이터 클래스입니다. 만약에 directly_response 기능이 켜져있고, model 인수가 값이 비어있다면, 반환 주석을 따라가게 설정될 것입니다.하지만, 반환 주석도 비어있다면 TypeError(“Invalid model type.”) 를 발생시킬 것입니다.

  • index (Optional[int]) – mulitple_hook 을 이용하여 데이터를 파싱할 순서를 정의합니다. 보통 HTTP 상태 코드를 확인하고, 마지막 과정에서 사용됩니다.

  • strict (Optional[bool]) – pydantic.BaseModel.model_validate 메소드의 strict 기능과 같은 기능을 합니다.

  • from_attributes (Optional[bool]) – pydantic.BaseModel.model_validate 메소드의 from_attributes 기능과 같은 기능을 합니다.

  • context (Optional[dict[str, Any]]) – pydantic.BaseModel.model_validate 메소드의 context 기능과 같은 기능을 합니다.

경고

이 기능은 실험적인 기능입니다. 예상대로 작동하지 않을 수도 있습니다. 그리고 pydantic 패키지를 설치해야합니다.

예제

>>> class ResponseModel(pydantic.BaseModel):
...     name: str
...     id: str
...
>>> class MetroAPI(Session):
...    def __init__(self, loop: asyncio.AbstractEventLoop):
...        super().__init__("https://api.yhs.kr", loop=loop)
...
...    @pydantic_response_model(ResponseModel)
...    @request("GET", "/metro/station")
...    async def station_search_with_query(
...            self,
...            response: aiohttp.ClientResponse,
...            name: Query | str
...    ) -> ResponseModel:
...        pass