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