29 #ifndef GDALPYTHON_H_INCLUDED
30 #define GDALPYTHON_H_INCLUDED
34 bool GDALPythonInitialize();
36 void GDALPythonFinalize();
44 typedef struct _object PyObject;
45 typedef size_t Py_ssize_t;
47 extern int (*Py_IsInitialized)(void);
48 extern void (*Py_SetProgramName)(
const char*);
49 extern PyObject* (*PyBuffer_FromReadWriteMemory)(
void*, size_t);
50 extern PyObject* (*PyObject_Type)(PyObject*);
51 extern int (*PyObject_IsInstance)(PyObject*, PyObject*);
52 extern PyObject* (*PyTuple_New)(size_t);
53 extern PyObject* (*PyBool_FromLong)(long);
54 extern PyObject* (*PyInt_FromLong)(long);
55 extern long (*PyInt_AsLong)(PyObject *);
56 extern PyObject* (*PyLong_FromLongLong)(
GIntBig);
57 extern GIntBig (*PyLong_AsLongLong)(PyObject *);
58 extern PyObject* (*PyFloat_FromDouble)(double);
59 extern double (*PyFloat_AsDouble)(PyObject*);
60 extern PyObject* (*PyObject_Call)(PyObject*, PyObject*, PyObject*);
61 extern PyObject* (*PyObject_GetIter)(PyObject*);
62 extern PyObject* (*PyIter_Next)(PyObject*);
63 extern void (*Py_IncRef)(PyObject*);
64 extern void (*Py_DecRef)(PyObject*);
65 extern PyObject* (*PyErr_Occurred)(void);
66 extern void (*PyErr_Print)(void);
68 extern PyObject* (*Py_CompileString)(
const char*,
const char*, int);
69 extern PyObject* (*PyImport_ExecCodeModule)(
const char*, PyObject*);
70 extern int (*PyObject_HasAttrString)(PyObject*,
const char*);
71 extern PyObject* (*PyObject_GetAttrString)(PyObject*,
const char*);
72 extern int (*PyObject_SetAttrString)(PyObject*,
const char*, PyObject*);
73 extern int (*PyTuple_SetItem)(PyObject *, size_t, PyObject *);
74 extern void (*PyObject_Print)(PyObject*,FILE*,int);
76 extern Py_ssize_t (*PyBytes_Size)(PyObject *);
77 extern const char* (*PyBytes_AsString)(PyObject*);
78 extern PyObject* (*PyBytes_FromStringAndSize)(
const void*, size_t);
80 extern PyObject* (*PyString_FromStringAndSize)(
const void*, size_t);
81 extern const char* (*PyString_AsString)(PyObject*);
83 extern PyObject* (*PyUnicode_FromString)(
const char*);
84 extern PyObject* (*PyUnicode_AsUTF8String)(PyObject *);
85 extern PyObject* (*PyImport_ImportModule)(
const char*);
86 extern int (*PyCallable_Check)(PyObject*);
87 extern PyObject* (*PyDict_New)(void);
88 extern int (*PyDict_SetItemString)(PyObject *p,
const char *key,
90 extern int (*PyDict_Next)(PyObject *p,
size_t *, PyObject **, PyObject **);
91 extern PyObject* (*PyDict_GetItemString)(PyObject *p,
const char *key);
92 extern PyObject* (*PyList_New)(Py_ssize_t);
93 extern int (*PyList_SetItem)(PyObject *, Py_ssize_t , PyObject *);
94 extern int (*PyArg_ParseTuple)(PyObject *,
const char *, ...);
96 extern int (*PySequence_Check)(PyObject *o);
97 extern Py_ssize_t (*PySequence_Size)(PyObject *o);
98 extern PyObject* (*PySequence_GetItem)(PyObject *o, Py_ssize_t i);
100 extern void (*PyErr_Fetch)(PyObject **poPyType, PyObject **poPyValue,
101 PyObject **poPyTraceback);
102 extern void (*PyErr_Clear)(void);
103 extern const char* (*Py_GetVersion)(void);
108 char big_enough[256];
110 extern int (*PyBuffer_FillInfo)(Py_buffer *view, PyObject *obj,
void *buf,
111 size_t len,
int readonly,
int infoflags);
112 extern PyObject* (*PyMemoryView_FromBuffer)(Py_buffer *view);
115 typedef PyObject* (*PyCFunction)(PyObject*, PyObject*, PyObject*);
117 typedef struct PyMethodDef PyMethodDef;
121 PyCFunction
function;
125 extern PyObject* (*Py_InitModule4)(
const char*,
const PyMethodDef*,
const char*, PyObject*, int);
127 extern PyObject * (*PyModule_Create2)(
struct PyModuleDef*, int);
129 #define PYTHON_API_VERSION 1013
132 #define METH_VARARGS 0x0001
133 #define METH_KEYWORDS 0x0002
135 #define _PyObject_HEAD_EXTRA
139 Py_ssize_t ob_refcnt;
143 #define PyObject_HEAD PyObject ob_base;
145 #define _PyObject_EXTRA_INIT
147 #define PyObject_HEAD_INIT(type) \
148 { _PyObject_EXTRA_INIT \
152 #define PyModuleDef_HEAD_INIT { \
153 PyObject_HEAD_INIT(nullptr) \
159 typedef struct PyModuleDef_Base {
161 PyObject* (*m_init)(void);
166 typedef void* traverseproc;
167 typedef void* inquiry;
168 typedef void* freefunc;
170 typedef struct PyModuleDef{
171 PyModuleDef_Base m_base;
175 const PyMethodDef *m_methods;
176 struct PyModuleDef_Slot* m_slots;
177 traverseproc m_traverse;
182 #define Py_file_input 257
184 typedef int PyGILState_STATE;
187 bool m_bExclusiveLock;
188 PyGILState_STATE m_eState = 0;
192 explicit GIL_Holder(
bool bExclusiveLock);
193 virtual ~GIL_Holder();
196 CPLString GetString(PyObject* obj,
bool bEmitError =
true);
198 bool ErrOccurredEmitCPLError();