From 9c88194369311d285eca07e05da982aa1382fec9 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Tue, 30 Sep 2025 18:24:17 +0200 Subject: [PATCH] add generation script for unique installs --- code/unique.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ justfile | 5 +++++ 2 files changed, 61 insertions(+) create mode 100644 code/unique.py diff --git a/code/unique.py b/code/unique.py new file mode 100644 index 0000000..eddf419 --- /dev/null +++ b/code/unique.py @@ -0,0 +1,56 @@ +import csv +import json +from pathlib import Path + + +def unique_install_csv(input_dir: Path, output_dir: Path) -> None: + output_file = output_dir / "unique_installs.csv" + with open(output_file, "w") as fw: + writer = csv.writer(fw) + writer.writerow(["date", "unique"]) + + for j in input_dir.glob("*.json"): + with open(j) as fr: + date = j.stem + data: dict[str, object] = {} + try: + data = json.load(fr) + except json.JSONDecodeError: + print(f"WARN: Could not decode JSON data for file {j}") + continue + + if "UniqueInstalls" not in data or not isinstance( + data["UniqueInstalls"], int + ): + print( + f"WARN: No correct json structure containing 'UniqueInstalls' field in file {j}" + ) + continue + + p_date = date + p_count = data["UniqueInstalls"] + writer.writerow([p_date, p_count]) + + +def ensure_dirs(input_dir: Path, output_dir: Path): + if not input_dir.is_dir(): + raise ValueError + output_dir.mkdir(exist_ok=True, parents=True) + + +def main(input: str, output: str) -> None: + input_dir = Path(input) + output_dir = Path(output) + ensure_dirs(input_dir, output_dir) + unique_install_csv(input_dir, output_dir) + + +if __name__ == "__main__": + import sys + + if not len(sys.argv) == 3: + print("Please provide exactly one input directory and one output directory.") + sys.exit(1) + inp = sys.argv[1] + out = sys.argv[2] + main(inp, out) diff --git a/justfile b/justfile index 411b5b6..a40ee33 100644 --- a/justfile +++ b/justfile @@ -1,2 +1,7 @@ +default: kernels unique + kernels: python code/kernels.py input output + +unique: + python ./code/unique.py input output