Files
2026-04-24 00:47:51 +02:00

116 lines
2.4 KiB
Python
Executable File

#!/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 <name>")
print(" tracker.py sub <name> (<amount>)")
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()