Wait-For-It Python module, that waits until a certain TCP port is available.
Based on the idea behind the well-known wait-for-it script, but created mainly as a Python package to be used on other Python applications, services or modules, instead of being mainly a CLI tool.
Package is available at PyPi, so you can install it with pip install wait4it -
or from sources with python setup.py install.
from wait4it import wait_for, WaitForTimeoutError # This should return instantly (if you have connection) wait_for(host="google.com", port=80) # This should fail in 5 seconds try: wait_for(host="google.com", port=12345, timeout=5) except TimeoutError: # Actually will raise custom WaitForTimeoutError exception, but inherits from TimeoutError (except on Python2) print("Failed! (as expected)") # This should return False in 15 seconds wait_for(host="google.com", port=12345, raise_error=False) # Normally you will want to check for a port in localhost (e.g. a MySQL/MariaDB database). # This can be done directly like: wait_for(3306) # The exceptions include the failing host/port try: wait_for(host="google.com", port=12345) except WaitForTimeoutError as ex: assert ex.host == "google.com" assert ex.port == 12345
It works similarly to wait_for, but if the considered exceptions are raised on the decorated function, it will re-run until it runs without raising these errors, or until the given retries limit is reached.
The following example will randomly raise ZeroDivisionError in the function divide_by_random, which runs 10 times.
If fails more than twice, the exception will be thrown outside the function.
from random import randint from wait4it import wait_for_pass @wait_for_pass(ZeroDivisionError, retries=2) def divide_by_random(n=10): d = randint(0, 1) print("Gonna divide", n, "/", d) return n / d for _ in range(10): r = divide_by_random() print("Got result:", r)
If retries is set to 0, the function will run forever until it passes without raising exceptions.
wait_for_pass also allows a parameter retries_delay, which can be used to define a delay, in seconds, between failed function executions.
Not external dependencies are required. Compatible (tested with) Python 2.7, 3.4, 3.5, 3.6, 3.7, 3.8 - under Linux.
- 0.2.1 - Add retries_delay parameter to wait_for_pass
- 0.1.2 - Fix wait_for_pass decorator not looping indefinitely when retries=0
- 0.1.1 - Add wait_for_pass decorator
- 0.0.1 - Initial release
- Set retries limit on wait_for
- Set timeout on wait_for_pass