Mercurial > hg > orthanc-python
comparison Sources/ICallbackRegistration.cpp @ 63:32de70a1e4c7
New functions from the SDK wrapped in Python: CreateDicom, RegisterFindCallback, RegisterMoveCallback
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 10 Jun 2021 18:19:27 +0200 |
parents | |
children | eb6ac5a801d1 |
comparison
equal
deleted
inserted
replaced
62:d82eef8c98fc | 63:32de70a1e4c7 |
---|---|
1 /** | |
2 * Python plugin for Orthanc | |
3 * Copyright (C) 2020-2021 Osimis S.A., Belgium | |
4 * | |
5 * This program is free software: you can redistribute it and/or | |
6 * modify it under the terms of the GNU Affero General Public License | |
7 * as published by the Free Software Foundation, either version 3 of | |
8 * the License, or (at your option) any later version. | |
9 * | |
10 * This program is distributed in the hope that it will be useful, but | |
11 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 * Affero General Public License for more details. | |
14 * | |
15 * You should have received a copy of the GNU Affero General Public License | |
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 **/ | |
18 | |
19 | |
20 #include "ICallbackRegistration.h" | |
21 | |
22 #include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" | |
23 #include "PythonLock.h" | |
24 | |
25 PyObject *ICallbackRegistration::Apply(ICallbackRegistration& registration, | |
26 PyObject* args, | |
27 PyObject*& singletonCallback, | |
28 const std::string& details) | |
29 { | |
30 // https://docs.python.org/3/extending/extending.html#calling-python-functions-from-c | |
31 PyObject* callback = NULL; | |
32 | |
33 if (!PyArg_ParseTuple(args, "O", &callback) || | |
34 callback == NULL) | |
35 { | |
36 const std::string message = "Expected a callback function to register one " + details; | |
37 PyErr_SetString(PyExc_ValueError, message.c_str()); | |
38 return NULL; | |
39 } | |
40 else if (singletonCallback != NULL) | |
41 { | |
42 const std::string message = "Can only register one " + details; | |
43 PyErr_SetString(PyExc_RuntimeError, message.c_str()); | |
44 return NULL; | |
45 } | |
46 else | |
47 { | |
48 OrthancPlugins::LogInfo("Registering one " + details); | |
49 registration.Register(); | |
50 | |
51 singletonCallback = callback; | |
52 Py_XINCREF(singletonCallback); | |
53 | |
54 Py_INCREF(Py_None); | |
55 return Py_None; | |
56 } | |
57 } | |
58 | |
59 | |
60 void ICallbackRegistration::Unregister(PyObject*& singletonCallback) | |
61 { | |
62 PythonLock lock; | |
63 | |
64 if (singletonCallback != NULL) | |
65 { | |
66 Py_XDECREF(singletonCallback); | |
67 } | |
68 } |