#!/usr/bin/env python3 # # Usage: # # Python: subprocess.run(["python", "/home/honney/.bin/tracker.py", "add", "name"]) # Bash: /home/honney/.bin/tracker.py add my_script # import sys import csv import os DB_FILE = "/home/honney/.bin/data/tracker.csv" def load_data(): data = {} if not os.path.exists(DB_FILE): return data with open(DB_FILE, newline="") as f: reader = csv.reader(f) for row in reader: if len(row) != 2: continue name, count = row data[name] = int(count) return data def save_data(data): with open(DB_FILE, "w", newline="") as f: writer = csv.writer(f) for name, count in data.items(): writer.writerow([name, count]) def add_entry(name): data = load_data() data[name] = data.get(name, 0) + 1 save_data(data) # print(f"{name}: {data[name]}") def sub_entry(name, amount=1): data = load_data() if name not in data: print(f"{name} not found.") return data[name] -= amount if data[name] <= 0: del data[name] # remove entry completely # alternatively: data[name] = 0 save_data(data) def show_ranking(): data = load_data() if not data: print("No data yet.") return sorted_data = sorted(data.items(), key=lambda x: x[1], reverse=True) print("Ranking:") for i, (name, count) in enumerate(sorted_data, start=1): print(f"{i}. {name} - {count}") def main(): if len(sys.argv) < 2: print("Usage:") print(" tracker.py add ") print(" tracker.py sub ()") print(" tracker.py ranking") sys.exit(1) mode = sys.argv[1] if mode == "add": if len(sys.argv) < 3: print("Error: Missing name") sys.exit(1) name = sys.argv[2] add_entry(name) elif mode == "sub": if len(sys.argv) < 3: print("Error: Missing name") sys.exit(1) name = sys.argv[2] amount = 1 if len(sys.argv) >= 4: try: amount = int(sys.argv[3]) except ValueError: print("Error: amount must be a number") sys.exit(1) sub_entry(name, amount) elif mode == "ranking": show_ranking() else: print(f"Unknown mode: {mode}") sys.exit(1) if __name__ == "__main__": main()