A CLI utility for blocking until a service is listening
Project description
I needed a way to block my app from starting until the database service was running and accepting connections. This was particularly a problem when using Docker and docker-compose. You can run this utility as part of a run-dev.sh or run-tests.sh script and it will block for 15 seconds (configurable) until it can connect to the hostname and port as specified in your connection URL (gleaned from DATABASE_URL environment variable by default).
Installation
$ pip install urlwait
Usage
$ urlwait --help
Usage:
$ urlwait [SERVICE URL] [TIMEOUT]
SERVICE URL is a connection url, e.g. a typical value for $DATABASE_URL. TIMEOUT is
a number of seconds to try to connect to the host and port specified in the SERVICE
URL. These values may also be specified in environment variables, but command line
args take precedence:
URLWAIT_VARNAME: the env var name containing the URL to check. Default DATABASE_URL.
URLWAIT_TIMEOUT: the number of seconds to wait. Default 15.
Returns a 0 status if the connection completed successfully before the timeout, or 1 if not.
It is designed for use with Docker or other dev or testing environments where the connected
services and the app are started simultaneously, but one should wait for the other.
Examples:
The following are equivalent:
$ urlwait redis://localhost:6379/0 20
$ urlwait $CACHE_URL 20
$ URLWAIT_VARNAME=CACHE_URL URLWAIT_TIMEOUT=20 urlwait
The module is also usable in your python code:
import os
from urlwait import wait_for_url
if wait_for_url(os.getenv('REDIS_URL')):
# do things with the service
else:
# service likely did not start
If you don’t have the service URL but do have the host and port, you can use the wait_for_service(host, port, timeout) function instead.
Python Support
Since version 1.0 urlwait is Python 3 only. If you need Python 2.7 support you can use a pre 1.0 release.
Changelog
1.0 - 2020-02-28 * Close the socket to keep Python from complaining. Thanks @callahad! * Update tests to only test on Python 3.6+ * Drop support for Python 2.x
0.4 - 2017-03-02 - Always return true if protocol is sqlite
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file urlwait-1.0.tar.gz.
File metadata
- Download URL: urlwait-1.0.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9bf2da792fa6983fa93f6360108e16615066ab0f9cfb7f53e5faee5f5dffaac
|
|
| MD5 |
b79134ca0d55d3e832afbb1061e25457
|
|
| BLAKE2b-256 |
8d9b12a282343d5a81469108039cb59a0fb6b1d520c9772a5ce89bc25d56f1d9
|
File details
Details for the file urlwait-1.0-py2.py3-none-any.whl.
File metadata
- Download URL: urlwait-1.0-py2.py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eae2c20001efc915166cac79c04bac0088ad5787ec64b36f27afd2f359953b2b
|
|
| MD5 |
3589a8002dc2d75d8aac5049b2eed10a
|
|
| BLAKE2b-256 |
f6da7390a9362062593da7e67a469ddc6b7b5b410728dbc5365b943d35cf60bf
|