summaryrefslogtreecommitdiff
path: root/addons/web/static/lib/py.js/doc/utility.rst
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/web/static/lib/py.js/doc/utility.rst
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/web/static/lib/py.js/doc/utility.rst')
-rw-r--r--addons/web/static/lib/py.js/doc/utility.rst248
1 files changed, 248 insertions, 0 deletions
diff --git a/addons/web/static/lib/py.js/doc/utility.rst b/addons/web/static/lib/py.js/doc/utility.rst
new file mode 100644
index 00000000..8bb91648
--- /dev/null
+++ b/addons/web/static/lib/py.js/doc/utility.rst
@@ -0,0 +1,248 @@
+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_``.
+
+.. function:: py.PY_parseArgs(arguments, format)
+
+ Arguments parser converting from the :ref:`user-defined calling
+ conventions <types-methods-python-call>` 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:
+
+ .. code-block:: python
+
+ 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.
+
+ :param arguments: array-like objects holding the args and kwargs
+ passed to the callable, generally the
+ ``arguments`` of the caller.
+
+ :param 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 [#kwonly]_. 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
+ [#star-args]_. ``*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.
+
+ :returns: a javascript object mapping argument names to values
+
+ :raises: ``TypeError`` if the provided arguments don't match the
+ format
+
+.. class:: py.PY_def(fn)
+
+ Type wrapping javascript functions into py.js callables. The
+ wrapped function follows :ref:`the py.js calling conventions
+ <types-methods-python-call>`
+
+ :param Function fn: the javascript function to wrap
+ :returns: a callable py.js object
+
+Object Protocol
+---------------
+
+.. function:: 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)``
+
+ :param o: A :class:`py.object`
+ :param attr_name: a javascript ``String``
+ :rtype: ``Boolean``
+
+.. function:: 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``.
+
+ :param o: A :class:`py.object`
+ :param attr_name: a javascript ``String``
+ :returns: A :class:`py.object`
+ :raises: ``AttributeError``
+
+.. function:: py.PY_str(o)
+
+ Computes a string representation of ``o``, returns the string
+ representation. Equivalent to ``str(o)``
+
+ :param o: A :class:`py.object`
+ :returns: :class:`py.str`
+
+.. function:: py.PY_isInstance(inst, cls)
+
+ Returns ``true`` if ``inst`` is an instance of ``cls``, ``false``
+ otherwise.
+
+.. function:: py.PY_isSubclass(derived, cls)
+
+ Returns ``true`` if ``derived`` is ``cls`` or a subclass thereof.
+
+.. function:: py.PY_call(callable[, args][, kwargs])
+
+ Call an arbitrary python-level callable from javascript.
+
+ :param callable: A ``py.js`` callable object (broadly speaking,
+ either a class or an object with a ``__call__``
+ method)
+
+ :param args: javascript Array of :class:`py.object`, used as
+ positional arguments to ``callable``
+
+ :param kwargs: javascript Object mapping names to
+ :class:`py.object`, used as named arguments to
+ ``callable``
+
+ :returns: nothing or :class:`py.object`
+
+.. function:: py.PY_isTrue(o)
+
+ Returns ``true`` if the object is considered truthy, ``false``
+ otherwise. Equivalent to ``bool(o)``.
+
+ :param o: A :class:`py.object`
+ :rtype: Boolean
+
+.. function:: py.PY_not(o)
+
+ Inverse of :func:`py.PY_isTrue`.
+
+.. function:: py.PY_size(o)
+
+ If ``o`` is a sequence or mapping, returns its length. Otherwise,
+ raises ``TypeError``.
+
+ :param o: A :class:`py.object`
+ :returns: ``Number``
+ :raises: ``TypeError`` if the object doesn't have a length
+
+.. function:: py.PY_getItem(o, key)
+
+ Returns the element of ``o`` corresponding to the object
+ ``key``. This is equivalent to ``o[key]``.
+
+ :param o: :class:`py.object`
+ :param key: :class:`py.object`
+ :returns: :class:`py.object`
+ :raises: ``TypeError`` if ``o`` does not support the operation, if
+ ``key`` or the return value is not a :class:`py.object`
+
+.. function:: py.PY_setItem(o, key, v)
+
+ Maps the object ``key`` to the value ``v`` in ``o``. Equivalent to
+ ``o[key] = v``.
+
+ :param o: :class:`py.object`
+ :param key: :class:`py.object`
+ :param v: :class:`py.object`
+ :raises: ``TypeError`` if ``o`` does not support the operation, or
+ if ``key`` or ``v`` are not :class:`py.object`
+
+Number Protocol
+---------------
+
+.. function:: py.PY_add(o1, o2)
+
+ Returns the result of adding ``o1`` and ``o2``, equivalent to
+ ``o1 + o2``.
+
+ :param o1: :class:`py.object`
+ :param o2: :class:`py.object`
+ :returns: :class:`py.object`
+
+.. function:: py.PY_subtract(o1, o2)
+
+ Returns the result of subtracting ``o2`` from ``o1``, equivalent
+ to ``o1 - o2``.
+
+ :param o1: :class:`py.object`
+ :param o2: :class:`py.object`
+ :returns: :class:`py.object`
+
+.. function:: py.PY_multiply(o1, o2)
+
+ Returns the result of multiplying ``o1`` by ``o2``, equivalent to
+ ``o1 * o2``.
+
+ :param o1: :class:`py.object`
+ :param o2: :class:`py.object`
+ :returns: :class:`py.object`
+
+.. function:: py.PY_divide(o1, o2)
+
+ Returns the result of dividing ``o1`` by ``o2``, equivalent to
+ ``o1 / o2``.
+
+ :param o1: :class:`py.object`
+ :param o2: :class:`py.object`
+ :returns: :class:`py.object`
+
+.. function:: py.PY_negative(o)
+
+ Returns the negation of ``o``, equivalent to ``-o``.
+
+ :param o: :class:`py.object`
+ :returns: :class:`py.object`
+
+.. function:: py.PY_positive(o)
+
+ Returns the "positive" of ``o``, equivalent to ``+o``.
+
+ :param o: :class:`py.object`
+ :returns: :class:`py.object`
+
+.. [#kwonly] 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.
+
+.. [#star-args] due to this and contrary to Python 2, py.js allows
+ arguments other than ``**kwargs`` to follow ``*args``.
+
+.. _PyArg_ParseTupleAndKeywords:
+ http://docs.python.org/c-api/arg.html#PyArg_ParseTupleAndKeywords