Esempio n. 1
0
        /// <summary>
        ///     Set an attribute value
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="attribute"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool SetAttribute <T>(string attribute, T value)
        {
            var pyValue = PySharp.PyZero;

            var oValue = (object)value;

            if (value is PyObject)
            {
                pyValue = (PyObject)oValue;
            }

            // Only allow type conversions if we have a PySharp object reference
            if (_pySharp != null)
            {
                if (oValue is bool)
                {
                    pyValue = _pySharp.From((bool)oValue);
                }
                if (oValue is int)
                {
                    pyValue = _pySharp.From((int)oValue);
                }
                if (oValue is long)
                {
                    pyValue = _pySharp.From((long)oValue);
                }
                if (oValue is float)
                {
                    pyValue = _pySharp.From((float)oValue);
                }
                if (oValue is double)
                {
                    pyValue = _pySharp.From((double)oValue);
                }
                if (oValue is string)
                {
                    pyValue = _pySharp.From((string)oValue);
                }
                if (oValue is IEnumerable <PyObject> )
                {
                    pyValue = _pySharp.From((IEnumerable <PyObject>)oValue);
                }
                if (oValue is IEnumerable <int> )
                {
                    pyValue = _pySharp.From((IEnumerable <int>)oValue);
                }
                if (oValue is IEnumerable <long> )
                {
                    pyValue = _pySharp.From((IEnumerable <long>)oValue);
                }
                if (oValue is IEnumerable <float> )
                {
                    pyValue = _pySharp.From((IEnumerable <float>)oValue);
                }
                if (oValue is IEnumerable <double> )
                {
                    pyValue = _pySharp.From((IEnumerable <double>)oValue);
                }
                if (oValue is IEnumerable <string> )
                {
                    pyValue = _pySharp.From((IEnumerable <string>)oValue);
                }
            }

            try
            {
                if (IsValid && !pyValue.IsNull)
                {
                    return(Py.PyObject_SetAttrString(this, attribute, pyValue) != -1);
                }

                return(false);
            }
            finally
            {
                HandlePythonError();
            }
        }