Browse Source

initial commit

master
Schneider 3 years ago
commit
941acdc387
Signed by: schneider GPG Key ID: 3F50B02A50039F3B
  1. 139
      .gitignore
  2. 107
      dirbuild.py

139
.gitignore

@ -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

107
dirbuild.py

@ -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()
Loading…
Cancel
Save