annotate CodeAnalysis/FunctionBody.mustache @ 179:f49864df6f1f java-code-model

trying Py_BEGIN_ALLOW_THREADS
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 27 Jun 2024 21:53:03 +0200
parents 8382c7dea471
children f34f3a149c22
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 {{#args}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 {{python_type}} {{name}}{{initialization}};
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 {{/args}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5 {{#has_args}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 if (!PyArg_ParseTuple(args, {{tuple_format}}))
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 {
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 PyErr_SetString(PyExc_TypeError, "Bad types for the arguments ({{count_args}} arguments expected)");
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 return NULL;
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 }
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 {{/has_args}}
172
8382c7dea471 created CodeAnalysis/GenerateOrthancSDK.py
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 77
diff changeset
12 {{#args}}{{#check_object_type}}
8382c7dea471 created CodeAnalysis/GenerateOrthancSDK.py
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 77
diff changeset
13 if ({{name}} != Py_None && Py_TYPE({{name}}) != Get{{check_object_type}}Type())
8382c7dea471 created CodeAnalysis/GenerateOrthancSDK.py
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 77
diff changeset
14 {
8382c7dea471 created CodeAnalysis/GenerateOrthancSDK.py
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 77
diff changeset
15 PyErr_SetString(PyExc_TypeError, "Invalid orthanc.{{check_object_type}} object");
8382c7dea471 created CodeAnalysis/GenerateOrthancSDK.py
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 77
diff changeset
16 return NULL;
8382c7dea471 created CodeAnalysis/GenerateOrthancSDK.py
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 77
diff changeset
17 }
8382c7dea471 created CodeAnalysis/GenerateOrthancSDK.py
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 77
diff changeset
18 {{/check_object_type}}{{/args}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 {{#return_long}}
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
20 {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 long value = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
22 {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 {{#args}}{{release}}{{/args}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 return PyLong_FromLong(value);
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 {{/return_long}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 {{#return_static_string}}
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
27 {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 const char* s = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
29 {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 {{#args}}{{release}}{{/args}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31 if (s == NULL)
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 {
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 Py_INCREF(Py_None);
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 return Py_None;
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35 }
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36 else
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 {
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 return PyUnicode_FromString(s);
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39 }
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40 {{/return_static_string}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41 {{#return_dynamic_string}}
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
42 {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43 OrthancPlugins::OrthancString s;
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 s.Assign({{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}}));
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
45 {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 {{#args}}{{release}}{{/args}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 if (s.GetContent() == NULL)
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 {
75
cbfc72a53970 refactoring calls to PythonLock::RaiseException()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
49 PythonLock::RaiseException(OrthancPluginErrorCode_InternalError);
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 return NULL;
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 }
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 else
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53 {
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54 return PyUnicode_FromString(s.GetContent());
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55 }
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56 {{/return_dynamic_string}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
57 {{#return_void}}
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
58 {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
59 {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
60 {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
61 {{#args}}{{release}}{{/args}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
62
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
63 Py_INCREF(Py_None);
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
64 return Py_None;
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
65 {{/return_void}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
66 {{#return_error}}
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
67 {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
68 OrthancPluginErrorCode code = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
69 {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
70 {{#args}}{{release}}{{/args}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
71
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
72 if (code == OrthancPluginErrorCode_Success)
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
73 {
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
74 Py_INCREF(Py_None);
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
75 return Py_None;
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
76 }
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
77 else
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
78 {
75
cbfc72a53970 refactoring calls to PythonLock::RaiseException()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
79 PythonLock::RaiseException(code);
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
80 return NULL;
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 }
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
82 {{/return_error}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
83 {{#return_object}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
84 // This is the case of a constructor
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
85 {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
86 {{return_object}}* obj = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
87 {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
88 {{#args}}{{release}}{{/args}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
89 if (obj == NULL)
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
90 {
75
cbfc72a53970 refactoring calls to PythonLock::RaiseException()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
91 PythonLock::RaiseException(OrthancPluginErrorCode_InternalError);
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92 return NULL;
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
93 }
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
94 else
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
95 {
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 PyObject *argList = Py_BuildValue("Lb", obj, false /* not borrowed */);
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
97 PyObject *python = PyObject_CallObject((PyObject *) &sdk_{{return_object}}_Type, argList);
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98 Py_DECREF(argList);
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
99 return python;
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
100 }
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
101 {{/return_object}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
102 {{#return_bytes}}
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
103 {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
104 OrthancPlugins::MemoryBuffer buffer;
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
105 OrthancPluginErrorCode code = {{c_function}}(OrthancPlugins::GetGlobalContext(), *buffer{{self}}{{call_args}});
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
106 {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
107 {{#args}}{{release}}{{/args}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
108 if (code == OrthancPluginErrorCode_Success)
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
109 {
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
110 return PyBytes_FromStringAndSize(buffer.GetData(), buffer.GetSize());
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
111 }
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
112 else
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
113 {
77
e7ff5efb100d Custom exception "orthanc.OrthancException" is raised instead of "ValueError"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 75
diff changeset
114 PythonLock::RaiseException(code);
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
115 return NULL;
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
116 }
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
117 {{/return_bytes}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
118 {{#return_enumeration}}
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
119 {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
120 {{return_enumeration}} value = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
179
f49864df6f1f trying Py_BEGIN_ALLOW_THREADS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 172
diff changeset
121 {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
0
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
122 {{#args}}{{release}}{{/args}}
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
123 return PyLong_FromLong(value);
7ed502b17b8f initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
124 {{/return_enumeration}}