mirror of
https://github.com/StevenBlack/hosts.git
synced 2026-10-04 22:05:39 +01:00
Merge pull request #1238 from ScriptTiger/correct-sorting
Unification of the sorting of the sources.
This commit is contained in:
@@ -41,6 +41,7 @@ from updateHostsFile import (
|
||||
query_yes_no,
|
||||
recursive_glob,
|
||||
remove_old_hosts_file,
|
||||
sort_sources,
|
||||
strip_rule,
|
||||
supports_color,
|
||||
update_all_sources,
|
||||
@@ -131,6 +132,80 @@ class TestGetDefaults(Base):
|
||||
# End Project Settings
|
||||
|
||||
|
||||
class TestSortSources(Base):
|
||||
def test_sort_sources_simple(self):
|
||||
given = [
|
||||
"sbc.io",
|
||||
"example.com",
|
||||
"github.com",
|
||||
]
|
||||
|
||||
expected = ["example.com", "github.com", "sbc.io"]
|
||||
|
||||
actual = sort_sources(given)
|
||||
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_live_data(self):
|
||||
given = [
|
||||
"data/KADhosts/update.json",
|
||||
"data/someonewhocares.org/update.json",
|
||||
"data/StevenBlack/update.json",
|
||||
"data/adaway.org/update.json",
|
||||
"data/URLHaus/update.json",
|
||||
"data/UncheckyAds/update.json",
|
||||
"data/add.2o7Net/update.json",
|
||||
"data/mvps.org/update.json",
|
||||
"data/add.Spam/update.json",
|
||||
"data/add.Dead/update.json",
|
||||
"data/malwaredomainlist.com/update.json",
|
||||
"data/Badd-Boyz-Hosts/update.json",
|
||||
"data/hostsVN/update.json",
|
||||
"data/yoyo.org/update.json",
|
||||
"data/add.Risk/update.json",
|
||||
"data/tiuxo/update.json",
|
||||
"extensions/gambling/update.json",
|
||||
"extensions/porn/clefspeare13/update.json",
|
||||
"extensions/porn/sinfonietta-snuff/update.json",
|
||||
"extensions/porn/tiuxo/update.json",
|
||||
"extensions/porn/sinfonietta/update.json",
|
||||
"extensions/fakenews/update.json",
|
||||
"extensions/social/tiuxo/update.json",
|
||||
"extensions/social/sinfonietta/update.json",
|
||||
]
|
||||
|
||||
expected = [
|
||||
"data/StevenBlack/update.json",
|
||||
"data/adaway.org/update.json",
|
||||
"data/add.2o7Net/update.json",
|
||||
"data/add.Dead/update.json",
|
||||
"data/add.Risk/update.json",
|
||||
"data/add.Spam/update.json",
|
||||
"data/Badd-Boyz-Hosts/update.json",
|
||||
"data/hostsVN/update.json",
|
||||
"data/KADhosts/update.json",
|
||||
"data/malwaredomainlist.com/update.json",
|
||||
"data/mvps.org/update.json",
|
||||
"data/someonewhocares.org/update.json",
|
||||
"data/tiuxo/update.json",
|
||||
"data/UncheckyAds/update.json",
|
||||
"data/URLHaus/update.json",
|
||||
"data/yoyo.org/update.json",
|
||||
"extensions/fakenews/update.json",
|
||||
"extensions/gambling/update.json",
|
||||
"extensions/porn/clefspeare13/update.json",
|
||||
"extensions/porn/sinfonietta/update.json",
|
||||
"extensions/porn/sinfonietta-snuff/update.json",
|
||||
"extensions/porn/tiuxo/update.json",
|
||||
"extensions/social/sinfonietta/update.json",
|
||||
"extensions/social/tiuxo/update.json",
|
||||
]
|
||||
|
||||
actual = sort_sources(given)
|
||||
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
|
||||
# Prompt the User
|
||||
class TestPromptForUpdate(BaseStdout, BaseMockDir):
|
||||
def setUp(self):
|
||||
|
||||
+43
-7
@@ -474,6 +474,34 @@ def prompt_for_move(final_file, **move_params):
|
||||
# End Prompt the User
|
||||
|
||||
|
||||
def sort_sources(sources):
|
||||
"""
|
||||
Sorts the sources.
|
||||
The idea is that all Steven Black's list, file or entries
|
||||
get on top and the rest sorted alphabetically.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
sources: list
|
||||
The sources to sort.
|
||||
"""
|
||||
|
||||
result = sorted(
|
||||
sources.copy(),
|
||||
key=lambda x: x.lower().replace("-", "").replace("_", "").replace(" ", ""),
|
||||
)
|
||||
|
||||
# Steven Black's repositories/files/lists should be on top!
|
||||
steven_black_positions = [
|
||||
x for x, y in enumerate(result) if "stevenblack" in y.lower()
|
||||
]
|
||||
|
||||
for index in steven_black_positions:
|
||||
result.insert(0, result.pop(index))
|
||||
|
||||
return result
|
||||
|
||||
|
||||
# Exclusion logic
|
||||
def display_exclusion_options(common_exclusions, exclusion_pattern, exclusion_regexes):
|
||||
"""
|
||||
@@ -641,7 +669,9 @@ def update_sources_data(sources_data, **sources_params):
|
||||
|
||||
source_data_filename = sources_params["sourcedatafilename"]
|
||||
|
||||
for source in recursive_glob(sources_params["datapath"], source_data_filename):
|
||||
for source in sort_sources(
|
||||
recursive_glob(sources_params["datapath"], source_data_filename)
|
||||
):
|
||||
update_file = open(source, "r", encoding="UTF-8")
|
||||
update_data = json.load(update_file)
|
||||
sources_data.append(update_data)
|
||||
@@ -649,7 +679,9 @@ def update_sources_data(sources_data, **sources_params):
|
||||
|
||||
for source in sources_params["extensions"]:
|
||||
source_dir = path_join_robust(sources_params["extensionspath"], source)
|
||||
for update_file_path in recursive_glob(source_dir, source_data_filename):
|
||||
for update_file_path in sort_sources(
|
||||
recursive_glob(source_dir, source_data_filename)
|
||||
):
|
||||
update_file = open(update_file_path, "r")
|
||||
update_data = json.load(update_file)
|
||||
|
||||
@@ -695,7 +727,7 @@ def update_all_sources(source_data_filename, host_filename):
|
||||
# The transforms we support
|
||||
transform_methods = {"jsonarray": jsonarray}
|
||||
|
||||
all_sources = recursive_glob("*", source_data_filename)
|
||||
all_sources = sort_sources(recursive_glob("*", source_data_filename))
|
||||
|
||||
for source in all_sources:
|
||||
update_file = open(source, "r", encoding="UTF-8")
|
||||
@@ -740,7 +772,9 @@ def create_initial_file():
|
||||
merge_file = tempfile.NamedTemporaryFile()
|
||||
|
||||
# spin the sources for the base file
|
||||
for source in recursive_glob(settings["datapath"], settings["hostfilename"]):
|
||||
for source in sort_sources(
|
||||
recursive_glob(settings["datapath"], settings["hostfilename"])
|
||||
):
|
||||
|
||||
start = "# Start {}\n\n".format(os.path.basename(os.path.dirname(source)))
|
||||
end = "# End {}\n\n".format(os.path.basename(os.path.dirname(source)))
|
||||
@@ -750,9 +784,11 @@ def create_initial_file():
|
||||
|
||||
# spin the sources for extensions to the base file
|
||||
for source in settings["extensions"]:
|
||||
for filename in recursive_glob(
|
||||
path_join_robust(settings["extensionspath"], source),
|
||||
settings["hostfilename"],
|
||||
for filename in sort_sources(
|
||||
recursive_glob(
|
||||
path_join_robust(settings["extensionspath"], source),
|
||||
settings["hostfilename"],
|
||||
)
|
||||
):
|
||||
with open(filename, "r") as curFile:
|
||||
write_data(merge_file, curFile.read())
|
||||
|
||||
Reference in New Issue
Block a user