]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/dird/python.c
- Fix non-python prototypes in dummy routines.
[bacula/bacula] / bacula / src / dird / python.c
1 /*
2  * 
3  * Bacula interface to Python for the Director
4  *
5  * Kern Sibbald, November MMIV
6  *
7  *   Version $Id$
8  *
9  */
10
11 /*
12    
13    Copyright (C) 2004 Kern Sibbald
14
15    This program is free software; you can redistribute it and/or
16    modify it under the terms of the GNU General Public License as
17    published by the Free Software Foundation; either version 2 of
18    the License, or (at your option) any later version.
19
20    This program is distributed in the hope that it will be useful,
21    but WITHOUT ANY WARRANTY; without even the implied warranty of
22    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23    General Public License for more details.
24
25    You should have received a copy of the GNU General Public
26    License along with this program; if not, write to the Free
27    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
28    MA 02111-1307, USA.
29
30  */
31
32 #include "bacula.h"
33 #include "dird.h"
34
35 #ifdef HAVE_PYTHON
36 #include <Python.h>
37
38 bool run_module(const char *module);
39
40 PyObject *bacula_get(PyObject *self, PyObject *args);
41 PyObject *bacula_set(PyObject *self, PyObject *args, PyObject *keyw);
42
43 /* Define Bacula entry points */
44 PyMethodDef BaculaMethods[] = {
45     {"get", bacula_get, METH_VARARGS, "Get Bacula variables."},
46     {"set", (PyCFunction)bacula_set, METH_VARARGS|METH_KEYWORDS,
47         "Set Bacula variables."}, 
48     {NULL, NULL, 0, NULL}             /* last item */
49 };
50
51
52 struct s_vars {
53    const char *name;
54    char *fmt;
55 };     
56
57 static struct s_vars vars[] = {
58    { N_("Job"),        "s"},
59    { N_("Dir"),        "s"},
60    { N_("Level"),      "s"},
61    { N_("Type"),       "s"},
62    { N_("JobId"),      "i"},
63    { N_("Client"),     "s"},
64    { N_("NumVols"),    "i"},
65    { N_("Pool"),       "s"},
66    { N_("Storage"),    "s"},
67    { N_("Catalog"),    "s"},
68    { N_("MediaType"),  "s"},
69    { N_("JobName"),    "s"},
70    { N_("JobStatus"),  "s"},
71    
72    { NULL,             NULL}
73 };
74
75 /* Return Bacula variables */
76 PyObject *bacula_get(PyObject *self, PyObject *args)
77 {
78    PyObject *CObject;
79    JCR *jcr;
80    char *item;
81    bool found = false;
82    int i;
83    char buf[10];
84
85    if (!PyArg_ParseTuple(args, "Os:get", &CObject, &item)) {
86       return NULL;
87    }
88    jcr = (JCR *)PyCObject_AsVoidPtr(CObject);
89    for (i=0; vars[i].name; i++) {
90       if (strcmp(vars[i].name, item) == 0) {
91          found = true;
92          break;
93       }
94    }
95    if (!found) {
96       return NULL;
97    }
98    switch (i) {
99    case 0:                            /* Job */
100       return Py_BuildValue(vars[i].fmt, jcr->job->hdr.name);
101    case 1:                            /* Director's name */
102       return Py_BuildValue(vars[i].fmt, my_name);
103    case 2:                            /* level */
104       return Py_BuildValue(vars[i].fmt, job_level_to_str(jcr->JobLevel));
105    case 3:                            /* type */
106       return Py_BuildValue(vars[i].fmt, job_type_to_str(jcr->JobType));
107    case 4:                            /* JobId */
108       return Py_BuildValue(vars[i].fmt, jcr->JobId);
109    case 5:                            /* Client */
110       return Py_BuildValue(vars[i].fmt, jcr->client->hdr.name);
111    case 6:                            /* NumVols */
112       return Py_BuildValue(vars[i].fmt, jcr->NumVols);
113    case 7:                            /* Pool */
114       return Py_BuildValue(vars[i].fmt, jcr->pool->hdr.name);
115    case 8:                            /* Storage */
116       return Py_BuildValue(vars[i].fmt, jcr->store->hdr.name);
117    case 9:
118       return Py_BuildValue(vars[i].fmt, jcr->catalog->hdr.name);
119    case 10:                           /* MediaType */
120       return Py_BuildValue(vars[i].fmt, jcr->store->media_type);
121    case 11:                           /* JobName */
122       return Py_BuildValue(vars[i].fmt, jcr->Job);
123    case 12:                           /* JobStatus */
124       buf[1] = 0;
125       buf[0] = jcr->JobStatus;
126       return Py_BuildValue(vars[i].fmt, buf);
127    }
128    return NULL;
129 }
130
131 /* Set Bacula variables */
132 PyObject *bacula_set(PyObject *self, PyObject *args, PyObject *keyw)
133 {
134    PyObject *CObject;
135    JCR *jcr;
136    char *msg = NULL;
137    char *VolumeName = NULL;
138    static char *kwlist[] = {"jcr", "JobReport", "VolumeName", NULL};
139    if (!PyArg_ParseTupleAndKeywords(args, keyw, "O|ss:set", kwlist, 
140         &CObject, &msg, &VolumeName)) {
141       return NULL;
142    }
143    jcr = (JCR *)PyCObject_AsVoidPtr(CObject);
144
145    if (msg) {
146       Jmsg(jcr, M_INFO, 0, "%s", msg);
147    }
148    if (VolumeName) {
149       pm_strcpy(jcr->VolumeName, VolumeName);
150    }
151    return Py_BuildValue("i", 1);
152 }
153
154 #endif /* HAVE_PYTHON */