xref: /unit/src/python/nxt_python.h (revision 1980:43553aa72111)
11592Smax.romanov@nginx.com 
21592Smax.romanov@nginx.com /*
31592Smax.romanov@nginx.com  * Copyright (C) NGINX, Inc.
41592Smax.romanov@nginx.com  */
51592Smax.romanov@nginx.com 
61592Smax.romanov@nginx.com #ifndef _NXT_PYTHON_H_INCLUDED_
71592Smax.romanov@nginx.com #define _NXT_PYTHON_H_INCLUDED_
81592Smax.romanov@nginx.com 
91592Smax.romanov@nginx.com 
101592Smax.romanov@nginx.com #include <Python.h>
111624Smax.romanov@nginx.com #include <nxt_main.h>
121592Smax.romanov@nginx.com #include <nxt_unit.h>
131592Smax.romanov@nginx.com 
141680Smax.romanov@nginx.com #define NXT_PYTHON_VER(maj, min)    ((maj << 24) | (min << 16))
151680Smax.romanov@nginx.com 
161592Smax.romanov@nginx.com 
171624Smax.romanov@nginx.com #if PY_MAJOR_VERSION == 3
181624Smax.romanov@nginx.com #define NXT_PYTHON_BYTES_TYPE       "bytestring"
191624Smax.romanov@nginx.com 
201624Smax.romanov@nginx.com #define PyString_FromStringAndSize(str, size)                                 \
211624Smax.romanov@nginx.com             PyUnicode_DecodeLatin1((str), (size), "strict")
221624Smax.romanov@nginx.com #define PyString_AS_STRING          PyUnicode_DATA
231624Smax.romanov@nginx.com 
241624Smax.romanov@nginx.com #else
251624Smax.romanov@nginx.com #define NXT_PYTHON_BYTES_TYPE       "string"
261624Smax.romanov@nginx.com 
271624Smax.romanov@nginx.com #define PyBytes_FromStringAndSize   PyString_FromStringAndSize
281624Smax.romanov@nginx.com #define PyBytes_Check               PyString_Check
291624Smax.romanov@nginx.com #define PyBytes_GET_SIZE            PyString_GET_SIZE
301624Smax.romanov@nginx.com #define PyBytes_AS_STRING           PyString_AS_STRING
311624Smax.romanov@nginx.com #define PyUnicode_InternInPlace     PyString_InternInPlace
321624Smax.romanov@nginx.com #define PyUnicode_AsUTF8            PyString_AS_STRING
331648Svbart@nginx.com #define PyUnicode_GET_LENGTH        PyUnicode_GET_SIZE
341624Smax.romanov@nginx.com #endif
351624Smax.romanov@nginx.com 
361680Smax.romanov@nginx.com #if PY_VERSION_HEX >= NXT_PYTHON_VER(3, 5)
371624Smax.romanov@nginx.com #define NXT_HAVE_ASGI  1
381624Smax.romanov@nginx.com #endif
391624Smax.romanov@nginx.com 
401872So.canty@f5.com 
411872So.canty@f5.com typedef struct {
421872So.canty@f5.com     PyObject    *application;
431872So.canty@f5.com     nxt_bool_t  asgi_legacy;
441872So.canty@f5.com } nxt_python_target_t;
451872So.canty@f5.com 
461872So.canty@f5.com 
471872So.canty@f5.com typedef struct {
481872So.canty@f5.com     nxt_int_t            count;
491872So.canty@f5.com     nxt_python_target_t  target[0];
501872So.canty@f5.com } nxt_python_targets_t;
511872So.canty@f5.com 
521872So.canty@f5.com 
531872So.canty@f5.com extern nxt_python_targets_t  *nxt_py_targets;
541872So.canty@f5.com 
551592Smax.romanov@nginx.com 
561592Smax.romanov@nginx.com typedef struct {
571592Smax.romanov@nginx.com     nxt_str_t  string;
581592Smax.romanov@nginx.com     PyObject   **object_p;
591592Smax.romanov@nginx.com } nxt_python_string_t;
601592Smax.romanov@nginx.com 
611872So.canty@f5.com 
621681Smax.romanov@nginx.com typedef struct {
63*1918Smax.romanov@nginx.com     int   (*ctx_data_alloc)(void **pdata, int main);
641681Smax.romanov@nginx.com     void  (*ctx_data_free)(void *data);
651681Smax.romanov@nginx.com     int   (*startup)(void *data);
661681Smax.romanov@nginx.com     int   (*run)(nxt_unit_ctx_t *ctx);
671681Smax.romanov@nginx.com     void  (*done)(void);
681681Smax.romanov@nginx.com } nxt_python_proto_t;
691624Smax.romanov@nginx.com 
701681Smax.romanov@nginx.com 
711681Smax.romanov@nginx.com int nxt_python_init_strings(nxt_python_string_t *pstr);
721592Smax.romanov@nginx.com void nxt_python_done_strings(nxt_python_string_t *pstr);
731592Smax.romanov@nginx.com 
741592Smax.romanov@nginx.com void nxt_python_print_exception(void);
751592Smax.romanov@nginx.com 
761681Smax.romanov@nginx.com int nxt_python_wsgi_init(nxt_unit_init_t *init, nxt_python_proto_t *proto);
771592Smax.romanov@nginx.com 
781624Smax.romanov@nginx.com int nxt_python_asgi_check(PyObject *obj);
791681Smax.romanov@nginx.com int nxt_python_asgi_init(nxt_unit_init_t *init, nxt_python_proto_t *proto);
801624Smax.romanov@nginx.com 
811592Smax.romanov@nginx.com 
821592Smax.romanov@nginx.com #endif  /* _NXT_PYTHON_H_INCLUDED_ */
83