PK! qhello_todo/__init__.py__version__ = '0.1.0' PK!)hello_todo/cli.pyimport click import os if __name__ == '__main__': from hello_todo import db else: from . import db @click.command() def todo_lists(): results = db.get_all_todolist() print("%s|%s" % ("name".center(20), "description".center(20))) print("%s+%s" % ("-" * 20, "-" * 20)) for r in results: name = r["name"] desc = r["description"] or "" print("%s|%s" % (name.center(20), desc.center(20))) @click.command() @click.option("-l", "--todolist_id", help="Todo list id") def todo_list(todolist_id): todolist_name = db.get_todolist(todolist_id)["name"] results = db.get_todos(todolist_id) print("** %s **" % todolist_name.upper()) print( "%s|%s|%s|%s" % ("status".center(6), "deadline".center(25), "name".center(20), "description".center(20)) ) print("%s+%s+%s+%s" % ("-" * 6, "-" * 25, "-" * 20, "-" * 20)) for r in results: status = "x" if r["status"] else " " deadline = r["deadline"] name = r["name"] description = r["description"] print( "%s|%s|%s|%s" % (status.center(6), deadline.center(25), name.center(20), description.center(20)) ) @click.command() def init_todo(): db.init_db() click.echo("initialized db at %s", os.path.join(os.environ["HOME"], ".todolist.db")) @click.command() @click.option("-n", "--name", help="Todo list name") @click.option("-d", "--description", default=None, help="Todo list description") def add_todolist(name, description): db.add_todolist(name, description) @click.command() @click.option("-n", "--name", help="Todo name") @click.option("-l", "--todolist_id", help="Todo list id") @click.option("-x", "--deadline", default=None, help="Deadline in format YYYY-MM-dd hh:mm:ss.sss") @click.option("-d", "--description", default=None, help="Todo description") def add_todo(name, todolist_id, deadline, description): db.add_todo(name, todolist_id, description, deadline) if __name__ == "__main__": todo_list() PK!ǑAhello_todo/db.pyimport sqlite3 import os import pkg_resources def get_db(db_path=None): """ returns a connection to the database """ db_path = db_path or os.path.join(os.environ["HOME"], ".todolist.db") conn = sqlite3.connect(db_path) conn.row_factory = sqlite3.Row return conn def init_db(): """ initialize database """ conn = get_db() query = pkg_resources.resource_string(__name__, "init_db.sql") conn.executescript(query.decode("utf-8")) def add_todolist(name, description=None): """ add a todolist """ conn = get_db() with conn: conn.execute("INSERT INTO todolist (name, description) values (?, ?)", (name, description)) def add_todo(name, todolist_id, description=None, deadline=None, status=0): """ add a todo to a todolist """ conn = get_db() query = """ INSERT INTO todo (name, description, deadline, status, todolist_id) values (?, ?, ?, ?, ?) """ with conn: conn.execute(query, (name, description, deadline, status, todolist_id)) def get_all_todolist(): conn = get_db() with conn: results = conn.execute("SELECT * FROM todolist") return results def get_todos(todolist_id): conn = get_db() with conn: results = conn.execute("SELECT * FROM todo where todolist_id = ?", (todolist_id,)) return results def get_todolist(todolist_id): conn = get_db() with conn: return conn.execute("SELECT * FROM todolist where id = ?", (todolist_id, )).fetchone() PK!u2hello_todo/init_db.sqlDROP TABLE IF EXISTS todolist ; DROP TABLE IF EXISTS todo ; CREATE TABLE todolist ( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(50) UNIQUE NOT NULL, description VARCHAR(150) ); CREATE TABLE todo( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(50) UNIQUE NOT NULL, description VARCHAR(150), deadline VARCHAR(23), status INTEGER, todolist_id INTEGER NOT NULL, FOREIGN KEY (todolist_id) REFERENCES todolist (id) ); PK!HFP+hello_todo-0.1.4.dist-info/entry_points.txtN+I/N.,()JLI/OɷH3s2`p9%22Kbtep.\`S.PK!H WX hello_todo-0.1.4.dist-info/WHEEL A н#Z."jm)Afb~ڠO68oF04UhoAf f4=4h0k::wXPK!H0#hello_todo-0.1.4.dist-info/METADATA=O1 Z>E`@ :[WHbHrC=9g-yCXP~PʎZ4={N-ԅxBt 8F[ټXb>I0$t^CqzggcQu_ۄ!haN"uOek^yk>ոl6^lgr|thWZuPK!H g!hello_todo-0.1.4.dist-info/RECORD}r@{0-ोCG@~/K] C;͹RJLuϗvڹ9{_AH)$hhMv o,C DCRF9 l!+ʾVnjfK .fŭl /ɾ앓|ɋ@+*vI8^6v /PK! qhello_todo/__init__.pyPK!)Jhello_todo/cli.pyPK!ǑAehello_todo/db.pyPK!u2yhello_todo/init_db.sqlPK!HFP+~hello_todo-0.1.4.dist-info/entry_points.txtPK!H WX hello_todo-0.1.4.dist-info/WHEELPK!H0#hello_todo-0.1.4.dist-info/METADATAPK!H g!hello_todo-0.1.4.dist-info/RECORDPKL