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
argumentsof 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].*argsis 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: TypeErrorif 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
trueifohas 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_namefrom the objecto. Returns the attribute value on success, raisesAttributeErroron 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.objectReturns: py.str
-
py.PY_isInstance(inst, cls)¶ Returns
trueifinstis an instance ofcls,falseotherwise.
-
py.PY_isSubclass(derived, cls)¶ Returns
trueifderivedisclsor 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
trueif the object is considered truthy,falseotherwise. Equivalent tobool(o).Parameters: o – A py.objectReturn type: Boolean
-
py.PY_not(o)¶ Inverse of
py.PY_isTrue().
-
py.PY_size(o)¶ If
ois a sequence or mapping, returns its length. Otherwise, raisesTypeError.Parameters: o – A py.objectReturns: NumberRaises: TypeErrorif the object doesn’t have a length
Number Protocol¶
-
py.PY_add(o1, o2)¶ Returns the result of adding
o1ando2, equivalent too1 + o2.Parameters: Returns:
-
py.PY_subtract(o1, o2)¶ Returns the result of subtracting
o2fromo1, equivalent too1 - o2.Parameters: Returns:
-
py.PY_multiply(o1, o2)¶ Returns the result of multiplying
o1byo2, equivalent too1 * o2.Parameters: Returns:
-
py.PY_divide(o1, o2)¶ Returns the result of dividing
o1byo2, equivalent too1 / o2.Parameters: Returns:
-
py.PY_negative(o)¶ Returns the negation of
o, equivalent to-o.Parameters: o – py.objectReturns: py.object
-
py.PY_positive(o)¶ Returns the “positive” of
o, equivalent to+o.Parameters: o – py.objectReturns: 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. |