X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Flib%2Fpythonlib.c;h=3c6f6723104bccb00e23898bcb8ddfd710abfa7e;hb=5450f5e38d6dd94600c7c35fedf7f9ccea3e7adb;hp=9568ca91a43888a7bd592bf4895e2abffcf29e97;hpb=217e5ed47147cd420ed0799a96868a561bfd6b57;p=bacula%2Fbacula diff --git a/bacula/src/lib/pythonlib.c b/bacula/src/lib/pythonlib.c index 9568ca91a4..3c6f672310 100644 --- a/bacula/src/lib/pythonlib.c +++ b/bacula/src/lib/pythonlib.c @@ -43,18 +43,11 @@ #undef _POSIX_C_SOURCE #include +#include "pythonlib.h" + /* Forward referenced subroutines */ static void init_python_lock(); static void term_python_lock(); -void lock_python(); -void unlock_python(); - -extern char *configfile; - -/* Imported subroutines */ -//extern PyMethodDef JobMethods[]; -extern PyObject *job_getattr(PyObject *self, char *attrname); -extern int job_setattr(PyObject *self, char *attrname, PyObject *value); static PyObject *bacula_module = NULL; /* We create this */ static PyObject *StartUp_module = NULL; /* We import this */ @@ -80,8 +73,8 @@ static char my_version[] = VERSION " " BDATE; /* * This is a Bacula Job type as defined in Python. We store a pointer - * to the jcr. That is all we need, but the user's script may keep - * local data attached to this. + * to the jcr. That is all we need, but the user's script may keep + * local data attached to this. */ typedef struct s_JobObject { PyObject_HEAD @@ -102,32 +95,30 @@ JCR *get_jcr_from_PyObject(PyObject *self) return ((JobObject *)self)->jcr; } - /* Start the interpreter */ -void init_python_interpreter(const char *progname, const char *scripts, - const char *module) +void init_python_interpreter(init_python_interpreter_args *args) { char buf[MAXSTRING]; - if (!scripts || scripts[0] == 0) { - Dmsg1(100, "No script dir. prog=%s\n", module); + if (!args->scriptdir || args->scriptdir[0] == 0) { + Dmsg1(100, "No script dir. prog=%s\n", args->modulename); return; } - Dmsg2(100, "Script dir=%s prog=%s\n", scripts, module); + Dmsg2(100, "Script dir=%s prog=%s\n", args->scriptdir, args->modulename); - Py_SetProgramName((char *)progname); + Py_SetProgramName((char *)args->progname); Py_Initialize(); PyEval_InitThreads(); bacula_module = Py_InitModule("bacula", BaculaMethods); PyModule_AddStringConstant(bacula_module, "Name", my_name); PyModule_AddStringConstant(bacula_module, "Version", my_version); - PyModule_AddStringConstant(bacula_module, "ConfigFile", configfile); - PyModule_AddStringConstant(bacula_module, "WorkingDir", (char *)working_directory); + PyModule_AddStringConstant(bacula_module, "ConfigFile", (char *)args->configfile); + PyModule_AddStringConstant(bacula_module, "WorkingDir", (char *)args->workingdir); if (!bacula_module) { Jmsg0(NULL, M_ERROR_TERM, 0, _("Could not initialize Python\n")); } bsnprintf(buf, sizeof(buf), "import sys\n" - "sys.path.append('%s')\n", scripts); + "sys.path.append('%s')\n", args->scriptdir); if (PyRun_SimpleString(buf) != 0) { Jmsg1(NULL, M_ERROR_TERM, 0, _("Could not Run Python string %s\n"), buf); } @@ -137,17 +128,17 @@ void init_python_interpreter(const char *progname, const char *scripts, JobType.tp_basicsize = sizeof(JobObject); JobType.tp_flags = Py_TPFLAGS_DEFAULT; JobType.tp_doc = "Bacula Job object"; - JobType.tp_getattr = job_getattr; - JobType.tp_setattr = job_setattr; + JobType.tp_getattr = args->job_getattr; + JobType.tp_setattr = args->job_setattr; if (PyType_Ready(&JobType) != 0) { Jmsg0(NULL, M_ERROR_TERM, 0, _("Could not initialize Python Job type.\n")); PyErr_Print(); } - StartUp_module = PyImport_ImportModule((char *)module); + StartUp_module = PyImport_ImportModule((char *)args->modulename); if (!StartUp_module) { Emsg2(M_ERROR, 0, _("Could not import Python script %s/%s. Python disabled.\n"), - scripts, module); + args->scriptdir, args->modulename); if (PyErr_Occurred()) { PyErr_Print(); Dmsg0(000, "Python Import error.\n"); @@ -157,7 +148,6 @@ void init_python_interpreter(const char *progname, const char *scripts, init_python_lock(); } - void term_python_interpreter() { if (StartUp_module) { @@ -198,7 +188,6 @@ static PyObject *bacula_write(PyObject *self, PyObject *args) return Py_None; } - /* * Check that a method exists and is callable. */ @@ -359,7 +348,6 @@ void unlock_python() } } - #else /* @@ -368,8 +356,5 @@ void unlock_python() * problems even if it is not configured. */ int generate_daemon_event(JCR *jcr, const char *event) { return 0; } -void init_python_interpreter(const char *progname, const char *scripts, - const char *module) { } -void term_python_interpreter() { } #endif /* HAVE_PYTHON */