Schneider
4 years ago
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