diff --git a/action.py b/action.py new file mode 100644 index 0000000..cc93e34 --- /dev/null +++ b/action.py @@ -0,0 +1,18 @@ +import sqlite3 +import os +import argparse +import json +import getpass +import datetime +import logging +import action + +def create_action(cursor, project_id = '', task_id = '', note_id = '', message = ''): + query = """ + INSERT INTO action (project_id, task_id, note_id, username, message, created_at) + VALUES (?, ?, ?, ?, ?, ?); + """ + + cursor.execute(query, (project_id, task_id, note_id, getpass.getuser(), message, datetime.datetime.now(),)) + + logging.debug('created action') \ No newline at end of file diff --git a/pits.py b/pits.py index 4ab739c..654027e 100644 --- a/pits.py +++ b/pits.py @@ -6,6 +6,9 @@ import getpass import datetime import logging +import project +import action + # logging.basicConfig(level=logging.DEBUG, format='%(asctime)s :: %(levelname)s :: %(message)s') logging.basicConfig(level=logging.DEBUG, format='%(levelname)7s :: %(message)s') @@ -15,95 +18,6 @@ def info(): def help(args, last_action): logging.info('help function') -def handle_project(args, last_action): - logging.info('> handle project') - logging.debug('args: args') - - status = 'active' - if args.status: - status = args.status - - do_something = False - - if args.create_name: - do_something = True - # TODO Project is same name is forbidden - logging.info('>> Create project') - - query = """ - INSERT INTO project (username, name, status, created_at) - VALUES (?, ?, ?, ?); - """ - - with sqlite3.connect(db_filename) as conn: - cursor = conn.cursor() - cursor.execute(query, (getpass.getuser(), args.create_name, status, datetime.datetime.now(),)) - - project_id = cursor.lastrowid - - create_action(cursor, project_id=project_id) - - print('created project {}: {} (status: {})'.format(project_id, args.create_name, status)) - if args.delete_id: - do_something = True - logging.info('>> Remove project') - - query = """ - DELETE FROM project - WHERE id = ?; - """ - - with sqlite3.connect(db_filename) as conn: - cursor = conn.cursor() - cursor.execute(query, (args.delete_id,)) - if cursor.rowcount != 1: - logging.error('DELETE FAILED') - print('deleted project {}: {}'.format(args.delete_id, 'project_name')) - if args.edit_id: - project_id = args.edit_id - do_something = True - logging.info('>> Edit project') - - update_args = {} - if args.status: - update_args['status'] = args.status - if args.edit_name: - update_args['name'] = args.edit_name - - query = 'UPDATE project SET {} WHERE id = ?' - query = query.format(', '.join("%s = '%s'" % (k, v) for k, v in update_args.items())) - logging.debug('update project query: ' + query) - - with sqlite3.connect(db_filename) as conn: - cursor = conn.cursor() - if update_args: - logging.debug('Do a project update') - cursor.execute(query, (project_id,)) - - log_args = ', '.join("%s: '%s'" % (k, v) for k, v in update_args.items()) - print('updated project {}: ({})'.format(project_id, log_args)) - else: - print('updated project {}: set active project') - - create_action(cursor, project_id, message = 'update ' + str(update_args)) - - if not do_something: - logging.info('>> No arguments') - query = "SELECT id, username, name, status, created_at FROM project;" - with sqlite3.connect(db_filename) as conn: - cursor = conn.cursor() - cursor.execute(query) - for row in cursor.fetchall(): - project_id, username, name, status, date = row - nb_task = 0 - current_project = ' ' - if last_action and last_action[0] == project_id: current_project = '*' - print('{} {:2d}: ({:16}) | {} | {} ({} tasks )'.format(current_project, project_id, username, status, name, nb_task)) - # TODO Print creation date - - # desired output - #created project 3: toto (status: active) - def handle_note(args): logging.info('>> handle note') @@ -117,16 +31,6 @@ def handle_action(args, last_action): result = row logging.debug(result) -def create_action(cursor, project_id = '', task_id = '', note_id = '', message = ''): - query = """ - INSERT INTO action (project_id, task_id, note_id, username, message, created_at) - VALUES (?, ?, ?, ?, ?, ?); - """ - - cursor.execute(query, (project_id, task_id, note_id, getpass.getuser(), message, datetime.datetime.now(),)) - - logging.debug('created action') - def read_last_action(): logging.info('> last_action') # query = 'SELECT * FROM action WHERE id = (SELECT MAX(id) FROM action' @@ -173,7 +77,7 @@ group_project.add_argument('-d', type=int, dest='delete_id', nargs='?', const=-1 parser_project.add_argument('-n', type=str, dest='edit_name', metavar='name', help='Edit: new name of project') parser_project.add_argument('-s', type=str, dest='status', metavar='status') parser_project.add_argument('-q', type=int) -parser_project.set_defaults(func=handle_project) +parser_project.set_defaults(func=project.handle_project) parser_note = subparsers.add_parser('note') parser_note.add_argument('-c', type=str) @@ -191,4 +95,4 @@ args = parser.parse_args() last_action = read_last_action() logging.debug('Last action: {}'.format(last_action)) -args.func(args, last_action) +args.func(args, last_action) \ No newline at end of file diff --git a/project.py b/project.py new file mode 100644 index 0000000..5a09c29 --- /dev/null +++ b/project.py @@ -0,0 +1,102 @@ +import sqlite3 +import os +import argparse +import json +import getpass +import datetime +import logging +import action + +db_filename = 'pits.db' +schema_filename = 'pits_schema.sql' + +def handle_project(args, last_action): + logging.info('> handle project') + logging.debug('args: args') + + status = 'active' + if args.status: + status = args.status + + do_something = False + + if args.create_name: + do_something = True + # TODO Project is same name is forbidden + logging.info('>> Create project') + + query = """ + INSERT INTO project (username, name, status, created_at) + VALUES (?, ?, ?, ?); + """ + + with sqlite3.connect(db_filename) as conn: + cursor = conn.cursor() + cursor.execute(query, (getpass.getuser(), args.create_name, status, datetime.datetime.now(),)) + + project_id = cursor.lastrowid + + action.create_action(cursor, project_id=project_id) + + print('created project {}: {} (status: {})'.format(project_id, args.create_name, status)) + + if args.delete_id: + do_something = True + logging.info('>> Remove project') + + query = """ + DELETE FROM project + WHERE id = ?; + """ + + with sqlite3.connect(db_filename) as conn: + cursor = conn.cursor() + cursor.execute(query, (args.delete_id,)) + if cursor.rowcount != 1: + logging.error('DELETE FAILED') + print('deleted project {}: {}'.format(args.delete_id, 'project_name')) + + if args.edit_id: + project_id = args.edit_id + do_something = True + logging.info('>> Edit project') + + update_args = {} + if args.status: + update_args['status'] = args.status + if args.edit_name: + update_args['name'] = args.edit_name + + query = 'UPDATE project SET {} WHERE id = ?' + query = query.format(', '.join("%s = '%s'" % (k, v) for k, v in update_args.items())) + logging.debug('update project query: ' + query) + + with sqlite3.connect(db_filename) as conn: + cursor = conn.cursor() + if update_args: + logging.debug('Do a project update') + cursor.execute(query, (project_id,)) + + log_args = ', '.join("%s: '%s'" % (k, v) for k, v in update_args.items()) + print('updated project {}: ({})'.format(project_id, log_args)) + else: + print('updated project {}: set active project') + + action.create_action(cursor, project_id, message = 'update ' + str(update_args)) + + if not do_something: + logging.info('>> No arguments') + query = "SELECT id, username, name, status, created_at FROM project;" + with sqlite3.connect(db_filename) as conn: + cursor = conn.cursor() + cursor.execute(query) + for row in cursor.fetchall(): + project_id, username, name, status, date = row + nb_task = 0 + current_project = ' ' + if last_action and last_action[0] == project_id: current_project = '*' + print('{} {:2d}: ({:16}) | {} | {} ({} tasks )'.format(current_project, project_id, username, status, name, nb_task)) + # TODO Print creation date + + # desired output + #created project 3: toto (status: active) \ No newline at end of file