"""
Counter using an SQLite backend
--list list all the counters
--start name creates the counter for 'name'
name counts for 'name'
"""
import sys
import os
import argparse
import sqlite3
database_file = "counter.db"
def list_counters(crs):
print('List counters:')
for name, count in crs.execute("SELECT name, count FROM counters"):
print(f"{name}: {count}")
def get_counter(crs, name):
crs.execute("SELECT count FROM counters WHERE name = ?", (name,))
line = crs.fetchone()
if line is None:
return None
return line[0]
def increase_counter(conn, crs, name):
counter = get_counter(crs, name)
if counter is None:
print(f"Invalid counter name '{name}' use the --start flag to start a new counter")
return
counter += 1
crs.execute("UPDATE counters SET count=? WHERE name = ?", (counter, name))
conn.commit()
print(f"{name} {counter}")
def start_counter(conn, crs, name):
counter = get_counter(crs, name)
if counter is not None:
print(f"Counter {name} already exists")
return
try:
crs.execute("INSERT INTO counters (name, count) VALUES(?, ?)", (name, 0))
conn.commit()
except sqlite3.IntegrityError as err:
print(f"Name '{name}' already exists")
def get_arguments():
parser = argparse.ArgumentParser()
parser.add_argument('--list', action='store_true')
parser.add_argument('--start', action='store_true')
parser.add_argument('name', nargs="?")
args = parser.parse_args()
if args.name is None and not args.list:
parser.print_help()
exit()
return args
def main():
args = get_arguments()
with sqlite3.connect(database_file) as conn:
crs = conn.cursor()
try:
crs.execute('''CREATE TABLE counters (
id PRIMARY KEY,
name VARCRCHAR(100) UNIQUE NOT NULL,
count INTEGER NOT NULL
)''')
except sqlite3.OperationalError as err:
pass
#print(f'sqlite error: {err.args[0]}')
if args.list:
list_counters(crs)
return
if args.start and args.name:
start_counter(conn, crs, args.name)
return
if args.name:
increase_counter(conn, crs, args.name)
return
main()
#print "TODO get the value of 'name' from the database"
# if it was not there then add
#try:
# c.execute('''INSERT INTO companies (name) VALUES ('Stonehenge')''')
#except sqlite3.IntegrityError as e:
# print 'sqlite error: ', e.args[0] # column name is not unique
#conn.commit()
#conn.close()
#print "done"