The Decoder.wait() method expects a list of dicts, or as a special form
a single dict, to specify the conditions to wait for. An empty dict or
an empty list mean "unconditional wait", requesting the very next sample.
Accept None as well as no arguments at all in Decoder.wait() calls. This
shall better reflect the intent and slightly unobfuscate PD code, as well
as avoid creation of potentially expensive Python objects at the call site.
- /* Parse the argument of self.wait() into 'py_conds'. */
- if (!PyArg_ParseTuple(args, "O", &py_conds)) {
+ /*
+ * Parse the argument of self.wait() into 'py_conds', and check
+ * the data type. The argument is optional, None is assumed in
+ * its absence. None or an empty dict or an empty list mean that
+ * there is no condition, and the next available sample shall
+ * get returned to the caller.
+ */
+ py_conds = Py_None;
+ if (!PyArg_ParseTuple(args, "|O", &py_conds)) {
/* Let Python raise this exception. */
return SRD_ERR;
}
/* Let Python raise this exception. */
return SRD_ERR;
}
-
- /* Check whether 'py_conds' is a dict or a list. */
- if (PyList_Check(py_conds)) {
+ if (py_conds == Py_None) {
+ /* 'py_conds' is None. */
+ return 9999;
+ } else if (PyList_Check(py_conds)) {
/* 'py_conds' is a list. */
py_conditionlist = py_conds;
num_conditions = PyList_Size(py_conditionlist);
/* 'py_conds' is a list. */
py_conditionlist = py_conds;
num_conditions = PyList_Size(py_conditionlist);