/*
* Copyright (C) 2019 Weber Yann
*
* This file is part of PyFCGI.
*
* PyFCGI 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
* any later version.
*
* PyFCGI 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 PyFCGI. If not, see .
*/
#ifndef _PYUTILS__H__
#define _PYUTILS__H__
#include "config.h"
#include
#include /* fcgi library; put it first*/
#define PY_SSIZE_T_CLEAN
#include
#include "logger.h"
#include "python_pyfcgi.h"
/* Imports from libpyfcgi python module header */
extern PyObject* response_status;
extern PyObject* response_headers;
extern PyObject* libpyfcgi_self;
/**@brief Call Py_Initialize & update_python_path
*/
void pyinit();
/**@brief Add . to the embed pythonpath
* @deprecated Py_SetPath breaks Py_GetPrefix()... now
*/
void update_python_path();
/**@brief Fetch stdout & stderr python flush() function
* @param PyObject* pystdout_flush
* @param PyObject* pystderr_flush
*/
void fetch_pyflush(PyObject**, PyObject**);
/**@brief Create two pipes for stdout & stderr
* @ingroup worker_process
* @params int[2] pystdout
* @params int[2] pystderr
*/
void update_python_fd(int[2], int[2]);
/**@brief Clear then update python sys.environ using current FCI environ
* @ingroup worker_process
* @note The environ has to be set without a call to os.putenv, the problem
* is that the os.environ is a special mapping calling putenv on setitem...
* For these reason the os.environ will be replaced by a new dict instance for
* each request...
* @param PyObject* os module
* @return Python env dict
*/
PyObject* update_pyenv(PyObject*, char**);
/**@brief Import & return the python entrypoint callable
* from PyFCGI_conf.py_entrymod & PyFCGI_conf.py_entryfun */
PyObject* import_entrypoint();
/**@brief Return the start_response() python function for pep333 worker */
PyObject* get_start_response();
/**@brief Logs an exception */
void log_expt(int priority);
/**@brief Set python version
* @param char[16] version buffer */
void pyfcgi_python_version(char[16]);
/**@brief Import os module and exit on error
* @return Imported module */
PyObject* python_osmod();
#endif