#!/usr/bin/env python3 """dirbuild Usage: dirbuild [-v] dirbuild [-v] set dirbuild [-v] get dirbuild [-v] build dirbuild [-v] dump Options: -h --help Show this screen. -v --verbose Show verbose information. --version Show version. """ import logging import os import sqlite3 from sqlite3.dbapi2 import Cursor from docopt import docopt from xdg import BaseDirectory logger: logging.Logger def init_logger(): """Initializes the application logger. :returns: logger """ global logger logger = logging.getLogger() handler = logging.StreamHandler() formatter = logging.Formatter("%(asctime)s %(name)-12s %(levelname)-8s %(message)s") handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.ERROR) def init_db() -> sqlite3.Connection: path = BaseDirectory.save_data_path("dirbuild") logging.debug("Using path for data: %s", path) db_path = f"{path}/commands.db" logging.debug("Using database %s", db_path) conn = sqlite3.connect(db_path) conn.cursor().execute( """CREATE TABLE IF NOT EXISTS commands (id INTEGER PRIMARY KEY AUTOINCREMENT, dir TEXT, cmd TEXT)""" ) return conn def set_command(cursor: Cursor, cwd: str, command: str): """Sets a command for the current directory :db: sqlite Cursor :cwd: String :returns: None """ logger.debug("Setting command '%s' for directory %s", command, cwd) cursor.execute( "INSERT INTO commands (dir, cmd) VALUES (?, ?)", ( cwd, command, ), ) def get_command(cursor: Cursor, cwd: str) -> str: """Get the command for the current directory""" cmd = cursor.execute( "SELECT cmd FROM commands WHERE dir = ? ORDER BY id DESC LIMIT 1", (cwd,) ).fetchone() return cmd[0] if cmd is not None else "" def dump_db(cursor: Cursor): """Dump all entries of the database""" for row in cursor.execute("SELECT id, dir, cmd FROM commands"): print(row) def main(): """ Main function """ init_logger() arguments = docopt(__doc__, version="dirbuild v0.1.0") if arguments["--verbose"]: logger.setLevel(logging.DEBUG) logger.debug("arguments: %s", arguments) db = init_db() if arguments["set"]: set_command(db.cursor(), os.getcwd(), arguments[""]) print("Saved command successfully") elif arguments["get"]: print(get_command(db.cursor(), os.getcwd())) elif arguments["dump"]: dump_db(db.cursor()) else: cmd = get_command(db.cursor(), str(os.getcwd())) logger.debug("Executing '%s'", cmd) os.system(cmd) db.commit() db.close() if __name__ == "__main__": main()