commit
						941acdc387
					
				 2 changed files with 246 additions and 0 deletions
			
			
		- 
					139.gitignore
 - 
					107dirbuild.py
 
@ -0,0 +1,139 @@ | 
			
		|||||
 | 
				# Byte-compiled / optimized / DLL files | 
			
		||||
 | 
				__pycache__/ | 
			
		||||
 | 
				*.py[cod] | 
			
		||||
 | 
				*$py.class | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# C extensions | 
			
		||||
 | 
				*.so | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Distribution / packaging | 
			
		||||
 | 
				.Python | 
			
		||||
 | 
				build/ | 
			
		||||
 | 
				develop-eggs/ | 
			
		||||
 | 
				dist/ | 
			
		||||
 | 
				downloads/ | 
			
		||||
 | 
				eggs/ | 
			
		||||
 | 
				.eggs/ | 
			
		||||
 | 
				lib/ | 
			
		||||
 | 
				lib64/ | 
			
		||||
 | 
				parts/ | 
			
		||||
 | 
				sdist/ | 
			
		||||
 | 
				var/ | 
			
		||||
 | 
				wheels/ | 
			
		||||
 | 
				share/python-wheels/ | 
			
		||||
 | 
				*.egg-info/ | 
			
		||||
 | 
				.installed.cfg | 
			
		||||
 | 
				*.egg | 
			
		||||
 | 
				MANIFEST | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# PyInstaller | 
			
		||||
 | 
				#  Usually these files are written by a python script from a template | 
			
		||||
 | 
				#  before PyInstaller builds the exe, so as to inject date/other infos into it. | 
			
		||||
 | 
				*.manifest | 
			
		||||
 | 
				*.spec | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Installer logs | 
			
		||||
 | 
				pip-log.txt | 
			
		||||
 | 
				pip-delete-this-directory.txt | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Unit test / coverage reports | 
			
		||||
 | 
				htmlcov/ | 
			
		||||
 | 
				.tox/ | 
			
		||||
 | 
				.nox/ | 
			
		||||
 | 
				.coverage | 
			
		||||
 | 
				.coverage.* | 
			
		||||
 | 
				.cache | 
			
		||||
 | 
				nosetests.xml | 
			
		||||
 | 
				coverage.xml | 
			
		||||
 | 
				*.cover | 
			
		||||
 | 
				*.py,cover | 
			
		||||
 | 
				.hypothesis/ | 
			
		||||
 | 
				.pytest_cache/ | 
			
		||||
 | 
				cover/ | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Translations | 
			
		||||
 | 
				*.mo | 
			
		||||
 | 
				*.pot | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Django stuff: | 
			
		||||
 | 
				*.log | 
			
		||||
 | 
				local_settings.py | 
			
		||||
 | 
				db.sqlite3 | 
			
		||||
 | 
				db.sqlite3-journal | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Flask stuff: | 
			
		||||
 | 
				instance/ | 
			
		||||
 | 
				.webassets-cache | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Scrapy stuff: | 
			
		||||
 | 
				.scrapy | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Sphinx documentation | 
			
		||||
 | 
				docs/_build/ | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# PyBuilder | 
			
		||||
 | 
				.pybuilder/ | 
			
		||||
 | 
				target/ | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Jupyter Notebook | 
			
		||||
 | 
				.ipynb_checkpoints | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# IPython | 
			
		||||
 | 
				profile_default/ | 
			
		||||
 | 
				ipython_config.py | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# pyenv | 
			
		||||
 | 
				#   For a library or package, you might want to ignore these files since the code is | 
			
		||||
 | 
				#   intended to run in multiple environments; otherwise, check them in: | 
			
		||||
 | 
				# .python-version | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# pipenv | 
			
		||||
 | 
				#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. | 
			
		||||
 | 
				#   However, in case of collaboration, if having platform-specific dependencies or dependencies | 
			
		||||
 | 
				#   having no cross-platform support, pipenv may install dependencies that don't work, or not | 
			
		||||
 | 
				#   install all needed dependencies. | 
			
		||||
 | 
				#Pipfile.lock | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# PEP 582; used by e.g. github.com/David-OConnor/pyflow | 
			
		||||
 | 
				__pypackages__/ | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Celery stuff | 
			
		||||
 | 
				celerybeat-schedule | 
			
		||||
 | 
				celerybeat.pid | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# SageMath parsed files | 
			
		||||
 | 
				*.sage.py | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Environments | 
			
		||||
 | 
				.env | 
			
		||||
 | 
				.venv | 
			
		||||
 | 
				env/ | 
			
		||||
 | 
				venv/ | 
			
		||||
 | 
				ENV/ | 
			
		||||
 | 
				env.bak/ | 
			
		||||
 | 
				venv.bak/ | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Spyder project settings | 
			
		||||
 | 
				.spyderproject | 
			
		||||
 | 
				.spyproject | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Rope project settings | 
			
		||||
 | 
				.ropeproject | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# mkdocs documentation | 
			
		||||
 | 
				/site | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# mypy | 
			
		||||
 | 
				.mypy_cache/ | 
			
		||||
 | 
				.dmypy.json | 
			
		||||
 | 
				dmypy.json | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Pyre type checker | 
			
		||||
 | 
				.pyre/ | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# pytype static type analyzer | 
			
		||||
 | 
				.pytype/ | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Cython debug symbols | 
			
		||||
 | 
				cython_debug/ | 
			
		||||
 | 
				.idea | 
			
		||||
@ -0,0 +1,107 @@ | 
			
		|||||
 | 
				#!/home/schneider/git/dirbuild/ | 
			
		||||
 | 
				"""dirbuild | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				Usage: | 
			
		||||
 | 
				  dirbuild | 
			
		||||
 | 
				  dirbuild set <command> | 
			
		||||
 | 
				  dirbuild get | 
			
		||||
 | 
				  dirbuild build | 
			
		||||
 | 
				  dirbuild dump | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				Options: | 
			
		||||
 | 
				  -h --help     Show this screen. | 
			
		||||
 | 
				  --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.DEBUG) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				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""" | 
			
		||||
 | 
				    return cursor.execute( | 
			
		||||
 | 
				        "SELECT cmd FROM commands WHERE dir = ? ORDER BY id DESC LIMIT 1", (cwd,) | 
			
		||||
 | 
				    ).fetchone()[0] | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				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") | 
			
		||||
 | 
				    logger.debug("arguments: %s", arguments) | 
			
		||||
 | 
				    db = init_db() | 
			
		||||
 | 
				    if arguments["set"]: | 
			
		||||
 | 
				        set_command(db.cursor(), os.getcwd(), arguments["<command>"]) | 
			
		||||
 | 
				    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() | 
			
		||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue