100 lines
3.4 KiB
Plaintext
100 lines
3.4 KiB
Plaintext
Metadata-Version: 2.1
|
||
Name: portend
|
||
Version: 3.0.0
|
||
Summary: TCP port monitoring and discovery
|
||
Home-page: https://github.com/jaraco/portend
|
||
Author: Jason R. Coombs
|
||
Author-email: jaraco@jaraco.com
|
||
License: UNKNOWN
|
||
Platform: UNKNOWN
|
||
Classifier: Development Status :: 5 - Production/Stable
|
||
Classifier: Intended Audience :: Developers
|
||
Classifier: License :: OSI Approved :: MIT License
|
||
Classifier: Programming Language :: Python :: 3
|
||
Classifier: Programming Language :: Python :: 3 :: Only
|
||
Requires-Python: >=3.6
|
||
License-File: LICENSE
|
||
Requires-Dist: tempora (>=1.8)
|
||
Provides-Extra: docs
|
||
Requires-Dist: sphinx ; extra == 'docs'
|
||
Requires-Dist: jaraco.packaging (>=8.2) ; extra == 'docs'
|
||
Requires-Dist: rst.linker (>=1.9) ; extra == 'docs'
|
||
Provides-Extra: testing
|
||
Requires-Dist: pytest (>=6) ; extra == 'testing'
|
||
Requires-Dist: pytest-checkdocs (>=2.4) ; extra == 'testing'
|
||
Requires-Dist: pytest-flake8 ; extra == 'testing'
|
||
Requires-Dist: pytest-cov ; extra == 'testing'
|
||
Requires-Dist: pytest-enabler (>=1.0.1) ; extra == 'testing'
|
||
Requires-Dist: pytest-black (>=0.3.7) ; (platform_python_implementation != "PyPy") and extra == 'testing'
|
||
Requires-Dist: pytest-mypy ; (platform_python_implementation != "PyPy") and extra == 'testing'
|
||
|
||
.. image:: https://img.shields.io/pypi/v/portend.svg
|
||
:target: `PyPI link`_
|
||
|
||
.. image:: https://img.shields.io/pypi/pyversions/portend.svg
|
||
:target: `PyPI link`_
|
||
|
||
.. _PyPI link: https://pypi.org/project/portend
|
||
|
||
.. image:: https://github.com/jaraco/portend/workflows/tests/badge.svg
|
||
:target: https://github.com/jaraco/portend/actions?query=workflow%3A%22tests%22
|
||
:alt: tests
|
||
|
||
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
|
||
:target: https://github.com/psf/black
|
||
:alt: Code style: Black
|
||
|
||
.. image:: https://readthedocs.org/projects/portend/badge/?version=latest
|
||
:target: https://portend.readthedocs.io/en/latest/?badge=latest
|
||
|
||
.. image:: https://img.shields.io/badge/skeleton-2021-informational
|
||
:target: https://blog.jaraco.com/skeleton
|
||
|
||
por·tend
|
||
pôrˈtend/
|
||
verb
|
||
|
||
be a sign or warning that (something, especially something momentous or calamitous) is likely to happen.
|
||
|
||
Usage
|
||
=====
|
||
|
||
Use portend to monitor TCP ports for bound or unbound states.
|
||
|
||
For example, to wait for a port to be occupied, timing out after 3 seconds::
|
||
|
||
portend.occupied('www.google.com', 80, timeout=3)
|
||
|
||
Or to wait for a port to be free, timing out after 5 seconds::
|
||
|
||
portend.free('::1', 80, timeout=5)
|
||
|
||
The portend may also be executed directly. If the function succeeds, it
|
||
returns nothing and exits with a status of 0. If it fails, it prints a
|
||
message and exits with a status of 1. For example::
|
||
|
||
python -m portend localhost:31923 free
|
||
(exits immediately)
|
||
|
||
python -m portend -t 1 localhost:31923 occupied
|
||
(one second passes)
|
||
Port 31923 not bound on localhost.
|
||
|
||
Portend also exposes a ``find_available_local_port`` for identifying
|
||
a suitable port for binding locally::
|
||
|
||
port = portend.find_available_local_port()
|
||
print(port, "is available for binding")
|
||
|
||
Portend additionally exposes the lower-level port checking functionality
|
||
in the ``Checker`` class, which currently exposes only one public
|
||
method, ``assert_free``::
|
||
|
||
portend.Checker().assert_free('localhost', 31923)
|
||
|
||
If assert_free is passed a host/port combination that is occupied by
|
||
a bound listener (i.e. a TCP connection is established to that host/port),
|
||
assert_free will raise a ``PortNotFree`` exception.
|
||
|
||
|