root/trunk/midgard/apis/python/py_midgard_object_parameter.c

Revision 16508, 4.5 kB (checked in by piotras, 6 months ago)

Defined NO_IMPORT_PYGOBJECT...

Line 
1 /*
2  * Copyright (C) 2007, 2008 Piotr Pokora <piotrek.pokora@gmail.com>
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU Lesser General Public License as published
6  * by the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19 #ifdef HAVE_CONFIG_H
20 #include "config.h"
21 #endif
22
23 #define NO_IMPORT_PYGOBJECT
24 #include "py_midgard.h"
25
26 #define PARAM_DEBUG(__name) \
27         CHECK_MGD; \
28         const gchar *cname = NULL; \
29         if(self) { \
30                 CLASS_METHOD_DEBUG(G_OBJECT_TYPE_NAME(G_OBJECT(self->obj)), __name); \
31         } \
32         if(cname == NULL) \
33                 CLASS_METHOD_DEBUG("midgard_dbobject", __name);
34
35 #define _FREE_PARAMETERS \
36                 guint _i; \
37         for(_i = 0; _i < n_params; _i++) { \
38                                 g_value_unset(&params[_i].value); \
39                         } \
40         g_free(params);
41
42 PyObject *
43 pymidgard_object_get_parameter(PyGObject *self, PyObject *args)
44 {
45         PARAM_DEBUG("get_parameter");
46         const gchar *domain = NULL, *name = NULL;
47
48         if(!PyArg_ParseTuple(args, "ss", &domain, &name))
49                 return NULL;
50
51         MgdObject *mobject = MIDGARD_OBJECT(self->obj);
52
53         const GValue *gval =
54                 midgard_object_get_parameter(mobject, domain, name);
55
56         if(gval == NULL)
57                 Py_RETURN_NONE;
58
59         PyObject *ret = pyg_value_as_pyobject(gval, FALSE);
60
61         return ret;
62 }
63
64 PyObject *
65 pymidgard_object_set_parameter(PyGObject *self, PyObject *args)
66 {
67         PARAM_DEBUG("set_parameter");
68         const gchar *domain = NULL, *name = NULL;
69         PyObject *pvalue;
70         gboolean lang = FALSE;
71         GValue *cvalue = NULL;
72
73         if(!PyArg_ParseTuple(args, "ss|O|b", &domain, &name, &pvalue, &lang))
74                                 return NULL;
75
76         MgdObject *mobject = MIDGARD_OBJECT(self->obj);
77        
78         if(pvalue != NULL) {
79                
80                 GValue gval = gvalue_from_pyobject(pvalue);
81                 pyg_value_from_pyobject(&gval, pvalue);
82                 cvalue = g_new0(GValue, 1);
83                 g_value_init(cvalue, G_VALUE_TYPE(&gval));
84                 g_value_copy((const GValue *) &gval, cvalue);
85                 g_value_unset(&gval);
86         }
87        
88         if(midgard_object_set_parameter(mobject, domain, name, cvalue, lang))
89                 Py_RETURN_TRUE;
90
91         Py_RETURN_FALSE;
92 }
93
94 PyObject *
95 pymidgard_object_delete_parameters(PyGObject *self, PyObject *args)
96 {
97         PARAM_DEBUG("delete_parameters");
98
99         PyObject *props;
100        
101         if(!PyArg_ParseTuple(args, "O", &props))
102                 return NULL;
103
104         MgdObject *mobject = MIDGARD_OBJECT(self->obj);
105
106         guint n_params;
107         GParameter *params = _py_midgard_parameters_from_args(props, &n_params);
108        
109         gboolean rv = midgard_object_delete_parameters(mobject, n_params, params);
110
111         _FREE_PARAMETERS;
112
113         if(rv)
114                 Py_RETURN_TRUE;
115
116         Py_RETURN_FALSE;
117 }
118
119 PyObject *
120 pymidgard_object_purge_parameters(PyGObject *self, PyObject *args)
121 {
122         PARAM_DEBUG("purge_parameters");
123
124         PyObject *props;
125         if(!PyArg_ParseTuple(args, "O", &props))
126                 return NULL;
127
128         MgdObject *mobject = MIDGARD_OBJECT(self->obj);
129
130         guint n_params;
131         GParameter *params = _py_midgard_parameters_from_args(props, &n_params);
132        
133         gboolean rv = midgard_object_purge_parameters(mobject, n_params, params);
134
135         _FREE_PARAMETERS;
136
137         if(rv)
138                 Py_RETURN_TRUE;
139
140         Py_RETURN_FALSE;
141 }
142
143 PyObject *
144 pymidgard_object_list_parameters(PyGObject *self, PyObject *args)
145 {
146         PARAM_DEBUG("list_parameters");
147
148         gchar *domain = NULL;
149         guint i = 0;
150        
151         if(!PyArg_ParseTuple(args, "|s", &domain))
152                 return NULL;
153
154         MgdObject *mobject = MIDGARD_OBJECT(self->obj);
155
156         MgdObject **objects = midgard_object_list_parameters(mobject, domain);
157
158         if(!objects)
159                 return PyTuple_New(i);
160
161         while(objects[i] != NULL)
162                 i++;
163        
164         PyObject *list = PyTuple_New(i);
165        
166         OBJECTS2LIST(objects, list);
167        
168         g_free(objects);
169        
170         return list;
171 }
172
173 PyObject *
174 pymidgard_object_find_parameters(PyGObject *self, PyObject *args)
175 {
176         PARAM_DEBUG("find_parameters");
177
178         PyObject *props;
179
180         if(!PyArg_ParseTuple(args, "O", &props))
181                 return NULL;
182        
183         MgdObject *mobject = MIDGARD_OBJECT(self->obj);
184
185         guint n_params, i = 0;
186         GParameter *params = _py_midgard_parameters_from_args(props, &n_params);
187
188         MgdObject **objects = midgard_object_find_parameters(mobject, n_params, params);
189
190         _FREE_PARAMETERS;
191
192         if(!objects)
193                 return PyTuple_New(i);
194
195         while(objects[i] != NULL)
196                 i++;
197        
198         PyObject *list = PyTuple_New(i);
199        
200         OBJECTS2LIST(objects, list);
201        
202         g_free(objects);
203        
204         return list;
205 }
206
Note: See TracBrowser for help on using the browser.