Mercurial > hg > orthanc-python
annotate CodeAnalysis/Enumeration.mustache @ 166:6fada29b6759
updated copyright, as Orthanc Team now replaces Osimis
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 30 May 2024 22:27:45 +0200 |
parents | 71d305c29cfa |
children | c8de83fe7faa |
rev | line source |
---|---|
0 | 1 /** |
2 * Python plugin for Orthanc | |
166
6fada29b6759
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
155
diff
changeset
|
3 * Copyright (C) 2020-2023 Osimis S.A., Belgium |
6fada29b6759
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
155
diff
changeset
|
4 * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium |
155
71d305c29cfa
updated year to 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
131
diff
changeset
|
5 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
0 | 6 * |
7 * This program is free software: you can redistribute it and/or | |
8 * modify it under the terms of the GNU Affero General Public License | |
9 * as published by the Free Software Foundation, either version 3 of | |
10 * the License, or (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, but | |
13 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Affero General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Affero General Public License | |
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 **/ | |
20 | |
21 | |
22 typedef struct | |
23 { | |
24 PyObject_HEAD | |
25 } sdk_{{name}}_Object; | |
26 | |
27 | |
28 /** | |
29 * Static global structure => the fields that are beyond the last | |
30 * initialized field are set to zero. | |
31 * https://stackoverflow.com/a/11152199/881731 | |
32 **/ | |
33 static PyTypeObject sdk_{{name}}_Type = { | |
34 PyVarObject_HEAD_INIT(NULL, 0) | |
35 "orthanc.{{short_name}}", /* tp_name */ | |
36 sizeof(sdk_{{name}}_Object), /* tp_basicsize */ | |
37 }; | |
38 | |
39 | |
40 void Register{{name}}Enumeration(PyObject* module) | |
41 { | |
42 sdk_{{name}}_Type.tp_new = PyType_GenericNew; | |
43 sdk_{{name}}_Type.tp_flags = Py_TPFLAGS_DEFAULT; | |
44 sdk_{{name}}_Type.tp_doc = "Generated from C enumeration OrthancPlugin{{name}}"; | |
45 | |
46 sdk_{{name}}_Type.tp_dict = PyDict_New(); | |
47 | |
48 if (PyType_Ready(&sdk_{{name}}_Type) < 0) | |
49 { | |
50 OrthancPlugins::LogError("Cannot register Python enumeration: {{name}}"); | |
51 ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); | |
52 } | |
53 | |
54 /** | |
55 * Declare constants here (static members = class attributes) | |
56 * https://stackoverflow.com/a/8017906/881731 | |
57 * | |
58 * "Static and class methods can be defined in tp_methods by adding | |
59 * METH_STATIC or METH_CLASS to the ml_flags field of the | |
60 * PyMethodDef structure. This is equivalent to @staticmethod and | |
61 * @classmethod decorators." | |
62 * | |
63 * "Class attributes can be added by setting the tp_dict to a | |
64 * dictionary with these attributes before calling PyType_Ready() | |
65 * (in your module initialization function)." | |
66 **/ | |
67 | |
68 {{#values}} | |
128
5b59ebc267e1
fixed leaks in the initialization of the enums
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
101
diff
changeset
|
69 { |
5b59ebc267e1
fixed leaks in the initialization of the enums
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
101
diff
changeset
|
70 PyObject* tmp = PyLong_FromLong({{value}}); |
5b59ebc267e1
fixed leaks in the initialization of the enums
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
101
diff
changeset
|
71 PyDict_SetItemString(sdk_{{name}}_Type.tp_dict, "{{key}}", tmp); |
5b59ebc267e1
fixed leaks in the initialization of the enums
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
101
diff
changeset
|
72 Py_DECREF(tmp); |
5b59ebc267e1
fixed leaks in the initialization of the enums
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
101
diff
changeset
|
73 } |
5b59ebc267e1
fixed leaks in the initialization of the enums
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
101
diff
changeset
|
74 |
0 | 75 {{/values}} |
76 | |
77 Py_INCREF(&sdk_{{name}}_Type); | |
78 if (PyModule_AddObject(module, "{{short_name}}", (PyObject *)&sdk_{{name}}_Type) < 0) | |
79 { | |
80 OrthancPlugins::LogError("Cannot register Python enumeration: {{name}}"); | |
81 Py_DECREF(&sdk_{{name}}_Type); | |
82 ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); | |
83 } | |
84 } |