Mercurial > hg > orthanc-python
diff Sources/IncomingHttpRequestFilter.cpp @ 68:0b3ef425db31
refactoring using ICallbackRegistration::Apply()
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 11 Jun 2021 14:34:08 +0200 |
parents | 23f3099bed47 |
children | eb6ac5a801d1 |
line wrap: on
line diff
--- a/Sources/IncomingHttpRequestFilter.cpp Fri Jun 11 14:13:36 2021 +0200 +++ b/Sources/IncomingHttpRequestFilter.cpp Fri Jun 11 14:34:08 2021 +0200 @@ -19,10 +19,10 @@ #include "IncomingHttpRequestFilter.h" -#include "PythonString.h" +#include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" #include "Autogenerated/sdk.h" - -#include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" +#include "ICallbackRegistration.h" +#include "PythonString.h" static PyObject* incomingHttpRequestFilter_ = NULL; @@ -117,42 +117,24 @@ PyObject* RegisterIncomingHttpRequestFilter(PyObject* module, PyObject* args) { // The GIL is locked at this point (no need to create "PythonLock") - - // https://docs.python.org/3/extending/extending.html#calling-python-functions-from-c - PyObject* callback = NULL; - if (!PyArg_ParseTuple(args, "O", &callback) || - callback == NULL) - { - PyErr_SetString(PyExc_ValueError, "Expected a callback function"); - return NULL; - } - - if (incomingHttpRequestFilter_ != NULL) + class Registration : public ICallbackRegistration { - PyErr_SetString(PyExc_RuntimeError, "Can only register one Python incoming-http-request filter"); - return NULL; - } - - OrthancPlugins::LogInfo("Registering a Python incoming-http-request filter"); + public: + virtual void Register() ORTHANC_OVERRIDE + { + OrthancPluginRegisterIncomingHttpRequestFilter2( + OrthancPlugins::GetGlobalContext(), IncomingHttpRequestFilter); + } + }; - OrthancPluginRegisterIncomingHttpRequestFilter2( - OrthancPlugins::GetGlobalContext(), IncomingHttpRequestFilter); - - incomingHttpRequestFilter_ = callback; - Py_XINCREF(incomingHttpRequestFilter_); - - Py_INCREF(Py_None); - return Py_None; + Registration registration; + return ICallbackRegistration::Apply( + registration, args, incomingHttpRequestFilter_, "Python incoming-http-request filter"); } void FinalizeIncomingHttpRequestFilter() { - PythonLock lock; - - if (incomingHttpRequestFilter_ != NULL) - { - Py_XDECREF(incomingHttpRequestFilter_); - } + ICallbackRegistration::Unregister(incomingHttpRequestFilter_); }