|
|
#!/usr/bin/env python3 """dirbuild
Usage: dirbuild [-v] dirbuild [-v] set <command> 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["<command>"]) 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()
|