public IEnumerator <T> GetEnumerator() { PyObject iterObject; using (Py.GIL()) { var iter = Runtime.PyObject_GetIter(pyObject.Reference); PythonException.ThrowIfIsNull(iter); iterObject = iter.MoveToPyObject(); } while (true) { using (Py.GIL()) { var item = Runtime.PyIter_Next(iterObject.Handle); if (item == IntPtr.Zero) { Runtime.CheckExceptionOccurred(); iterObject.Dispose(); break; } yield return((T) new PyObject(item).AsManagedObject(typeof(T))); } } }
public override ValueType Execute(ValueType arg) { var module = (IntPtr)arg; using (Py.GIL()) { var test_obj_call = PyRuntime.PyObject_GetAttrString(module, "test_obj_call"); PythonException.ThrowIfIsNull(test_obj_call); var args = PyRuntime.PyTuple_New(0); var res = PyRuntime.PyObject_CallObject(test_obj_call, args); PythonException.ThrowIfIsNull(res); PyRuntime.XDecref(args); PyRuntime.XDecref(res); } return 0; }
public PyObject?TryEncode(object value) { if (value == null) { return(null); } var tupleType = value.GetType(); if (tupleType == typeof(object)) { return(null); } if (!this.CanEncode(tupleType)) { return(null); } if (tupleType == typeof(TTuple)) { return(new PyTuple()); } nint fieldCount = tupleType.GetGenericArguments().Length; using var tuple = Runtime.PyTuple_New(fieldCount); PythonException.ThrowIfIsNull(tuple); int fieldIndex = 0; foreach (FieldInfo field in tupleType.GetFields()) { var item = field.GetValue(value); using var pyItem = Converter.ToPython(item, field.FieldType); Runtime.PyTuple_SetItem(tuple.Borrow(), fieldIndex, pyItem.Steal()); fieldIndex++; } return(new PyTuple(tuple.Steal())); }