From: Max G Date: Fri, 10 Jul 2020 21:23:31 +0000 (+0300) Subject: Implemented connectivity check (Fixed #1038) X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=bc8e4c92b85f911a25d0678468c9bad0ce806168;p=stevenblack-hosts.git Implemented connectivity check (Fixed #1038) --- diff --git a/updateHostsFile.py b/updateHostsFile.py index 8eaff1717..64d3a6a20 100644 --- a/updateHostsFile.py +++ b/updateHostsFile.py @@ -242,7 +242,8 @@ def main(): update_sources = prompt_for_update(freshen=settings["freshen"], update_auto=auto) if update_sources: - update_all_sources(source_data_filename, settings["hostfilename"]) + if await_network_connection(): + update_all_sources(source_data_filename, settings["hostfilename"]) gather_exclusions = prompt_for_exclusions(skip_prompt=auto) @@ -325,6 +326,34 @@ def main(): flush_cache=settings["flushdnscache"], prompt_flush=not auto ) +def await_network_connection(retries=3, delay=10): + """ + Check if we have a proper name resolution and connectivity + By pinging a common domain + + Parameters + ---------- + retries : int + Number of times to retry again (on ping failure) + delay : int + How many seconds to wait before retrying again (on ping failure) + + Returns + ------- + -> bool + True : A ping succeded + False : All retries have failed + """ + while retries: + if 0 == subprocess.call(['ping', 'one.one.one.one', '-c', '1'], + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL): + return True + + print(f'No internet connection! Retrying in {delay} seconds') + time.sleep(delay) + retries -= 1 + return False + # Prompt the User def prompt_for_update(freshen, update_auto):