개요
2024.07.18-[Python] Requests hooks - 응답에 대한 콜백 구현하기에서 python requests를 사용하여 응답에 대한 콜백을 구현했는데, 이번 글에서는 콜백 함수에 매개변수를 함께 전달하는 방법을 몇 가지 살펴본다.
partial 활용
2022.10.19-[Python] functools.partial - 함수 재활용에서 살펴봤던 partial 함수는 전달받은 함수에 전달받은 인자값을 채워 넣은 함수를 생성할 때 사용한다. 따라서 hooks에 함수를 전달할 때 partial로 인자값이 채워진 함수를 전달할 수 있다. 다만 kwargs로만 참조할 수 있다.
콜백으로 수행할 함수를 다음과 같이 정의했다고 하자.
import requests
from functools import partial
def print_response(resp, *args, **kwargs):
print(args)
print(kwargs)
print(resp.status_code)
print(resp.json())
print_response를 hooks로 전달 시 다음과 같이 매개변수를 채워서 요청하면,
if __name__ == '__main__':
requests.get('http://localhost:8888',
hooks={'response': partial(print_response, test='test_val')})
kwargs를 통해 전달한 변수를 접근할 수 있게 된다.
Factory
콜백함수의 정의/생성을 다른 함수에 위임하는 방식을 사용할 수도 있다. 아래 callback_factory라는 함수는 print_response 함수를 반환한다. print_response 함수는 callback_factory로 전달받은 test라는 변수에 접근하여 사용할 수 있다.
import requests
def callback_factory(test):
def print_response(resp, *args, **kwargs):
print(test)
print(resp.status_code)
print(resp.json())
return print_response
이 방식은 요청 시 다음과 같이 hooks로 전달하면 된다.
if __name__ == '__main__':
requests.get('http://localhost:8888',
hooks={'response': callback_factory('test_val')})
참고 문서
https://stackoverflow.com/questions/25115151/how-to-pass-parameters-to-hooks-in-python-grequests
https://onaeonae1.tistory.com/67