Recursively collect files in subfolvers in Python versions below 3.5. This closes...
authorSteven Black <redacted>
Mon, 19 Dec 2016 04:17:01 +0000 (23:17 -0500)
committerSteven Black <redacted>
Mon, 19 Dec 2016 04:17:01 +0000 (23:17 -0500)
updateHostsFile.py

index 5c31a8d0cc71f9a4a89a48081dc0de9a8d5a61a6..f63cffad01830f1d3b10f919c3255e976cd259f6 100644 (file)
@@ -22,6 +22,7 @@ import sys
 import tempfile
 import time
 from glob import glob
+import fnmatch
 import argparse
 import socket
 import json
@@ -245,7 +246,8 @@ def matchesExclusions(strippedRule):
 # Update Logic
 def updateAllSources():
     # Update all hosts files regardless of folder depth
-    allsources = glob('*/**/' + settings["sourcedatafilename"], recursive=True)
+    # allsources = glob('*/**/' + settings["sourcedatafilename"], recursive=True)
+    allsources = recursiveGlob("*", settings["sourcedatafilename"])
     for source in allsources:
         updateFile = open(source, "r")
         updateData = json.load(updateFile)
@@ -271,12 +273,12 @@ def createInitialFile():
     mergeFile = tempfile.NamedTemporaryFile()
 
     # spin the sources for the base file
-    for source in glob(settings["datapath"] + "/**/" + settings["hostfilename"], recursive=True):
+    for source in recursiveGlob(settings["datapath"], settings["hostfilename"]):
         with open(source, "r") as curFile:
             #Done in a cross-python way
             writeData(mergeFile, curFile.read())
 
-    for source in glob(settings["datapath"] + "/**/" + settings["sourcedatafilename"], recursive=True):
+    for source in recursiveGlob(settings["datapath"], settings["sourcedatafilename"]):
         updateFile = open(source, "r")
         updateData = json.load(updateFile)
         settings["sourcesdata"].append(updateData)
@@ -285,13 +287,13 @@ def createInitialFile():
     # spin the sources for extensions to the base file
     for source in settings["extensions"]:
         # filename = os.path.join(settings["extensionspath"], source, settings["hostfilename"])
-        for filename in glob(os.path.join(settings["extensionspath"], source) + "/**/" + settings["hostfilename"], recursive=True):
+        for filename in recursiveGlob(os.path.join(settings["extensionspath"], source), settings["hostfilename"]):
             with open(filename, "r") as curFile:
                 #Done in a cross-python way
                 writeData(mergeFile, curFile.read())
 
         # updateFilePath = os.path.join(settings["extensionspath"], source, settings["sourcedatafilename"])
-        for updateFilePath in glob( os.path.join(settings["extensionspath"], source) + "/**/" + settings["sourcedatafilename"], recursive=True):
+        for updateFilePath in recursiveGlob( os.path.join(settings["extensionspath"], source), settings["sourcedatafilename"]):
             updateFile = open(updateFilePath, "r")
             updateData = json.load(updateFile)
             settings["sourcesdata"].append(updateData)
@@ -543,6 +545,20 @@ def isValidDomainFormat(domain):
     else:
         return True
 
+# A version-independent glob(  ... "/**/" ... )
+def recursiveGlob(stem, filepattern):
+    if sys.version_info >= (3,5):
+        return glob(stem + "/**/" + filepattern, recursive=True)
+    else:
+        if stem == "*":
+            stem = "."
+        matches = []
+        for root, dirnames, filenames in os.walk(stem):
+            for filename in fnmatch.filter(filenames, filepattern):
+                matches.append(os.path.join(root, filename))
+    return matches
+
+
 # Colors
 class colors:
     PROMPT  = "\033[94m"
git clone https://git.99rst.org/PROJECT