Refresh and added usage tracking
This commit is contained in:
Executable
+115
@@ -0,0 +1,115 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user