int PyCOMPSDict_set(PyObject *self, PyObject *key, PyObject *val) { char *ckey; COMPS_Object *ret = NULL; for (unsigned i = 0; i < _INFO_->item_types_len; i++) { if (Py_TYPE(val) != _INFO_->itemtypes[i]) continue; if (_INFO_->in_convert_funcs[i]) { ret = _INFO_->in_convert_funcs[i](val); break; } } if (__pycomps_stringable_to_char(key, &ckey)) return -1; if (!ret && val) { PyErr_Format(PyExc_TypeError, "Cannot set %s to %s", Py_TYPE(val)->tp_name, Py_TYPE(self)->tp_name); free(ckey); return -1; } else if (val) comps_objdict_set_x(_DICT_->dict, ckey, ret); else if (!val) comps_objdict_unset(_DICT_->dict, ckey); free(ckey); return 0; }
int pycomps_group_boolattr_setter(PyObject *self, PyObject *val, void *closure) { long tmp; COMPS_Object *tmp_prop; if (!val) { PyErr_Format(PyExc_TypeError, "Can't delete %s", (char*)closure); return -1; } if (val && !PyBool_Check(val)) { PyErr_SetString(PyExc_TypeError, "Not bool object"); return -1; } tmp = (val == Py_True)?1:0; tmp_prop = (COMPS_Object*) comps_num(tmp); comps_objdict_set_x(((PyCOMPS_Group*)self)->group->properties, (char*)closure, tmp_prop); return 0; }