Utility functions for interacting with py.js
objects¶
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.
Parameters: - 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
Returns: a javascript object mapping argument names to values
Raises: TypeError
if the provided arguments don’t match the format- arguments – array-like objects holding the args and kwargs
passed to the callable, generally the
-
class
py.
PY_def
(fn)¶ Type wrapping javascript functions into py.js callables. The wrapped function follows the py.js calling conventions
Parameters: fn (Function) – the javascript function to wrap Returns: a callable py.js object
Object Protocol¶
-
py.
PY_hasAttr
(o, attr_name)¶ Returns
true
ifo
has the attributeattr_name
, otherwise returnsfalse
. Equivalent to Python’shasattr(o, attr_name)
Parameters: - o – A
py.object
- attr_name – a javascript
String
Return type: Boolean
- o – A
-
py.
PY_getAttr
(o, attr_name)¶ Retrieve an attribute
attr_name
from the objecto
. Returns the attribute value on success, raisesAttributeError
on failure. Equivalent to the python expressiono.attr_name
.Parameters: - o – A
py.object
- attr_name – a javascript
String
Returns: Raises: AttributeError
- o – A
-
py.
PY_str
(o)¶ Computes a string representation of
o
, returns the string representation. Equivalent tostr(o)
Parameters: o – A py.object
Returns: py.str
-
py.
PY_isInstance
(inst, cls)¶ Returns
true
ifinst
is an instance ofcls
,false
otherwise.
-
py.
PY_isSubclass
(derived, cls)¶ Returns
true
ifderived
iscls
or a subclass thereof.
-
py.
PY_call
(callable[, args][, kwargs])¶ Call an arbitrary python-level callable from javascript.
Parameters: Returns: nothing or
py.object
-
py.
PY_isTrue
(o)¶ Returns
true
if the object is considered truthy,false
otherwise. Equivalent tobool(o)
.Parameters: o – A py.object
Return type: Boolean
-
py.
PY_not
(o)¶ Inverse of
py.PY_isTrue()
.
-
py.
PY_size
(o)¶ If
o
is a sequence or mapping, returns its length. Otherwise, raisesTypeError
.Parameters: o – A py.object
Returns: Number
Raises: TypeError
if the object doesn’t have a length
Number Protocol¶
-
py.
PY_add
(o1, o2)¶ Returns the result of adding
o1
ando2
, equivalent too1 + o2
.Parameters: Returns:
-
py.
PY_subtract
(o1, o2)¶ Returns the result of subtracting
o2
fromo1
, equivalent too1 - o2
.Parameters: Returns:
-
py.
PY_multiply
(o1, o2)¶ Returns the result of multiplying
o1
byo2
, equivalent too1 * o2
.Parameters: Returns:
-
py.
PY_divide
(o1, o2)¶ Returns the result of dividing
o1
byo2
, equivalent too1 / o2
.Parameters: Returns:
-
py.
PY_negative
(o)¶ Returns the negation of
o
, equivalent to-o
.Parameters: o – py.object
Returns: py.object
-
py.
PY_positive
(o)¶ Returns the “positive” of
o
, equivalent to+o
.Parameters: o – py.object
Returns: py.object
[1] | Python 2, which py.js currently implements, does not support Python-level keyword-only parameters (it can be done through the C-API), but it seemed neat and easy enough so there. |
[2] | due to this and contrary to Python 2, py.js allows
arguments other than **kwargs to follow *args . |