#!/usr/bin/env python # Script by Steven Black # https://github.com/StevenBlack # # This Python script will update the readme files in this repo. import json import os import time from string import Template # Project Settings BASEDIR_PATH = os.path.dirname(os.path.realpath(__file__)) README_TEMPLATE = os.path.join(BASEDIR_PATH, 'readme_template.md') README_FILENAME = 'readme.md' README_DATA_FILENAME = "readmeData.json" def main(): s = Template('${description} | [Readme](https://github.com/StevenBlack/' 'hosts/blob/master/${location}readme.md) | ' '[link](https://raw.githubusercontent.com/StevenBlack/' 'hosts/master/${location}hosts) | ' '${fmtentries} | ' '[link](http://sbc.io/hosts/${location}hosts)') with open(README_DATA_FILENAME, 'r') as f: data = json.load(f) keys = list(data.keys()) # Sort by the number of en-dashes in the key # and then by the key string itself. keys.sort(key=lambda item: (item.count("-"), item)) toc_rows = "" for key in keys: data[key]["fmtentries"] = "{:,}".format(data[key]["entries"]) if key == "base": data[key]["description"] = 'Unified hosts = **(adware + malware)**' else: data[key]["description"] = ('Unified hosts **+ ' + key.replace("-", " + ") + '**') toc_rows += s.substitute(data[key]) + "\n" row_defaults = { "name": "", "description": "", "homeurl": "", "frequency": "", "issues": "", "url": "", "license": "", "issues": ""} t = Template('${name} | ${description} |[link](${homeurl})' ' | [raw](${url}) | ${frequency} | ${license} | [issues](${issues}) ') for key in keys: extensions = key.replace("-", ", ") extensions_str = "* Extensions: **" + extensions + "**." extensions_header = "with " + extensions + " extensions" source_rows = "" source_list = data[key]["sourcesdata"] for source in source_list: this_row = {} this_row.update(row_defaults) this_row.update(source) source_rows += t.substitute(this_row) + "\n" with open(os.path.join(data[key]["location"], README_FILENAME), "wt") as out: for line in open(README_TEMPLATE): line = line.replace('@GEN_DATE@', time.strftime("%B %d %Y", time.gmtime())) line = line.replace('@EXTENSIONS@', extensions_str) line = line.replace('@EXTENSIONS_HEADER@', extensions_header) line = line.replace('@NUM_ENTRIES@', "{:,}".format(data[key]["entries"])) line = line.replace('@SUBFOLDER@', os.path.join(data[key]["location"], '')) line = line.replace('@TOCROWS@', toc_rows) line = line.replace('@SOURCEROWS@', source_rows) out.write(line) if __name__ == "__main__": main()