From 5f9ea6f0b77bd582d35eac2997d57123c61b8d3c Mon Sep 17 00:00:00 2001 From: "Maxence G. de Montauzan" Date: Sat, 21 Jul 2018 15:37:38 +0200 Subject: [PATCH] Use an utils module --- phelp.py | 28 +------------------ pits.py | 82 +++++++++++++----------------------------------------- project.py | 6 ++-- task.py | 6 ++-- utils.py | 52 ++++++++++++++++++++++++++++++++++ 5 files changed, 81 insertions(+), 93 deletions(-) create mode 100644 utils.py diff --git a/phelp.py b/phelp.py index 2e37467..64a6f83 100644 --- a/phelp.py +++ b/phelp.py @@ -1,31 +1,5 @@ -import os import sys - - -def strstr(haystack, needle): - """ - Return a sub-string of haystack, going from first occurence of needle until the end. - Return None if not found. - - Arguments: - haystack {string} -- the entry string - needle {string} -- the part of string searched - - Returns: - string -- sub-string of haystack, starting from needle. None if not exist. - - Examples: - email = 'name@example.com' - domain = strstr(email, '@'); - print(domain) // Display : @example.com - """ - pos = haystack.find(needle) - if pos < 0: # not found - return None - - return haystack[pos:] - -# TODO Review help message / output / usage +from utils import strstr def handle_help(args, *_): if not args: diff --git a/pits.py b/pits.py index 9c49c14..be21afd 100644 --- a/pits.py +++ b/pits.py @@ -13,6 +13,8 @@ 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') @@ -23,46 +25,8 @@ SCHEMA_FILENAME = 'pits_schema.sql' PIT_VERSION = '0.0.1' SCHEMA_VERSION = 1 -def get_file_path(file_name): - return os.path.join(os.path.dirname(os.path.realpath(__file__)), file_name) - - -def strstr(haystack, needle): - """ - Return a sub-string of haystack, going from first occurence of needle until the end. - Return None if not found. - - Arguments: - haystack {string} -- the entry string - needle {string} -- the part of string searched - - Returns: - string -- sub-string of haystack, starting from needle. None if not exist. - - Examples: - email = 'name@example.com' - domain = strstr(email, '@'); - print(domain) // Display : @example.com - """ - pos = haystack.find(needle) - if pos < 0: # not found - return None - - return haystack[pos:] - -def create_connection(db_filename): - db_path = get_file_path(db_filename) - logging.debug("Try to connect to {}".format(db_path)) - try: - conn = sqlite3.connect(db_path) - return conn - except sqlite3.Error as sqlite3_error: - print(sqlite3_error) - - return None - -def init(): - db_path = get_file_path(DB_FILENAME) +def pits_init(): + db_path = utils.get_file_path(DB_FILENAME) logging.debug('Search database in {}'.format(db_path)) @@ -77,7 +41,7 @@ def init(): with sqlite3.connect(db_path) as conn: logging.info('Creating schema') - schema_path = get_file_path(SCHEMA_FILENAME) + schema_path = utils.get_file_path(SCHEMA_FILENAME) logging.debug('Schema file path: {}'.format(schema_path)) with open(schema_path, 'rt') as f: @@ -97,25 +61,19 @@ def init(): # conn.executescript(""" # insert into project values(1, 'me', 'test', 'in progress', 'now', 'now')""") -def info(_1, _2, conn): +def pits_info(_1, _2, conn): print('Pit version: {}'.format(PIT_VERSION)) - print('Pit file name: {}'.format(get_file_path(DB_FILENAME))) + 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(count_object(conn, 'project'))) - print('Tasks: {}'.format(count_object(conn, 'task'))) - print('Notes: {}'.format(count_object(conn, 'note'))) - print('Log entries: {}'.format(count_object(conn, 'action'))) + 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 count_object(conn, table_name): - query = "SELECT count(*) FROM " + table_name - cursor = conn.cursor() - cursor.execute(query) - return cursor.fetchone()[0] - -def version(*_): - print('pit version 0.1.0') +def pits_version(*_): + print('Pits version 0.1.0') def main(): cmd_handler = [ @@ -123,10 +81,10 @@ def main(): ('task', task.handle_task), ('note', note.handle_note), ('log', action.handle_action), - ('info', info), + ('info', pits_info), ('help', phelp.handle_help), - ('version', version), - ('init', init) + ('version', pits_version), + ('init', pits_init) ] candidate = -1 @@ -137,7 +95,7 @@ def main(): argv.append(None) for i in range(len(cmd_handler)): - if strstr(cmd_handler[i][0], argv[1]) == cmd_handler[i][0]: + if utils.strstr(cmd_handler[i][0], argv[1]) == cmd_handler[i][0]: if candidate < 0: candidate = i else: @@ -145,14 +103,14 @@ def main(): sys.exit(1) if candidate < 0: - print("Invalid command ({}), run '{} help' for help".format(argv[1], os.path.basename(__file__))) + print("Invalid command ({}), run '{} help' for help".format(argv[1], utils.get_pits_path())) sys.exit(1) if candidate == (len(cmd_handler) -1): - init() + pits_init() sys.exit(0) - conn = create_connection(DB_FILENAME) + conn = utils.create_connection(DB_FILENAME) last_action = action.read_current(conn) logging.debug('Last action: {}'.format(last_action)) logging.debug(argv) diff --git a/project.py b/project.py index 96d6541..baa52fc 100644 --- a/project.py +++ b/project.py @@ -14,6 +14,8 @@ from action import TypeAction from args import get_string_arg from args import arg_number +from utils import get_pits_path + class Project: def __init__(self, status = None): self.name = None @@ -112,8 +114,8 @@ def edit_project(project, project_id, conn): if not update_args: print("nothing to update") - print("Tips: if you want to set an active project, just do '{} project '" - .format(os.path.basename(sys.argv[0]))) + print("Tips: if you want to active a project, just do '{} project '" + .format(get_pits_path())) sys.exit(1) logging.debug('Project update args: {}'.format(update_args)) diff --git a/task.py b/task.py index 35c4694..1d5a02b 100644 --- a/task.py +++ b/task.py @@ -13,6 +13,8 @@ from action import set_active from args import get_string_arg from args import arg_number +from utils import get_pits_path + class Task: def __init__(self, status = None, priority = None): self.name = None @@ -160,8 +162,8 @@ def edit_task(task, task_id, project_id, conn): if not update_args: print("nothing to update") - print("Tips: if you want to set an active task, just do '{} task '" - .format(os.path.basename(sys.argv[0]))) + print("Tips: if you want to activate a task, just do '{} task '" + .format(get_pits_path())) sys.exit(1) logging.debug('Task update args: {}'.format(update_args)) diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..23b1259 --- /dev/null +++ b/utils.py @@ -0,0 +1,52 @@ +import os +import sys +import sqlite3 +import logging + +def get_file_path(file_name): + return os.path.join(os.path.dirname(os.path.realpath(__file__)), file_name) + + +def get_pits_path(): + return os.path.basename(sys.argv[0]) + + +def strstr(haystack, needle): + """ + Return a sub-string of haystack, going from first occurence of needle until the end. + Return None if not found. + + Arguments: + haystack {string} -- the entry string + needle {string} -- the part of string searched + + Returns: + string -- sub-string of haystack, starting from needle. None if not exist. + + Examples: + email = 'name@example.com' + domain = strstr(email, '@'); + print(domain) // Display : @example.com + """ + pos = haystack.find(needle) + if pos < 0: # not found + return None + + return haystack[pos:] + +def create_connection(db_filename): + db_path = get_file_path(db_filename) + logging.debug("Try to connect to {}".format(db_path)) + try: + conn = sqlite3.connect(db_path) + return conn + except sqlite3.Error as sqlite3_error: + print(sqlite3_error) + + return None + +def count_object(conn, table_name): + query = "SELECT count(*) FROM " + table_name + cursor = conn.cursor() + cursor.execute(query) + return cursor.fetchone()[0] \ No newline at end of file