request를 데코레이터에 인수로 넘기고 데코레이터는 유저 에이전트 값에서 '(', ')', '/', ' ' 제거하고 필요한 것들만 구함
parse메서드로 버전 비교함
특정 버전 미만이면 업데이트 응답, 이상이면 fn(*args, **kwargs)
로 post메서드 호출
from packaging import version
def app_version_checker(request):
def _app_version_checker(fn):
@wraps(fn)
def __app_version_checker(*args, **kwargs):
user_agent = str(request.user_agent)
pattern = re.compile(r"\(|\)|/| ")
result = re.split(pattern, user_agent)
app_version = result[1]
_os = result[3]
if (
_os == "ios" and version.parse(app_version) < version.parse("2.2.2")
) or (
_os == "android"
and version.parse(app_version) < version.parse("1.1.1")
):
return ApiData(426, "앱 업데이트 필요")
return fn(*args, **kwargs)
return __app_version_checker
return _app_version_checker
class API
@app_version_checker(request)
def post(self):
pass