Essentially the py.js
version of the Python C API, these functions
are used to implement new py.js
types or to interact with existing
ones.
They are prefixed with PY_
.
py.PY_parseArgs(arguments, format)
Arguments parser converting from the user-defined calling conventions to a JS object mapping argument names to values. It serves the same role as PyArg_ParseTupleAndKeywords.
var args = py.PY_parseArgs(
arguments, ['foo', 'bar', ['baz', 3], ['qux', "foo"]]);
roughly corresponds to the argument spec:
def func(foo, bar, baz=3, qux="foo"):
pass
Note
a significant difference is that “default values” will be re-evaluated at each call, since they are within the function.
- arguments – array-like objects holding the args and kwargs
passed to the callable, generally the
arguments
of the caller. - format –
mapping declaration to the actual arguments of the function. A javascript array composed of five possible types of elements:
- The literal string
'*'
marks all following parameters as keyword-only, regardless of them having a default value or not 1. Can only be present once in the parameters list. - A string prefixed by
*
, marks the positional variadic parameter for the function: gathers all provided positional arguments left and makes all following parameters keyword-only 2.*args
is incompatible with*
. - A string prefixed with
**
, marks the positional keyword variadic parameter for the function: gathers all provided keyword arguments left and closes the argslist. If present, this must be the last parameter of the format list. - A string defines a required parameter, accessible positionally or through keyword
- A pair of
[String, py.object]
defines an optional parameter and its default value.
For simplicity, when not using optional parameters it is possible to use a simple string as the format (using space-separated elements). The string will be split on whitespace and processed as a normal format array.
- The literal string
TypeError
if the provided arguments don’t match the
formatclass py.PY_def(fn)
Type wrapping javascript functions into py.js callables. The wrapped function follows the py.js calling conventions
Function
) – the javascript function to wrapObject Protocol
py.PY_hasAttr(o, attr_name)
Returns true
if o
has the attribute attr_name
,
otherwise returns false
. Equivalent to Python’s hasattr(o,
attr_name)
- o – A
py.object
- attr_name – a javascript
String
Boolean
py.PY_getAttr(o, attr_name)
Retrieve an attribute attr_name
from the object o
. Returns
the attribute value on success, raises AttributeError
on
failure. Equivalent to the python expression o.attr_name
.
py.PY_str(o)
Computes a string representation of o
, returns the string
representation. Equivalent to str(o)
py.PY_isInstance(inst, cls)
Returns true
if inst
is an instance of cls
, false
otherwise.
py.PY_isSubclass(derived, cls)
Returns true
if derived
is cls
or a subclass thereof.
py.PY_call(callable[, args][, kwargs])
Call an arbitrary python-level callable from javascript.
py.object
py.PY_isTrue(o)
Returns true
if the object is considered truthy, false
otherwise. Equivalent to bool(o)
.
py.object
py.PY_not(o)
Inverse of py.PY_isTrue()
.
py.PY_size(o)
If o
is a sequence or mapping, returns its length. Otherwise,
raises TypeError
.
py.PY_getItem(o, key)
Returns the element of o
corresponding to the object
key
. This is equivalent to o[key]
.
py.PY_setItem(o, key, v)
Maps the object key
to the value v
in o
. Equivalent to
o[key] = v
.
Number Protocol
py.PY_add(o1, o2)
Returns the result of adding o1
and o2
, equivalent to
o1 + o2
.
py.PY_subtract(o1, o2)
Returns the result of subtracting o2
from o1
, equivalent
to o1 - o2
.
py.PY_multiply(o1, o2)
Returns the result of multiplying o1
by o2
, equivalent to
o1 * o2
.
py.PY_divide(o1, o2)
Returns the result of dividing o1
by o2
, equivalent to
o1 / o2
.
py.PY_negative(o)
Returns the negation of o
, equivalent to -o
.
py.PY_positive(o)
Returns the “positive” of o
, equivalent to +o
.
**kwargs
to follow *args
.