134
134
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOO:RhythmDBEntry.set", kwlist, &py_entry, &py_propid, &py_value))
136
136
if (pyg_boxed_check(py_entry, RHYTHMDB_TYPE_ENTRY))
137
entry = pyg_boxed_get(py_entry, RhythmDBEntry);
137
entry = pyg_boxed_get(py_entry, RhythmDBEntry);
139
PyErr_SetString(PyExc_TypeError, "entry should be a RhythmDBEntry");
139
PyErr_SetString(PyExc_TypeError, "entry should be a RhythmDBEntry");
142
142
if (pyg_enum_get_value(RHYTHMDB_TYPE_PROP_TYPE, py_propid, (gint *)&propid))
145
145
prop_type = rhythmdb_get_property_type (RHYTHMDB(self->obj), propid);
146
146
g_value_init(&value, prop_type);
150
150
s = g_strdup_printf ("could not convert argument from type '%s' (%d) to correct type '%s'",
151
g_type_name (pyg_type_from_object (py_value)),
152
pyg_type_from_object (py_value),
153
g_type_name (prop_type));
151
g_type_name (pyg_type_from_object (py_value)),
152
(int)pyg_type_from_object (py_value),
153
g_type_name (prop_type));
154
154
PyErr_SetString(PyExc_TypeError, s);
171
171
GPtrArray *array;
173
173
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:RhythmDBQueryResults.add_results", kwlist, &py_entries))
176
176
array = g_ptr_array_new();
177
177
size = PyList_Size(py_entries);
178
178
for (i = 0; i < size; i++) {
180
RhythmDBEntry *entry;
180
RhythmDBEntry *entry;
182
py_entry = PyList_GetItem(py_entries, i);
183
if (!pyg_boxed_check(py_entry, RHYTHMDB_TYPE_ENTRY)) {
184
g_ptr_array_free(array, FALSE);
182
py_entry = PyList_GetItem(py_entries, i);
183
if (!pyg_boxed_check(py_entry, RHYTHMDB_TYPE_ENTRY)) {
184
g_ptr_array_free(array, FALSE);
188
188
entry = pyg_boxed_get(py_entry, RhythmDBEntry);
189
g_ptr_array_add(array, entry);
189
g_ptr_array_add(array, entry);
192
192
rhythmdb_query_results_add_results (RHYTHMDB_QUERY_RESULTS(self->obj), array);
268
270
/* verify arguments' integrity */
269
if (!PyCallable_Check (data->func)) {
270
PyErr_SetString (PyExc_TypeError, "func must be callable");
275
271
if (!pyg_boxed_check(py_query, RHYTHMDB_TYPE_QUERY)) {
276
272
PyErr_SetString(PyExc_TypeError, "query should be a RhythmDBQuery");
281
Py_INCREF (data->func);
282
Py_INCREF (data->data);
277
if (data->func != NULL && !PyCallable_Check (data->func)) {
278
PyErr_SetString (PyExc_TypeError, "func must be callable");
283
Py_XINCREF (data->func);
284
Py_XINCREF (data->data);
284
286
if (data->func) {
285
287
query_model = rhythmdb_query_model_new (RHYTHMDB (self->obj), pyg_boxed_get (py_query, RhythmDBQuery),
545
547
RhythmDBEntry *entry = NULL;
547
549
if (!PyArg_ParseTupleAndKeywords(args, kwargs,"Os:RhythmDB.entry_request_extra_metadata", kwlist, &py_entry, &property_name))
549
551
if (pyg_boxed_check(py_entry, RHYTHMDB_TYPE_ENTRY))
550
entry = pyg_boxed_get(py_entry, RhythmDBEntry);
552
entry = pyg_boxed_get(py_entry, RhythmDBEntry);
552
PyErr_SetString(PyExc_TypeError, "entry should be a RhythmDBEntry");
554
PyErr_SetString(PyExc_TypeError, "entry should be a RhythmDBEntry");
556
558
ret = rhythmdb_entry_request_extra_metadata(RHYTHMDB_RHYTHMDB(self->obj), entry, property_name);
644
646
rhythmdb_emit_entry_extra_metadata_notify(RHYTHMDB_RHYTHMDB(self->obj), entry, property_name, &val);
645
647
g_value_unset (&val);
647
649
Py_INCREF(Py_None);
653
override rhythmdb_query_new noargs
656
_wrap_rhythmdb_query_new(PyGObject *self)
660
ret = rhythmdb_query_parse(RHYTHMDB_RHYTHMDB(self->obj), RHYTHMDB_QUERY_END);
662
/* pyg_boxed_new handles NULL checking */
663
return pyg_boxed_new(RHYTHMDB_TYPE_QUERY, ret, TRUE, TRUE);
666
override rhythmdb_query_append kwargs
669
_wrap_rhythmdb_query_append (PyGObject *self, PyObject *args, PyObject *kwargs)
672
RhythmDBQuery *query;
675
if (PyTuple_Size (args) < 2) {
676
PyErr_SetString (PyExc_TypeError, "must have at least two arguments");
680
obj = PyTuple_GetItem (args, 0);
681
if (obj != NULL && pyg_boxed_check (obj, RHYTHMDB_TYPE_QUERY))
682
query = pyg_boxed_get (obj, RhythmDBQuery);
684
PyErr_SetString (PyExc_TypeError, "query should be a RhythmDBQuery");
688
for (i = 1; i < PyTuple_Size (args); i++) {
689
PyObject *criteria, *py_type, *obj;
690
RhythmDBQueryType type;
691
RhythmDBPropType propid = -1;
695
criteria = PyTuple_GetItem (args, i);
696
if (!PySequence_Check (criteria)) {
697
PyErr_SetString (PyExc_TypeError, "criteria object is not a sequence");
701
py_type = PySequence_GetItem (criteria, 0);
702
if (py_type == NULL) {
703
PyErr_SetString (PyExc_TypeError, "criteria sequence has no elements");
706
if (pyg_enum_get_value (RHYTHMDB_TYPE_QUERY_TYPE, py_type, (gpointer)&type)) {
707
PyErr_SetString (PyExc_TypeError, "criteria operator is invalid");
712
case RHYTHMDB_QUERY_END:
713
case RHYTHMDB_QUERY_DISJUNCTION:
715
case RHYTHMDB_QUERY_SUBQUERY:
716
if (PySequence_Size (args) != 2) {
717
PyErr_SetString (PyExc_TypeError, "wrong number arguments for criteria");
719
g_value_init (&value, G_TYPE_POINTER);
720
obj = PySequence_GetItem (criteria, 1);
721
if (obj && pyg_boxed_check (obj, RHYTHMDB_TYPE_QUERY)) {
722
g_value_set_pointer (&value, pyg_boxed_get ( obj, RhythmDBQuery));
725
g_value_unset (&value);
726
PyErr_SetString (PyExc_TypeError, "query should be a RhythmDBQuery");
732
if (PySequence_Size (criteria) != 3) {
733
PyErr_SetString (PyExc_TypeError, "wrong number arguments for criteria");
737
obj = PySequence_GetItem (criteria, 1);
738
if (obj == NULL || pyg_enum_get_value (RHYTHMDB_TYPE_PROP_TYPE, obj, (gpointer)&propid)) {
740
PyErr_SetString (PyExc_TypeError, "criteria propid is of wrong type");
745
obj = PySequence_GetItem (criteria, 2);
746
gtype = pyg_type_from_object ((PyObject *)obj->ob_type);
748
PyErr_SetString (PyExc_TypeError, "can't map metadata to GType system");
751
g_value_init (&value, gtype);
752
if (pyg_value_from_pyobject (&value, obj) < 0) {
754
PyErr_SetString (PyExc_TypeError, "could not access value for criteria");
761
rhythmdb_query_append_params (RHYTHMDB_RHYTHMDB (self->obj), query, type, propid, &value);
762
if (G_IS_VALUE (&value))
763
g_value_unset (&value);