142 lines
3.9 KiB
Python
142 lines
3.9 KiB
Python
import sqlite3
|
|
import os
|
|
import argparse
|
|
import json
|
|
import getpass
|
|
import datetime
|
|
import logging
|
|
import sys
|
|
|
|
import project
|
|
import action
|
|
import task
|
|
import note
|
|
import phelp
|
|
|
|
import utils
|
|
|
|
# logging.basicConfig(level=logging.ERROR, format='%(levelname)7s :: %(message)s')
|
|
# logging.basicConfig(level=logging.DEBUG, format='%(asctime)s :: %(levelname)s :: %(message)s')
|
|
logging.basicConfig(
|
|
level=logging.ERROR,
|
|
format="%(asctime)s :: {%(filename)10s:%(lineno)3d} :: %(funcName)s :: %(levelname)s :: %(message)s",
|
|
)
|
|
|
|
DB_FILENAME = "pits.db"
|
|
SCHEMA_FILENAME = "pits_schema.sql"
|
|
|
|
PIT_VERSION = "0.0.1"
|
|
SCHEMA_VERSION = 1
|
|
|
|
|
|
def pits_init():
|
|
db_path = utils.get_file_path(DB_FILENAME)
|
|
|
|
logging.debug("Search database in {}".format(db_path))
|
|
|
|
if os.path.exists(db_path):
|
|
valid = {"yes": True, "y": True, "ye": True}
|
|
print(
|
|
"{} already exists, do you want to override it? [y/N]:".format(db_path),
|
|
end="",
|
|
)
|
|
choice = input().lower()
|
|
if choice in valid:
|
|
os.remove(db_path)
|
|
else:
|
|
sys.exit(0)
|
|
|
|
with sqlite3.connect(db_path) as conn:
|
|
logging.info("Creating schema")
|
|
schema_path = utils.get_file_path(SCHEMA_FILENAME)
|
|
logging.debug("Schema file path: {}".format(schema_path))
|
|
|
|
with open(schema_path, "rt") as f:
|
|
schema = f.read()
|
|
conn.executescript(schema)
|
|
|
|
action_query = """
|
|
INSERT INTO action (username, action, message)
|
|
VALUES (?, ?, ?);
|
|
"""
|
|
action_msg = "Initialized pits database - DB Schema version: {}".format(
|
|
SCHEMA_VERSION
|
|
)
|
|
conn.execute(action_query, (getpass.getuser(), "init", action_msg))
|
|
|
|
print("Created database " + db_path)
|
|
|
|
# logging.info('Inserting initial data')
|
|
# conn.executescript("""
|
|
# insert into project values(1, 'me', 'test', 'in progress', 'now', 'now')""")
|
|
|
|
|
|
def pits_info(_1, _2, conn):
|
|
print("Pit version: {}".format(PIT_VERSION))
|
|
print("Pit file name: {}".format(utils.get_file_path(DB_FILENAME)))
|
|
print("Created by: {} on {}".format(*action.get_first_action(conn)))
|
|
print("Last updated by: {} on {}".format(*action.get_last_action(conn)))
|
|
print("Schema version: {}".format(SCHEMA_VERSION))
|
|
print("Projects: {}".format(utils.count_object(conn, "project")))
|
|
print("Tasks: {}".format(utils.count_object(conn, "task")))
|
|
print("Notes: {}".format(utils.count_object(conn, "note")))
|
|
print("Log entries: {}".format(utils.count_object(conn, "action")))
|
|
|
|
|
|
def pits_version(*_):
|
|
print("Pits version 0.1.0")
|
|
|
|
|
|
def main():
|
|
cmd_handler = [
|
|
("project", project.handle_project),
|
|
("task", task.handle_task),
|
|
("note", note.handle_note),
|
|
("log", action.handle_action),
|
|
("info", pits_info),
|
|
("help", phelp.handle_help),
|
|
("version", pits_version),
|
|
("init", pits_init),
|
|
]
|
|
candidate = -1
|
|
|
|
argv = sys.argv
|
|
|
|
if len(argv) == 1:
|
|
argv.append("help")
|
|
argv.append(None)
|
|
|
|
for i in range(len(cmd_handler)):
|
|
if utils.strstr(cmd_handler[i][0], argv[1]) == cmd_handler[i][0]:
|
|
if candidate < 0:
|
|
candidate = i
|
|
else:
|
|
print("Ambiguous command ({})".format(argv[1]))
|
|
sys.exit(1)
|
|
|
|
if candidate < 0:
|
|
print(
|
|
"Invalid command ({}), run '{} help' for help".format(
|
|
argv[1], utils.get_pits_path()
|
|
)
|
|
)
|
|
sys.exit(1)
|
|
|
|
if candidate == (len(cmd_handler) - 1):
|
|
pits_init()
|
|
sys.exit(0)
|
|
|
|
conn = utils.create_connection(DB_FILENAME)
|
|
last_action = action.read_current(conn)
|
|
logging.debug("Last action: {}".format(last_action))
|
|
logging.debug(argv)
|
|
logging.debug(argv[2:])
|
|
cmd_handler[candidate][1](argv[2:], last_action, conn)
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|