diff CodeAnalysis/Enumeration.mustache @ 0:7ed502b17b8f

initial commit
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 26 Mar 2020 18:47:01 +0100
parents
children 23f3099bed47
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CodeAnalysis/Enumeration.mustache	Thu Mar 26 18:47:01 2020 +0100
@@ -0,0 +1,77 @@
+/**
+ * Python plugin for Orthanc
+ * Copyright (C) 2017-2020 Osimis S.A., Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Affero General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+
+typedef struct 
+{
+  PyObject_HEAD
+} sdk_{{name}}_Object;
+
+
+/**
+ * Static global structure => the fields that are beyond the last
+ * initialized field are set to zero.
+ * https://stackoverflow.com/a/11152199/881731
+ **/
+static PyTypeObject sdk_{{name}}_Type = {
+  PyVarObject_HEAD_INIT(NULL, 0)
+  "orthanc.{{short_name}}",    /* tp_name */
+  sizeof(sdk_{{name}}_Object), /* tp_basicsize */
+};
+
+
+void Register{{name}}Enumeration(PyObject* module)
+{
+  sdk_{{name}}_Type.tp_new = PyType_GenericNew;
+  sdk_{{name}}_Type.tp_flags = Py_TPFLAGS_DEFAULT;
+  sdk_{{name}}_Type.tp_doc = "Generated from C enumeration OrthancPlugin{{name}}";  
+
+  sdk_{{name}}_Type.tp_dict = PyDict_New();
+  
+  if (PyType_Ready(&sdk_{{name}}_Type) < 0)
+  {
+    OrthancPlugins::LogError("Cannot register Python enumeration: {{name}}");
+    ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
+  }
+
+  /**
+   * Declare constants here (static members = class attributes)
+   * https://stackoverflow.com/a/8017906/881731
+   *
+   * "Static and class methods can be defined in tp_methods by adding
+   * METH_STATIC or METH_CLASS to the ml_flags field of the
+   * PyMethodDef structure. This is equivalent to @staticmethod and
+   * @classmethod decorators."
+   *
+   * "Class attributes can be added by setting the tp_dict to a
+   * dictionary with these attributes before calling PyType_Ready()
+   * (in your module initialization function)."
+   **/
+  
+  {{#values}}
+  PyDict_SetItemString(sdk_{{name}}_Type.tp_dict, "{{key}}", PyLong_FromLong({{value}}));
+  {{/values}}
+
+  Py_INCREF(&sdk_{{name}}_Type);
+  if (PyModule_AddObject(module, "{{short_name}}", (PyObject *)&sdk_{{name}}_Type) < 0)
+  {
+    OrthancPlugins::LogError("Cannot register Python enumeration: {{name}}");
+    Py_DECREF(&sdk_{{name}}_Type);
+    ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
+  }
+}