Skip to main content

Reachability

Reachability is a Python 3 package which allows you to monitor and observe online reachability, and react to these status changes as necessary.

This is done by periodically pinging the Cloudflare DNS IP (1.1.1.1). Reachability is customisable, so you can change the interval and host to ping as necessary.

Installation

You can install Reachability from PyPI

pip install reachability

How to use

To start with, we can easily check the current status from an instance of the reachability class:

from reachability import Reachability

reachability = Reachability()
print(reachability.isonline())

The above show True if connected to the internet, or False if not.

To set up Reachability, instead you can use:

reachability = Reachability(host='8.8.4.4', port=53, timeout=3, status_check_interval=4)

The above will instead ping 8.8.4.4 (Google's DNS Service), on port 53 with a timeout of 3 seconds. status_check_interval is used in more advanced use cases to monitor any status changes as shown below.

Observing changes

Functions and Lambdas

reachability.attach_func(lambda x: print(x))
reachability.start_notify()

This will print True or False on each status change. If for example, we are initially connected to the internet, True will be printed. If the Internet connection is then interrupted, the lambda will be executed again this time printing False.

This will continue until

reachability.stop_notify()

is called. Note however that the lambda will still be attached. To detach it, we must call

reachability.detach_func(x)

where x is a reference to the lambda or function.

Obviously, you can also use something like

def f(isonline):
    if isonline:
        print("FunctionA: We are online")
    else:
        print("FunctionA: We are offline")

reachability.attach_func(f)

Observers

Another option is to use an Observer Class as demonstrated below:

from reachability import ReachabilityObserver, Reachability


class ObserverA(ReachabilityObserver):
    def reachability_update(self, isonline: bool) -> None:
        if isonline:
            print("ObserverA: We are online")
        else:
            print("ObserverA: We are offline")

reachability = Reachability()
observer_a = ObserverA()
reachability.attach(observer_a)
reachability.start_notify()

ReachabiltyObserver is a simple interface. Classes which use it will implement

def reachability_update(self, is_online: bool) -> None

This method will then be called on Online Reachability changes.

You can have multiple observers attached to a reachability instance. To detach them, simply call

reachability.detach(observer_a) #Detach ObserverA
reachability.stop_notify() #Stop any further notifications

Metadata

Release files for reachability 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for reachability 0.1.4
File Size Uploaded
reachability-0.1.4.tar.gz 3.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for reachability 0.1.4
File Interpreter ABI Platform
reachability-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 9.2 kB

Release files / reachability-0.1.4.tar.gz

Download URL reachability-0.1.4.tar.gz
Size 3.7 kB
Tags Source
SHA-256 checksum
How to use checksums
61f7f0fff39da809730e48c073ec091e5d590c827f559383e713f1f8764e666c
BLAKE2b-256 checksum
How to use checksums
8446408b5cac1b1b56b04d85289ee3f541abbf437ed75dbd7a2c36e4a2747368
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.1 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5

Release files / reachability-0.1.4-py3-none-any.whl

Download URL reachability-0.1.4-py3-none-any.whl
Size 5.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a537190faa360974a9e07cd874f4a9419f056aaf49c6dac27c5037041783424a
BLAKE2b-256 checksum
How to use checksums
7039b2e32a140f0910e2e34c3b71f083bc2d046253d6203da64b2b74ce23d0d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.1 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page