easily manage build commands
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
2.7 KiB

#!/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()