コード例 #1
0
PyObject *call_setattr(const char *type, PyObject *self, PyObject *name_object, PyObject *value)
{
	const char *name = NULL;
	if (!(name = PyString_AsString(name_object))) return NULL;

	setattr_table::const_iterator position = all_setattr.find(type);
	if (position == all_setattr.end())
	return (PyObject_GenericSetAttr(self, name_object, value) == 0)? Py_BuildValue("") : NULL;

	setattr_map::const_iterator function = position->second.find(name);
	if (function == position->second.end())
	return (PyObject_GenericSetAttr(self, name_object, value) == 0)? Py_BuildValue("") : NULL;

	return (*function->second)(self, name_object, value);
}
コード例 #2
0
ファイル: py_axl_doc.c プロジェクト: ASPLes/libaxl
/** 
 * @brief Implements attribute set operation.
 */
int py_axl_doc_set_attr (PyObject *o, PyObject *attr_name, PyObject *v)
{
	const char      * attr    = NULL;
	PyAxlDoc        * self    = (PyAxlDoc *) o; 
	PyObject        * py_node = NULL;

	/* now implement other attributes */
	if (! PyArg_Parse (attr_name, "s", &attr))
		return -1;

	if (axl_cmp (attr, "root")) {
		if (! PyArg_Parse (v, "O", &py_node))
			return -1;

		/* configure the node */
		axl_doc_set_root (self->doc, py_axl_node_get (py_node));

		/* set the node to not dealloc internal node */
		py_axl_node_set_dealloc (py_node, axl_false);

		return 0;
	}

	/* now implement generic setter */
	return PyObject_GenericSetAttr (o, attr_name, v);
}
コード例 #3
0
static int conflict_setattr(conflict *self, PyObject *attr_name, PyObject *value) {
    // Check and make sure we have a string as attribute name...
    if (PyUnicode_Check(attr_name)) {
        PY_SCIP_SET_PRIORITY(SCIPconflicthdlrSetPriority, self->conflict);
    }
    return PyObject_GenericSetAttr((PyObject *) self, attr_name, value);
}
コード例 #4
0
int PyDSOP_SCOPE_INIT_INFO::setattro(PyObject *self, PyObject *obname, PyObject *val)
{
	PyDSOP_SCOPE_INIT_INFO *p = (PyDSOP_SCOPE_INIT_INFO *)self;
	DSOP_SCOPE_INIT_INFO *pssi = p->owner->pScopes + p->index;
	char *name=PyString_AsString(obname);
	PyErr_Clear();
	if (strcmp(name, "type")==0) {
		pssi->flType = PyInt_AsLong(val);
		if (PyErr_Occurred()) return -1;
	}
	else if (strcmp(name, "scope")==0) {
		pssi->flScope = PyInt_AsLong(val);
		if (PyErr_Occurred()) return -1;
	}
	else if (strcmp(name, "scope")==0) {
		pssi->hr = PyInt_AsLong(val);
		if (PyErr_Occurred()) return -1;
	}
	else if (strcmp(name, "dcName")==0) {
		WCHAR *buf;
		if (!PyWinObject_AsWCHAR(val, &buf, TRUE))
			return -1;
		PyWinObject_FreeWCHAR((WCHAR *)pssi->pwzDcName);
		pssi->pwzDcName = buf;
	}
	else if (strcmp(name, "filterFlags")==0) {
		PyErr_SetString(PyExc_AttributeError, "filterFlags attribute can not be set (try setting attributes on the object itself)");
		return -1;
	}
	else {
		return PyObject_GenericSetAttr(self, obname, val);
	}
	return 0;
}
コード例 #5
0
static int
Per_p_set_or_delattro(cPersistentObject *self, PyObject *name, PyObject *v)
{
    int result = -1;    /* guilty until proved innocent */
    PyObject *converted;
    char *s;

    converted = convert_name(name);
    if (!converted)
        goto Done;
    s = PyBytes_AS_STRING(converted);

    if (strncmp(s, "_p_", 3))
    {
        if (unghostify(self) < 0)
            goto Done;
        accessed(self);

        result = 0;
    }
    else
    {
        if (PyObject_GenericSetAttr((PyObject *)self, name, v) < 0)
            goto Done;
        result = 1;
    }

Done:
  Py_XDECREF(converted);
  return result;
}
コード例 #6
0
static int
Per_setattro(cPersistentObject *self, PyObject *name, PyObject *v)
{
    int result = -1;    /* guilty until proved innocent */
    PyObject *converted;
    char *s;

    converted = convert_name(name);
    if (!converted)
        goto Done;
    s = PyBytes_AS_STRING(converted);

    if (strncmp(s, "_p_", 3) != 0)
    {
        if (unghostify(self) < 0)
            goto Done;
        accessed(self);
        if (strncmp(s, "_v_", 3) != 0
            && self->state != cPersistent_CHANGED_STATE)
            {
            if (changed(self) < 0)
                goto Done;
            }
    }
    result = PyObject_GenericSetAttr((PyObject *)self, name, v);

Done:
    Py_XDECREF(converted);
    return result;
}
コード例 #7
0
ファイル: pyEnum.cpp プロジェクト: branan/Plasma-nobink
static int Enum_setattro(PyObject *self, PyObject *attr_name, PyObject *value)
{
    if (!PyString_Check(attr_name))
    {
        PyErr_SetString(PyExc_TypeError, "setattro expects a string argument");
        return -1;;
    }
    Enum *theEnum = (Enum*)self;
    PyObject *item = PyDict_GetItem(theEnum->lookup, attr_name);
    if (!item)
    {
        PyErr_Clear(); // wasn't in the dictionary, check to see if they want the values or lookup dict
        char *name = PyString_AsString(attr_name);
        if (strcmp(name, "values") == 0)
        {
            PyErr_SetString(PyExc_RuntimeError, "Cannot set the value attribute");
            return -1;
        }
        else if (strcmp(name, "lookup") == 0)
        {
            PyErr_SetString(PyExc_RuntimeError, "Cannot set the lookup attribute");
            return -1;
        }
        else if (strcmp(name, "reverseLookup") == 0)
        {
            PyErr_SetString(PyExc_RuntimeError, "Cannot set the reverseLookup attribute");
            return -1;
        }
        // they aren't trying to set an enum value or any of our special values, so let them
        return PyObject_GenericSetAttr(self, attr_name, value); // let the default method handle it
    }
    PyErr_SetString(PyExc_RuntimeError, "Cannot set any enum value");
    return -1;
}
コード例 #8
0
ファイル: nrnpy_nrn.cpp プロジェクト: bhache/pkg-neuron
static int mech_setattro(NPyMechObj* self, PyObject* name, PyObject* value) {
	int err = 0;
	Py_INCREF(name);
	char* n = PyString_AsString(name);
//printf("mech_setattro %s\n", n);
	NrnProperty np(self->prop_);	
	char buf[200];
	sprintf(buf, "%s_%s", n, memb_func[self->prop_->type].sym->name);
	Symbol* sym = np.find(buf);
	if (sym) {
		double x;
		if (PyArg_Parse(value, "d", &x) == 1) {
			double* pd = np.prop_pval(sym, 0);
			if (pd) {
				*pd = x;
			}else{
				rv_noexist(self->pyseg_->pysec_->sec_, sym->name, self->pyseg_->x_, 2);
				err = 1;
			}
		}else{
			PyErr_SetString(PyExc_ValueError,
				"must be a double");
			err = -1;
		}
	}else{
		err = PyObject_GenericSetAttr((PyObject*)self, name, value);
	}
	Py_DECREF(name);
	return err;
}
コード例 #9
0
ファイル: ofx.cpp プロジェクト: gatgui/ofxpp
int PyOFXActionArguments_SetAttr(PyObject *self, PyObject *aname, PyObject *aval)
{
  PyOFXActionArguments *pargs = (PyOFXActionArguments*)self;
  
  char *name = PyString_AsString(aname);
  
  std::map<std::string, PyObject*>::iterator it = pargs->args.find(name);
  
  if (it == pargs->args.end())
  {
    // don't have such attribute, maybe base class have
    if (PyObject_GenericSetAttr(self, aname, aval) == 0)
    {
      return 0;
    }
    else
    {
      // no, add it then
      PyErr_Clear();
      pargs->args[name] = aval;
    }
  }
  else
  {
    Py_XDECREF(it->second);
    it->second = aval;
  }
  
  Py_INCREF(aval);
  
  return 0;
}
コード例 #10
0
ファイル: nrnpy_nrn.cpp プロジェクト: bhache/pkg-neuron
static int segment_setattro(NPySegObj* self, PyObject* name, PyObject* value) {
	PyObject* rv;
	Symbol* sym;
	int err = 0;
	Py_INCREF(name);
	char* n = PyString_AsString(name);
//printf("segment_setattro %s\n", n);
	if (strcmp(n, "x") == 0) {
		int nseg;
		double x;
		if (PyArg_Parse(value, "d", &x) == 1 &&  x > 0. && x <= 1.) {
			if (x < 1e-9) {
				self->x_ = 0.;
			}else if (x > 1. - 1e-9) {
				self->x_ = 1.;
			}else{
				self->x_ = x;
			}
		}else{
			PyErr_SetString(PyExc_ValueError,
				"x must be in range 0. to 1.");
			err = -1;
		}
	}else if ((rv = PyDict_GetItemString(rangevars_, n)) != NULL) {
		sym = ((NPyRangeVar*)rv)->sym_;
		if (ISARRAY(sym)) {
			char s[200];
			sprintf(s, "%s needs an index for assignment", sym->name);
			PyErr_SetString(PyExc_IndexError, s);
			err = -1;
		}else{
			int errp;
			double* d = nrnpy_rangepointer(self->pysec_->sec_, sym, self->x_, &errp);
			if (!d) {
				rv_noexist(self->pysec_->sec_, n, self->x_, errp);
				Py_DECREF(name);
				return -1;
			}
			if (!PyArg_Parse(value, "d", d)) {
				PyErr_SetString(PyExc_ValueError, "bad value");
				Py_DECREF(name);
				return -1;
			}else if (sym->u.rng.type == MORPHOLOGY) {
				diam_changed = 1;
				self->pysec_->sec_->recalc_area_ = 1;
				nrn_diam_change(self->pysec_->sec_);
			}else if (sym->u.rng.type == EXTRACELL && sym->u.rng.index == 0) {
				// cannot execute because xraxial is an array
				diam_changed = 1;
			}
		}
	}else{
		err = PyObject_GenericSetAttr((PyObject*)self, name, value);
	}
	Py_DECREF(name);
	return err;
}
コード例 #11
0
ファイル: cext.c プロジェクト: aRkadeFR/dotVim
static int Proxy_setattro(
        ProxyObject *self, PyObject *name, PyObject *value)
{
    if (PyObject_HasAttr((PyObject *)Py_TYPE(self), name))
        return PyObject_GenericSetAttr((PyObject *)self, name, value);

    Proxy__ENSURE_WRAPPED_OR_RETURN_MINUS1(self);

    return PyObject_SetAttr(self->wrapped, name, value);
}
コード例 #12
0
ファイル: extinheritdel.c プロジェクト: jwilk/Pyrex
static int __pyx_tp_setattro_13extinheritdel_Norwegian(PyObject *o, PyObject *n, PyObject *v) {
  if (v) {
    if (__pyx_ptype_13extinheritdel_Parrot->tp_setattro)
      return __pyx_ptype_13extinheritdel_Parrot->tp_setattro(o, n, v);
    return PyObject_GenericSetAttr(o, n, v);
  }
  else {
    return __pyx_f_13extinheritdel_9Norwegian___delattr__(o, n);
  }
}
コード例 #13
0
static int display_column_setattr(display_column *self, PyObject *attr_name, PyObject *value) {
    int i;
    
    // Check and make sure we have a string as attribute name...
    if (PyUnicode_Check(attr_name)) {
         PY_SCIP_SET_INT_MIN("position", self->display->position, -1);
         PY_SCIP_SET_INT_MIN("priority", self->display->priority, -1);
         PY_SCIP_SET_INT_MIN("width", self->display->width, -1);
    }
    return PyObject_GenericSetAttr((PyObject *) self, attr_name, value);
}
コード例 #14
0
ファイル: _persistent.c プロジェクト: Schevo/durus
static PyObject *
delattribute(PyObject *self, PyObject *args)
{
	PyObject *target, *name;
	if (!PyArg_UnpackTuple(args, "", 2, 2, &target, &name))
		return NULL;
	if (PyObject_GenericSetAttr(target, name, NULL) < 0)
		return NULL;
	Py_INCREF(Py_None);
	return Py_None;
}
コード例 #15
0
ファイル: row.cpp プロジェクト: Bobspadger/pyodbc
static int Row_setattro(PyObject* o, PyObject *name, PyObject* v)
{
    Row* self = (Row*)o;

    PyObject* index = PyDict_GetItem(self->map_name_to_index, name);

    if (index)
        return Row_ass_item(o, PyNumber_AsSsize_t(index, 0), v);

    return PyObject_GenericSetAttr(o, name, v);
}
コード例 #16
0
static int
local_setattro(localobject *self, PyObject *name, PyObject *v)
{
	PyObject *ldict;
	
	ldict = _ldict(self);
	if (ldict == NULL) 
		return -1;

	return PyObject_GenericSetAttr((PyObject *)self, name, v);
}
コード例 #17
0
void PythonArithmeticScript::set(const std::string & name, const float & val)
{
    PyObject * pn = PyString_FromString(name.c_str());
    PyObject * py_val = PyFloat_FromDouble(val);
    if (PyObject_GenericSetAttr(m_script, pn, py_val) == 0) {
        // PyObject_GenericSetAttr sets and error if nothing was found
        PyErr_Clear();
    }
    Py_DECREF(pn);
    Py_DECREF(py_val);
}
コード例 #18
0
ファイル: property.cpp プロジェクト: Anehta/kbengine
//-------------------------------------------------------------------------------------
PyObject* PropertyDescription::onSetValue(PyObject* parentObj, PyObject* value)
{
	PyObject* pyName = PyUnicode_InternFromString(getName());
	int result = PyObject_GenericSetAttr(parentObj, pyName, value);
	Py_DECREF(pyName);
	
	if(result == -1)
		return NULL;

	return value;	
}
コード例 #19
0
ファイル: _ExtensionClass.c プロジェクト: c0ns0le/zenoss-4
static int
EC_setattro(PyTypeObject *type, PyObject *name, PyObject *value)
{
  /* We want to allow setting attributes of builti-in types, because
     EC did in the past and there's code that relies on it.

     We can't really set slots though, but I don't think we need to.
     There's no good way to spot slots.  We could use a lame rule like
     names that begin and end with __s and have just 4 _s smell too
     much like slots.


  */
  if (! (type->tp_flags & Py_TPFLAGS_HEAPTYPE)) 
    {
      char *cname;
      int l;

      cname = PyString_AsString(name);
      if (cname == NULL)
        return -1;
      l = PyString_GET_SIZE(name);
      if (l > 4 
          && cname[0] == '_' && cname[1] == '_'
          && cname[l-1] == '_' && cname[l-2] == '_'
          )
        {
          char *c;
          
          c = strchr(cname+2, '_');
          if (c != NULL && (c - cname) >= (l-2))
            {
              PyErr_Format
                (PyExc_TypeError,
                 "can't set attributes of built-in/extension type '%s' if the "
                 "attribute name begins and ends with __ and contains only "
                 "4 _ characters",
                 type->tp_name
                 );
              return -1;
            }
        }
      
      if (PyObject_GenericSetAttr(OBJECT(type), name, value) < 0)
        return -1;
    }
  else if (PyType_Type.tp_setattro(OBJECT(type), name, value) < 0)
    return -1;
#ifdef Py_TPFLAGS_HAVE_VERSION_TAG
  PyType_Modified(type);
#endif
  return 0;
}
コード例 #20
0
ファイル: luamodule.c プロジェクト: arkeet/pylua
static int LuaObject_setattro(LuaObject *self, PyObject *name, PyObject *o)
{
    if (PyString_Check(name))
    {
        const char *str;
        str = PyString_AsString(name);
        if (strncmp(str, "__", 2) == 0)
            return PyObject_GenericSetAttr((PyObject *)self, name, o);
    }

    return LuaObject_ass_subscript(self, name, o);
}
コード例 #21
0
static int branching_rule_setattr(branching_rule *self, PyObject *attr_name, PyObject *value) {
    double d;
    int i;
    
    // Check and make sure we have a string as attribute name...
    if (PyUnicode_Check(attr_name)) {
        PY_SCIP_SET_DBL_MIN("maxbounddist", self->branch->maxbounddist, -1); 
        PY_SCIP_SET_INT_MIN("maxdepth", self->branch->maxdepth, -1); 
        PY_SCIP_SET_PRIORITY(SCIPbranchruleSetPriority, self->branch);
    }
    return PyObject_GenericSetAttr((PyObject *) self, attr_name, value);
}
コード例 #22
0
static int separator_setattr(separator *self, PyObject *attr_name, PyObject *value) {
    int i;
    double d;
    
    // Check and make sure we have a string as attribute name...
    if (PyUnicode_Check(attr_name)) {
        PY_SCIP_SET_INT_MIN("frequency", self->sepa->freq, -1); 
        PY_SCIP_SET_DBL_MIN("maxbounddist", self->sepa->maxbounddist, -1); 
        PY_SCIP_SET_PRIORITY(SCIPsepaSetPriority, self->sepa);
    }
    return PyObject_GenericSetAttr((PyObject *) self, attr_name, value);
}
コード例 #23
0
ファイル: py_axl_list.c プロジェクト: ASPLes/libaxl
/** 
 * @brief Implements attribute set operation.
 */
int py_axl_list_set_attr (PyObject *o, PyObject *attr_name, PyObject *v)
{
	const char      * attr = NULL;
/*	PyAxlList        * self = (PyAxlList *) o; */
/*	axl_bool          boolean_value = axl_false; */

	/* now implement other attributes */
	if (! PyArg_Parse (attr_name, "s", &attr))
		return -1;

	/* now implement generic setter */
	return PyObject_GenericSetAttr (o, attr_name, v);
}
コード例 #24
0
ファイル: _k20.c プロジェクト: kevinarpe/kx
static int
_K_setattro(_K *self, PyObject *nameo, PyObject *value)
{
	char *name = 0;
	if (PyString_Check(nameo)) {
		name = PyString_AS_STRING(nameo);
	}
	if (name && name[1] == 0 && strchr("ktc", name[0])) {
		PyErr_Format(PyExc_AttributeError,
			     "attribute %c is read only", name[0]);
		return -1;
	}
	return PyObject_GenericSetAttr((PyObject*)self, nameo, value);
}
コード例 #25
0
ファイル: py_api_channel.c プロジェクト: niximor/prebot
/**
 * Set attribute of channel object.
 * @param obj Channel object
 * @param name Attribute name
 * @param value Attribute value
 */
int pyplugin_channel_setattro(PyObject *obj, PyObject *name, PyObject *value) {
	if (PyObject_GenericSetAttr(obj, name, value) != 0) {
		// Non existing property is OK here...
		PyErr_Clear();

		// Set attribute in dictionary
		channel_PyObject *chan = (channel_PyObject *)obj;

		return PyDict_SetItem(chan->dict, name, value);
	}

	// 0 means success... (weird...)
	return 0;
} // pyplugin_channel_setattr
コード例 #26
0
static int
module_setattr(PyObject *m, PyObject *name, PyObject *value)
{
	PyObject *globals = ((PyModuleObject *)m)->md_dict;
	PyObject *builtins = PyEval_GetBuiltins();
	if (globals != NULL && globals != builtins) {
		int shadows = shadows_builtin(globals, name);
		if (shadows == 1) {
			if (PyErr_Warn(PyExc_DeprecationWarning,
					"assignment shadows builtin") < 0)
				return -1;
		}
		else if (shadows == -1)
			return -1;
	}
	return PyObject_GenericSetAttr(m, name, value);
}
コード例 #27
0
static int
foo_setattro(fooobject *self, PyObject *name, PyObject *value)
{
    char *name_str;
    if (!PyString_Check(name)) {
        PyErr_SetObject(PyExc_AttributeError, name);
        return -1;
    }
    name_str = PyString_AsString(name);
    if (strcmp(name_str, "set_foo") == 0)
    {
        long v = PyInt_AsLong(value);
        if (v == -1 && PyErr_Occurred())
            return -1;
        self->foo = v;
    }
    return PyObject_GenericSetAttr((PyObject *)self, name, value);
}
コード例 #28
0
ファイル: Py_Task.cpp プロジェクト: 9cat/cyphesis
static int Task_setattro(PyTask *self, PyObject * oname, PyObject *v)
{
#ifndef NDEBUG
    if (self->m_task == NULL) {
        PyErr_SetString(PyExc_AssertionError, "NULL task Task.setattr");
        return -1;
    }
#endif // NDEBUG
    char * name = PyString_AsString(oname);
    if (strcmp(name, "progress") == 0) {
        if (PyFloat_Check(v)) {
            self->m_task->progress() = PyFloat_AsDouble(v);
        } else if (PyInt_Check(v)) {
            self->m_task->progress() = PyInt_AsLong(v);
        } else {
            PyErr_SetString(PyExc_TypeError, "progress must be a number");
            return -1;
        }
        return 0;
    }
    if (strcmp(name, "rate") == 0) {
        double rate;
        if (PyFloat_Check(v)) {
            rate = PyFloat_AsDouble(v);
        } else if (PyInt_Check(v)) {
            rate = PyInt_AsLong(v);
        } else {
            PyErr_SetString(PyExc_TypeError, "rate must be a number");
            return -1;
        }
        self->m_task->rate() = rate;
        return 0;
    }
    if (PyWeakref_CheckProxy(v)) {
        PyErr_SetString(PyExc_TypeError, "don't store proxy objects as attributes");
        return -1;
    }
    if (PyLocatedEntity_Check(v)) {
        PyErr_SetString(PyExc_TypeError, "don't store server objects as attributes");
        return -1;
    }
    // FIXME Something may be required here long term, for task attributes.
    return PyObject_GenericSetAttr((PyObject*)self, oname, v);
}
コード例 #29
0
ファイル: _persistent.c プロジェクト: Schevo/durus
static int
pb_setattro(PersistentBaseObject *self, PyObject *name, PyObject *value)
{
	char *sname;
    sname = NULL;
	if (AttributeName_Check(name)) {
	    sname = AttributeName_AsString(name);
	} else {
		PyErr_SetString(PyExc_TypeError, "attribute name must be a string");
        return -1;
	}
	if (load_triggering_name(sname)) {
		if (self->p_status != UNSAVED) {
			if (!call_method((PyObject *)self, "_p_note_change", NULL))
				return -1;
		}
	}
	return PyObject_GenericSetAttr((PyObject *)self, name, value);
}
コード例 #30
0
ファイル: kdumpfile.c プロジェクト: jeffmahoney/libkdumpfile
static int
attr_dir_setattro(PyObject *_self, PyObject *name, PyObject *value)
{
	int ret;

	ret = PyObject_GenericSetAttr(_self, name, value);
	if (!ret || !PyErr_ExceptionMatches(PyExc_AttributeError))
		return ret;

	PyErr_Clear();
	ret = attr_dir_ass_subscript(_self, name, value);
	if (!ret || !PyErr_ExceptionMatches(PyExc_KeyError))
		return ret;

	PyErr_Format(PyExc_AttributeError,
		     "'%.50s' object has no attribute '%.400s'",
		     Py_TYPE(_self)->tp_name, PyString_AS_STRING(name));
	return -1;
}