def run(func=None, tries=3):
    """Call *func()*  in its own transaction; retry
        in case of some kind of `retriable error <ITransaction.isRetryableError>`.

        The call is tried up to *tries* times.

        The call is performed in a new transaction. After the call,
        the (then current) transaction is committed (no exception) or
        aborted (exception).

        `run` supports the alternative signature ``run(tries=3)``. If
        *func* is not given or passed as `None`, then the call to
        `run` returns a function taking *func* as argument and then
        calling ``run(func, tries)``.
        """
