mojo-waiting


Namemojo-waiting JSON
Version 2.0.0 PyPI version JSON
download
home_pagehttp://automationmojo.com
SummaryAutomation Mojo Waiting Module
upload_time2024-08-07 02:36:27
maintainerNone
docs_urlNone
authorMyron Walker
requires_python<4.0,>=3.9
licenseLICENSE.txt
keywords python
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
=============================================
Automation Mojo Waiting Module - mojo-waiting
=============================================

This package provides support for enhanced context based waiting.  This module will greatly enhance the
information presented when a wait timeout occurs.  Wait contexts are particularly useful for distributed
automation.  Distributed automation scenarios required lots of wait loops in order wait for the effects
of an effect to distributed throughout the distributed system.

The waiting code patterns used are designed to present the best results in test stacktraces presented
when a wait fails.  This makes the `mojo.waiting` module perfect for use with
test frameworks such as `pytest` and `testplus` that show code context in the error
report stack traces.

Another important aspect of the `mojo.waiting` module is that it uses `datetime`
timestamps and `timespan` for lengths of time so timeouts in error reporting are easier
to interpret.

.. code::

    Traceback (most recent call last):
    File "/home/myron/repos/mojo.waiting/source/tests/test_wait_for_it.py", line 97, in test_basic_wait_for_it_timeout
        future.result()
    File "/usr/lib/python3.10/concurrent/futures/_base.py", line 451, in result
        return self.__get_result()
    File "/usr/lib/python3.10/concurrent/futures/_base.py", line 403, in __get_result
        raise self._exception
    File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
        result = self.fn(*self.args, **self.kwargs)
    File "/home/myron/repos/mojo.waiting/source/tests/test_wait_for_it.py", line 88, in wait_task
        ctxwait.wait_for_it(wait_helper, interval=.5, timeout=2)
    File "/home/myron/repos/mojo.waiting/source/packages/ctxwait/waiting.py", line 103, in wait_for_it
        raise toerr
    TimeoutError: Timeout waiting for 'wait_helper':
        timeout=2 start_time=2023-03-13 14:57:29.860302, end_time=2023-03-13 14:57:31.860302 now_time=2023-03-13 14:57:31.863681 time_diff=0:00:02.003379


The following is an example of how the `mojo.waiting` module is used.

.. code:: python

    from ctxwait import WaitContext, wait_for_it

    def some_wait_helper(wctx: WaitContext):
        finished = False

        // TODO: Check if something is finished, the code and variables used
        //       here will show up in any tracebacks from pytest or testplus
        //       because the timeout is being raised in the appropriate scope.

        if not finished and wctx.final_attempt:
            whatfor = "Test timeout"
            toerr = wctx.create_timeout(whatfor)
            raise toerr

        return finished

    wait_for_it(some_wait_helper)


The `wait_for_it` method has many different parameters that can be used to override the
behavior of the wait loop.

.. code:: python

    def wait_for_it(looper: WaitCallback, *largs, what_for: Optional[str]=None, delay: float=DEFAULT_WAIT_DELAY,
                interval: float=DEFAULT_WAIT_INTERVAL, timeout: float=DEFAULT_WAIT_TIMEOUT,
                lkwargs: Dict[Any, Any]={}, wctx: Optional[WaitContext]=None):
        """
            Provides for convenient mechanism to wait for criteria to be met before proceeding.

            :param looper: A callback method that is repeatedly called while it returns `False` up-to
                        the end of a timeout period, and that will return `True` if a waited on
                        condition is met prior to a timeout condition being met.
            :param largs: Arguements to pass to the looper callback function.
            :param what_for: A breif description of what is being waited for.
            :param delay: An initial time delay to consume before beginning the waiting process.
            :param interval: A period of time to delay between rechecks of the wait conditon
            :param timeout: The maximum period of time in seconds that should be waited before timing out.
            :param lkwargs: Additional keyword arguments to pass to the looper function

            :raises TimeoutError: A timeout error with details around the wait condition.

            ..note: The 'delay', 'interval' and 'timeout' parameters will be ignored if the 'wctx' parameter
                    is passed as the wctx (WaitContext) parameter includes these values with it.
        """
        ...

The `wait_for_it` function must be passed a method that follows the `WaitCallback` protocol.  The function
can have variable arguments and keyword arguements but the first parameter to the `WaitCallback` method
must be a `WaitContext` object.

==========
References
==========

- `User Guide <userguide/userguide.rst>`_
- `Coding Standards <userguide/10-00-coding-standards.rst>`_


            

Raw data

            {
    "_id": null,
    "home_page": "http://automationmojo.com",
    "name": "mojo-waiting",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.9",
    "maintainer_email": null,
    "keywords": "python",
    "author": "Myron Walker",
    "author_email": "myron.walker@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/5c/98/bc3e0a6150c1a7cdbc4154ceb51c65e226350fd41d15b3df6f522b203df6/mojo_waiting-2.0.0.tar.gz",
    "platform": null,
    "description": "\n=============================================\nAutomation Mojo Waiting Module - mojo-waiting\n=============================================\n\nThis package provides support for enhanced context based waiting.  This module will greatly enhance the\ninformation presented when a wait timeout occurs.  Wait contexts are particularly useful for distributed\nautomation.  Distributed automation scenarios required lots of wait loops in order wait for the effects\nof an effect to distributed throughout the distributed system.\n\nThe waiting code patterns used are designed to present the best results in test stacktraces presented\nwhen a wait fails.  This makes the `mojo.waiting` module perfect for use with\ntest frameworks such as `pytest` and `testplus` that show code context in the error\nreport stack traces.\n\nAnother important aspect of the `mojo.waiting` module is that it uses `datetime`\ntimestamps and `timespan` for lengths of time so timeouts in error reporting are easier\nto interpret.\n\n.. code::\n\n    Traceback (most recent call last):\n    File \"/home/myron/repos/mojo.waiting/source/tests/test_wait_for_it.py\", line 97, in test_basic_wait_for_it_timeout\n        future.result()\n    File \"/usr/lib/python3.10/concurrent/futures/_base.py\", line 451, in result\n        return self.__get_result()\n    File \"/usr/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n        raise self._exception\n    File \"/usr/lib/python3.10/concurrent/futures/thread.py\", line 58, in run\n        result = self.fn(*self.args, **self.kwargs)\n    File \"/home/myron/repos/mojo.waiting/source/tests/test_wait_for_it.py\", line 88, in wait_task\n        ctxwait.wait_for_it(wait_helper, interval=.5, timeout=2)\n    File \"/home/myron/repos/mojo.waiting/source/packages/ctxwait/waiting.py\", line 103, in wait_for_it\n        raise toerr\n    TimeoutError: Timeout waiting for 'wait_helper':\n        timeout=2 start_time=2023-03-13 14:57:29.860302, end_time=2023-03-13 14:57:31.860302 now_time=2023-03-13 14:57:31.863681 time_diff=0:00:02.003379\n\n\nThe following is an example of how the `mojo.waiting` module is used.\n\n.. code:: python\n\n    from ctxwait import WaitContext, wait_for_it\n\n    def some_wait_helper(wctx: WaitContext):\n        finished = False\n\n        // TODO: Check if something is finished, the code and variables used\n        //       here will show up in any tracebacks from pytest or testplus\n        //       because the timeout is being raised in the appropriate scope.\n\n        if not finished and wctx.final_attempt:\n            whatfor = \"Test timeout\"\n            toerr = wctx.create_timeout(whatfor)\n            raise toerr\n\n        return finished\n\n    wait_for_it(some_wait_helper)\n\n\nThe `wait_for_it` method has many different parameters that can be used to override the\nbehavior of the wait loop.\n\n.. code:: python\n\n    def wait_for_it(looper: WaitCallback, *largs, what_for: Optional[str]=None, delay: float=DEFAULT_WAIT_DELAY,\n                interval: float=DEFAULT_WAIT_INTERVAL, timeout: float=DEFAULT_WAIT_TIMEOUT,\n                lkwargs: Dict[Any, Any]={}, wctx: Optional[WaitContext]=None):\n        \"\"\"\n            Provides for convenient mechanism to wait for criteria to be met before proceeding.\n\n            :param looper: A callback method that is repeatedly called while it returns `False` up-to\n                        the end of a timeout period, and that will return `True` if a waited on\n                        condition is met prior to a timeout condition being met.\n            :param largs: Arguements to pass to the looper callback function.\n            :param what_for: A breif description of what is being waited for.\n            :param delay: An initial time delay to consume before beginning the waiting process.\n            :param interval: A period of time to delay between rechecks of the wait conditon\n            :param timeout: The maximum period of time in seconds that should be waited before timing out.\n            :param lkwargs: Additional keyword arguments to pass to the looper function\n\n            :raises TimeoutError: A timeout error with details around the wait condition.\n\n            ..note: The 'delay', 'interval' and 'timeout' parameters will be ignored if the 'wctx' parameter\n                    is passed as the wctx (WaitContext) parameter includes these values with it.\n        \"\"\"\n        ...\n\nThe `wait_for_it` function must be passed a method that follows the `WaitCallback` protocol.  The function\ncan have variable arguments and keyword arguements but the first parameter to the `WaitCallback` method\nmust be a `WaitContext` object.\n\n==========\nReferences\n==========\n\n- `User Guide <userguide/userguide.rst>`_\n- `Coding Standards <userguide/10-00-coding-standards.rst>`_\n\n",
    "bugtrack_url": null,
    "license": "LICENSE.txt",
    "summary": "Automation Mojo Waiting Module",
    "version": "2.0.0",
    "project_urls": {
        "Homepage": "http://automationmojo.com",
        "Repository": "https://github.com/automationmojo/mojo-waiting"
    },
    "split_keywords": [
        "python"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7652f988852898a2c800e50cb1805bb4678bc3f1904b259d8f6577d930006663",
                "md5": "3bf6a40d35d223e30bc6154e93c5d834",
                "sha256": "49b57a2cd20e83e77952ae47651709227c3913b5bec0cbb55971c6c6557052c3"
            },
            "downloads": -1,
            "filename": "mojo_waiting-2.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3bf6a40d35d223e30bc6154e93c5d834",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.9",
            "size": 8529,
            "upload_time": "2024-08-07T02:36:26",
            "upload_time_iso_8601": "2024-08-07T02:36:26.051405Z",
            "url": "https://files.pythonhosted.org/packages/76/52/f988852898a2c800e50cb1805bb4678bc3f1904b259d8f6577d930006663/mojo_waiting-2.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5c98bc3e0a6150c1a7cdbc4154ceb51c65e226350fd41d15b3df6f522b203df6",
                "md5": "cb96701c8248053b4d089fd51ed05dd2",
                "sha256": "e23c6142b6b06ce5719e6a79e2e2b7e93300c48a6adeb8b36cdf4cf356ece29f"
            },
            "downloads": -1,
            "filename": "mojo_waiting-2.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "cb96701c8248053b4d089fd51ed05dd2",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.9",
            "size": 7357,
            "upload_time": "2024-08-07T02:36:27",
            "upload_time_iso_8601": "2024-08-07T02:36:27.405150Z",
            "url": "https://files.pythonhosted.org/packages/5c/98/bc3e0a6150c1a7cdbc4154ceb51c65e226350fd41d15b3df6f522b203df6/mojo_waiting-2.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-07 02:36:27",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "automationmojo",
    "github_project": "mojo-waiting",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "mojo-waiting"
}
        
Elapsed time: 0.30369s