{"id":16865511,"url":"https://github.com/ionelmc/python-holdup","last_synced_at":"2025-07-16T16:38:59.012Z","repository":{"id":62569383,"uuid":"56801304","full_name":"ionelmc/python-holdup","owner":"ionelmc","description":"A tool to wait for services and execute command. Useful in Docker containers.","archived":false,"fork":false,"pushed_at":"2024-05-22T00:25:22.000Z","size":272,"stargazers_count":34,"open_issues_count":2,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-16T05:48:48.847Z","etag":null,"topics":["docker","dockerize","healthcheck","holdup","http","python","tcp","wait-for-it"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ionelmc.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-04-21T19:45:27.000Z","updated_at":"2025-03-11T03:16:57.000Z","dependencies_parsed_at":"2024-04-11T00:31:58.380Z","dependency_job_id":"10832077-3042-426f-b253-1d548306bf29","html_url":"https://github.com/ionelmc/python-holdup","commit_stats":{"total_commits":158,"total_committers":5,"mean_commits":31.6,"dds":0.120253164556962,"last_synced_commit":"ac1caeeb26d1be2ad6b9f13b83b3d74cbcddc633"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/ionelmc/python-holdup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ionelmc%2Fpython-holdup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ionelmc%2Fpython-holdup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ionelmc%2Fpython-holdup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ionelmc%2Fpython-holdup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ionelmc","download_url":"https://codeload.github.com/ionelmc/python-holdup/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ionelmc%2Fpython-holdup/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265524907,"owners_count":23782057,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","dockerize","healthcheck","holdup","http","python","tcp","wait-for-it"],"created_at":"2024-10-13T14:47:22.201Z","updated_at":"2025-07-16T16:38:58.960Z","avatar_url":"https://github.com/ionelmc.png","language":"Python","readme":"========\nOverview\n========\n\n.. start-badges\n\n.. list-table::\n    :stub-columns: 1\n\n    * - docs\n      - |docs|\n    * - tests\n      - |github-actions| |coveralls|\n    * - package\n      - |version| |wheel| |supported-versions| |supported-implementations| |commits-since|\n.. |docs| image:: https://readthedocs.org/projects/python-holdup/badge/?style=flat\n    :target: https://readthedocs.org/projects/python-holdup/\n    :alt: Documentation Status\n\n.. |github-actions| image:: https://github.com/ionelmc/python-holdup/actions/workflows/github-actions.yml/badge.svg\n    :alt: GitHub Actions Build Status\n    :target: https://github.com/ionelmc/python-holdup/actions\n\n.. |coveralls| image:: https://coveralls.io/repos/github/ionelmc/python-holdup/badge.svg?branch=master\n    :alt: Coverage Status\n    :target: https://coveralls.io/github/ionelmc/python-holdup?branch=master\n\n.. |version| image:: https://img.shields.io/pypi/v/holdup.svg\n    :alt: PyPI Package latest release\n    :target: https://pypi.org/project/holdup\n\n.. |wheel| image:: https://img.shields.io/pypi/wheel/holdup.svg\n    :alt: PyPI Wheel\n    :target: https://pypi.org/project/holdup\n\n.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/holdup.svg\n    :alt: Supported versions\n    :target: https://pypi.org/project/holdup\n\n.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/holdup.svg\n    :alt: Supported implementations\n    :target: https://pypi.org/project/holdup\n\n.. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-holdup/v5.1.1.svg\n    :alt: Commits since latest release\n    :target: https://github.com/ionelmc/python-holdup/compare/v5.1.1...master\n\n\n\n.. end-badges\n\nA tool to wait for services and execute command. Useful for Docker containers that depend on slow to start services\n(like almost everything).\n\n* Free software: BSD 2-Clause License\n\nInstallation\n============\n\nCurrently holdup is only published to PyPI and `hub.docker.com \u003chttps://hub.docker.com/r/ionelmc/holdup\u003e`_.\n\nTo install from PyPI::\n\n    pip install holdup\n\nIt has no dependencies except the optional PostgreSQL check support, which you'd install with::\n\n    pip install 'holdup[pg]'\n\nYou can also install the in-development version with::\n\n    pip install https://github.com/ionelmc/python-holdup/archive/master.zip\n\nAlternate installation (Docker image)\n-------------------------------------\n\nExample::\n\n    docker run --rm ionelmc/holdup tcp://foobar:1234\n\nNote that this will have some limitations:\n\n* executing the ``command`` is pretty pointless because holdup will run in its own container\n* you'll probably need extra network configuration to be able to access services\n* you won't be able to use `docker run` inside a container without exposing a docker daemon in said container\n\n\nUsage\n=====\n\nusage: holdup [-h] [-t SECONDS] [-T SECONDS] [-i SECONDS] [-n] service [service ...] [-- command [arg [arg ...]]]\n\nWait for services to be ready and optionally exec command.\n\npositional arguments:\n  service\n    A service to wait for. Supported protocols: \"tcp://host:port/\", \"path:///path/to/something\", \"unix:///path/to/domain.sock\", \"eval://expr\", \"pg://user:password@host:port/dbname\" (\"postgres\" and \"postgresql\" also allowed), \"http://urn\", \"https://urn\", \"https+insecure://urn\" (status 200 expected for http*). Join protocols with a comma to make holdup exit at the first passing one, eg: \"tcp://host:1,host:2\" or \"tcp://host:1,tcp://host:2\" are equivalent and mean `any that pass`.\n  command\n    An optional command to exec.\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -t SECONDS, --timeout SECONDS\n                        Time to wait for services to be ready. Default: 60.0\n  -T SECONDS, --check-timeout SECONDS\n                        Time to wait for a single check. Default: 1.0\n  -i SECONDS, --interval SECONDS\n                        How often to check. Default: 0.2\n  -v, --verbose         Verbose mode.\n  --verbose-passwords   Disable PostgreSQL/HTTP password masking.\n  -n, --no-abort        Ignore failed services. This makes `holdup` return 0 exit code regardless of services actually responding.\n  --insecure            Disable SSL Certificate verification for HTTPS services.\n  --version             display the version of the holdup package and its location, then exit.\n\nExample::\n\n    holdup tcp://foobar:1234 -- django-admin ...\n\nDocumentation\n=============\n\nhttps://python-holdup.readthedocs.io/\n\nDevelopment\n===========\n\nTo run all the tests run::\n\n    tox\n\nNote, to combine the coverage data from all the tox environments run:\n\n.. list-table::\n    :widths: 10 90\n    :stub-columns: 1\n\n    - - Windows\n      - ::\n\n            set PYTEST_ADDOPTS=--cov-append\n            tox\n\n    - - Other\n      - ::\n\n            PYTEST_ADDOPTS=--cov-append tox\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fionelmc%2Fpython-holdup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fionelmc%2Fpython-holdup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fionelmc%2Fpython-holdup/lists"}