Skip to content

Commit

Permalink
Merge pull request #14 from JuLi0n21
Browse files Browse the repository at this point in the history
minor refactoring
  • Loading branch information
MIOGMIOG authored Sep 30, 2024
2 parents c7bffae + 2af0542 commit b151944
Showing 1 changed file with 62 additions and 77 deletions.
139 changes: 62 additions & 77 deletions build.py
Original file line number Diff line number Diff line change
@@ -1,105 +1,60 @@
import datetime

def generate_blocklist(header_file, sitelist_file, output_file, format, plus_version: bool, sitelist_file_plus='', filterlist_file_ublock_only=''):
def generate_blocklist(output_file, format, is_sitelist_plus: bool = False, filterlist_file_ublock_only:str = ''):
"""
Combines and modifies content of two files into a new file,
replacing placeholders, counting entries and adding text characters for proper format support.
"""
header_file = "header.txt"
sitelist_file = "sitelist.txt"
sitelist_file_plus = "sitelist-plus.txt"
# Get current time in desired format with timezone-aware object
current_time = datetime.datetime.now(datetime.timezone.utc).strftime("%d %b %Y %H:%M UTC")

# Count entries in filtered file, ignoring lines starting with "!"
num_entries = 0
with open(sitelist_file, 'r') as f_filtered:
for line in f_filtered:
if not line.startswith('!'):
num_entries += 1
if plus_version == True:
with open(sitelist_file_plus, 'r') as f_filtered_plus:
for line in f_filtered_plus:
if not line.startswith('!'):
num_entries += 1
num_entries += countUncommentedLines(sitelist_file)
if (is_sitelist_plus):
num_entries += countUncommentedLines(sitelist_file_plus)
if format == 'ublock':
with open(filterlist_file_ublock_only, 'r') as f_filtered_ublock:
for line in f_filtered_ublock:
if not line.startswith('!'):
num_entries += 1
num_entries += countUncommentedLines(filterlist_file_ublock_only)

# Open header and combined files
with open(header_file, 'r') as f_header, open(sitelist_file, 'r') as f_domains, open(output_file, 'w') as f_combined:
with open(header_file, 'r') as f_header, open(output_file, 'w') as f_combined:
header_lines = f_header.readlines()

# Replace placeholders in header lines
for i, line in enumerate(header_lines):
if line.startswith('Title:'):
if plus_version == True:
header_lines[i] = line.replace('${filterlist_edition}', 'Plus')
elif plus_version == False:
header_lines[i] = line.replace('${filterlist_edition}', 'Basic')
if line.startswith('Description:'):
if plus_version == True:
header_lines[i] = line.replace('${sites_blocked}', 'malicious and not recommended')
elif plus_version == False:
header_lines[i] = line.replace('${sites_blocked}', 'malicious')
if line.startswith('Last modified:'):
header_lines[i] = line.replace('${filterlist_edition}', 'Plus' if is_sitelist_plus else 'Basic')
elif line.startswith('Description:'):
header_lines[i] = line.replace('${sites_blocked}', 'malicious and not recommended' if is_sitelist_plus else 'malicious')
elif line.startswith('Last modified:'):
header_lines[i] = line.replace('${current_time}', current_time)
elif line.startswith('Entries:'):
header_lines[i] = line.replace('${num_entries}', str(num_entries))
elif line.startswith('Format:'):
header_lines[i] = line.replace('${format}', format)

# Add comment symbols before every header line
if format == 'ublock' or format == 'abp':
header_lines[i] = ('! ' + header_lines[i])
if format == 'hosts' or format == 'domains' or format == 'wildcard_domains' or format == 'wildcard_urls':
header_lines[i] = ('# ' + header_lines[i])

# Add proper filterlist formatting to the domains
domains_lines = f_domains.readlines()
for i, line in enumerate(domains_lines):
if not line.startswith('!'):
if format == 'ublock' or format == 'abp':
domains_lines[i] = line.replace("\n", '')
domains_lines[i] = ('||' + domains_lines[i] + '^' + "\n")
elif format == 'hosts':
domains_lines[i] = ('0.0.0.0 ' + domains_lines[i])
elif format == 'wildcard_domains':
domains_lines[i] = ('*.' + domains_lines[i])
elif format == 'wildcard_urls':
domains_lines[i] = line.replace("\n", '')
domains_lines[i] = ('*://*.' + domains_lines[i] + '/*' + "\n")
if line.startswith('!'):
if format == 'hosts' or format == 'domains' or format == 'wildcard_domains' or format == 'wildcard_urls':
domains_lines[i] = line.replace('!', '#')
line.format()

# Add proper filterlist formatting to the plus version extra domains
if plus_version == True:
with open(sitelist_file_plus, 'r') as f_domains_plus:
domains_lines_plus = f_domains_plus.readlines()
for i, line in enumerate(domains_lines_plus):
if not line.startswith('!'):
if format == 'ublock' or format == 'abp':
domains_lines_plus[i] = line.replace("\n", '')
domains_lines_plus[i] = ('||' + domains_lines_plus[i] + '^' + "\n")
elif format == 'hosts':
domains_lines_plus[i] = ('0.0.0.0 ' + domains_lines_plus[i])
elif format == 'wildcard_domains':
domains_lines_plus[i] = ('*.' + domains_lines_plus[i])
elif format == 'wildcard_urls':
domains_lines_plus[i] = line.replace("\n", '')
domains_lines_plus[i] = ('*://*.' + domains_lines_plus[i] + '/*' + "\n")
if line.startswith('!'):
if format == 'hosts' or format == 'domains' or format == 'wildcard_domains' or format == 'wildcard_urls':
domains_lines_plus[i] = line.replace('!', '#')
line.format()
# Add proper filterlist formatting
domains_lines = formatFile(sitelist_file, format)
if (is_sitelist_plus):
domains_lines_plus = formatFile(sitelist_file_plus, format)

# Write modified header and filtered content
if format == 'abp':
f_combined.writelines("[Adblock Plus]\n")
f_combined.writelines(header_lines)
f_combined.writelines("\n")
f_combined.writelines(domains_lines)
if plus_version == True:
if (is_sitelist_plus):
if format == 'domains' or format == 'hosts' or format == 'wildcard_domains':
f_combined.writelines("\n")
f_combined.writelines(domains_lines_plus)
Expand All @@ -108,20 +63,50 @@ def generate_blocklist(header_file, sitelist_file, output_file, format, plus_ver

print("Generated filterlist with " + format + " format as " + output_file + "!")

# Add proper filterlist formatting to the domains
def formatFile(filename: str, format: str):
with open(filename, 'r') as f:
file = f.readlines()
for i, line in enumerate(file):
if not line.startswith('!'):
if format == 'ublock' or format == 'abp':
file[i] = line.replace("\n", '')
file[i] = ('||' + file[i] + '^' + "\n")
elif format == 'hosts':
file[i] = ('0.0.0.0 ' + file[i])
elif format == 'wildcard_domains':
file[i] = ('*.' + file[i])
elif format == 'wildcard_urls':
file[i] = line.replace("\n", '')
file[i] = ('*://*.' + file[i] + '/*' + "\n")
else:
if format == 'hosts' or format == 'domains' or format == 'wildcard_domains' or format == 'wildcard_urls':
file[i] = line.replace('!', '#')
line.format()
return file

def countUncommentedLines(filename: str) -> int:
count = 0
with open(filename, 'r') as file:
for line in file:
if not line.startswith('!'):
count += 1
return count

# Generate Header to make filterlist
print("Generating filterlist.")
# Generate Plus version filterlist files
generate_blocklist("header.txt", "sitelist.txt", "filterlist.txt", "ublock", True, "sitelist-plus.txt", "filters-ublock-only.txt")
generate_blocklist("header.txt", "sitelist.txt", "filterlist-abp.txt", "abp", True, "sitelist-plus.txt")
generate_blocklist("header.txt", "sitelist.txt", "filterlist-domains.txt", "domains", True, "sitelist-plus.txt")
generate_blocklist("header.txt", "sitelist.txt", "filterlist-wildcard-domains.txt", "wildcard_domains", True, "sitelist-plus.txt")
generate_blocklist("header.txt", "sitelist.txt", "filterlist-wildcard-urls.txt", "wildcard_urls", True, "sitelist-plus.txt")
generate_blocklist("header.txt", "sitelist.txt", "filterlist-hosts.txt", "hosts", True, "sitelist-plus.txt")
generate_blocklist("filterlist.txt", "ublock", True, "filters-ublock-only.txt")
generate_blocklist("filterlist-abp.txt", "abp", True)
generate_blocklist("filterlist-domains.txt", "domains", True)
generate_blocklist("filterlist-wildcard-domains.txt", "wildcard_domains", True)
generate_blocklist("filterlist-wildcard-urls.txt", "wildcard_urls", True)
generate_blocklist("filterlist-hosts.txt", "hosts", True)
# Generate Basic version filterlist files
generate_blocklist("header.txt", "sitelist.txt", "filterlist-basic.txt", "ublock", False, filterlist_file_ublock_only="filters-ublock-only.txt")
generate_blocklist("header.txt", "sitelist.txt", "filterlist-basic-abp.txt", "abp", False)
generate_blocklist("header.txt", "sitelist.txt", "filterlist-basic-domains.txt", "domains", False)
generate_blocklist("header.txt", "sitelist.txt", "filterlist-basic-wildcard-domains.txt", "wildcard_domains", False)
generate_blocklist("header.txt", "sitelist.txt", "filterlist-basic-wildcard-urls.txt", "wildcard_urls", False)
generate_blocklist("header.txt", "sitelist.txt", "filterlist-basic-hosts.txt", "hosts", False)
print("Build Finished")
generate_blocklist("filterlist-basic.txt", "ublock", False, "filters-ublock-only.txt")
generate_blocklist("filterlist-basic-abp.txt", "abp")
generate_blocklist("filterlist-basic-domains.txt", "domains")
generate_blocklist("filterlist-basic-wildcard-domains.txt", "wildcard_domains")
generate_blocklist("filterlist-basic-wildcard-urls.txt", "wildcard_urls")
generate_blocklist("filterlist-basic-hosts.txt", "hosts")
print("Build Finished")

0 comments on commit b151944

Please sign in to comment.