Implemented connectivity check (Fixed #1038)
authorMax G <redacted>
Fri, 10 Jul 2020 21:23:31 +0000 (00:23 +0300)
committerMax G <redacted>
Fri, 10 Jul 2020 21:23:31 +0000 (00:23 +0300)
updateHostsFile.py

index 8eaff17177ca46059c0e066e5a82b8ac9c640124..64d3a6a2047e26562e72fd31c57d6c74fe7c15e2 100644 (file)
@@ -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):
git clone https://git.99rst.org/PROJECT