2016-12-04 5 views
0

before_finalize에서 실행할 후크에서 @cherrypy.tools.expires()을 제거하고 싶은 기존 응용 프로그램이 있습니다.CherryPy before_finalize hook을 응답에서 제거하십시오

내가 무엇을 가지고 :

  1. 사용자가 인증되지 않거나 있는지 확인 모든 컨트롤러/핸들러 주위에 @cherrypy.tools.expires()
  2. 일부 래퍼로 장식 된 GET이있는 컨트롤러. 인증되지 않은 경우, 401 인증 안 오류가 대신 그 라인을 따라 GET
  3. CherryPy 오류 처리기 또는 뭔가를 호출 제기 나는 before_finalize 훅을 제거 할 필요가 제어
  4. 이 3 단계에

을지지한다 비록 래퍼가 결코 GET을 실행하지는 않았지만, 여전히 글로벌 request 개체에 추가됩니다.

cherrypy.serving.request.hooks에서 도구를 찾을 수 있다는 것을 알고 있지만 이름이 지정되지 않았기 때문에 어떤 후크가 올바른지 알아낼 수있는 쉬운 방법이 없습니다.

후크를 반복하고 함수 이름을 기반으로 몇 가지 추측을하는 것 외에 제거 할 항목을 파악하는 좋은 방법이 있습니까?

+0

은 왜 당신은 당신의 핸들러 방법이 후크를 추가 했습니까? – webKnjaZ

+0

@webKnjaZ @webKnjaZ 왜냐하면 내가 상속 받고있는 코드베이스이기 때문에 내가 익숙한 피라미드와 달리이 훅은 요청에 대해 전역 적으로 보이기 때문에 처리기가 오류를 발생시킬 때조차도, 만료 헤더는 계속 전송됩니다. 예외 처리 코드에서'before_finalize' 훅을 제거했습니다. –

+0

클래스 기반으로이 도구를 무시하고 비활성화 할 수 있다고 생각합니다. – webKnjaZ

답변

0

이 코드는 작업을 수행하지만, 이것은 단지 잘못 ... 보인다

# Remove any hooks that happen to contain "expires" in the callback's name 
hooks = cherrypy.serving.request.hooks['before_finalize'] 
hooks = filter(lambda hook: 'expires' not in str(hook.callback), hooks) 
cherrypy.serving.request.hooks['before_finalize'] = hooks