Mercurial > hg > orthanc-python
diff Sources/ICallbackRegistration.cpp @ 119:cf6decdf9e15
wrapped new SDK callback: orthanc.RegisterStorageCommitmentScpCallback()
author | Alain Mazy <am@osimis.io> |
---|---|
date | Mon, 28 Aug 2023 18:30:42 +0200 |
parents | 65ec5597ec70 |
children | 566df919b286 71d305c29cfa |
line wrap: on
line diff
--- a/Sources/ICallbackRegistration.cpp Mon Aug 28 16:44:41 2023 +0200 +++ b/Sources/ICallbackRegistration.cpp Mon Aug 28 18:30:42 2023 +0200 @@ -58,6 +58,46 @@ } +PyObject *ICallbackRegistration::Apply2(ICallbackRegistration& registration, + PyObject* args, + PyObject*& singletonCallback1, + PyObject*& singletonCallback2, + const std::string& details) +{ + // https://docs.python.org/3/extending/extending.html#calling-python-functions-from-c + PyObject* callback1 = NULL; + PyObject* callback2 = NULL; + + if (!PyArg_ParseTuple(args, "OO", &callback1, &callback2) || + callback1 == NULL || callback2 == NULL) + { + const std::string message = "Expected two callback functions to register " + details; + PyErr_SetString(PyExc_ValueError, message.c_str()); + return NULL; + } + else if (singletonCallback1 != NULL || singletonCallback2 != NULL) + { + const std::string message = "Can only register once for " + details; + PyErr_SetString(PyExc_RuntimeError, message.c_str()); + return NULL; + } + else + { + OrthancPlugins::LogInfo("Registering callbacks " + details); + registration.Register(); + + singletonCallback1 = callback1; + Py_XINCREF(singletonCallback1); + + singletonCallback2 = callback2; + Py_XINCREF(singletonCallback2); + + Py_INCREF(Py_None); + return Py_None; + } +} + + void ICallbackRegistration::Unregister(PyObject*& singletonCallback) { PythonLock lock;