From 4ef493064365f7a4bfc84edc4c69f9c91b390a66 Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Sat, 8 Feb 2025 20:32:41 +0100
Subject: [PATCH] Adapt to packaging/installation pattern established with
 ytplom.

---
 .gitmodules                                    |  2 +-
 install.sh                                     | 13 +++++++++++++
 scripts/pre-commit                             |  5 +----
 .pylintrc => src/.pylintrc                     |  0
 {migrations => src/migrations}/0_init.sql      |  0
 .../migrations}/1_add_Todo_comment.sql         |  0
 .../migrations}/2_add_Todo_effort.sql          |  0
 .../3_add_Todo_and_Process_calendarize.sql     |  0
 ...4_create_Process_blockers_Todo_blockers.sql |  0
 .../5_create_process_step_suppressions.sql     |  0
 .../6_add_Day_days_since_millennium.sql        |  0
 .../migrations}/7_redo_Day_id.sql              |  0
 {migrations => src/migrations}/init_7.sql      |  0
 plomlib => src/plomlib                         |  0
 {plomtask => src/plomtask}/__init__.py         |  0
 {plomtask => src/plomtask}/conditions.py       |  0
 {plomtask => src/plomtask}/dating.py           |  0
 {plomtask => src/plomtask}/days.py             |  0
 {plomtask => src/plomtask}/db.py               |  0
 {plomtask => src/plomtask}/exceptions.py       |  0
 {plomtask => src/plomtask}/http.py             |  0
 {plomtask => src/plomtask}/misc.py             |  0
 {plomtask => src/plomtask}/processes.py        |  0
 {plomtask => src/plomtask}/todos.py            |  0
 .../plomtask}/versioned_attributes.py          |  0
 requirements.txt => src/requirements.txt       |  0
 run.py => src/run.py                           | 16 ++++++++++++----
 {templates => src/templates}/_base.html        |  0
 {templates => src/templates}/_macros.html      |  0
 {templates => src/templates}/calendar.html     |  0
 {templates => src/templates}/calendar_txt.html |  0
 {templates => src/templates}/condition.html    |  0
 .../templates}/condition_descriptions.html     |  0
 .../templates}/condition_titles.html           |  0
 {templates => src/templates}/conditions.html   |  0
 {templates => src/templates}/day.html          |  0
 {templates => src/templates}/msg.html          |  0
 {templates => src/templates}/process.html      |  0
 .../templates}/process_descriptions.html       |  0
 .../templates}/process_efforts.html            |  0
 .../templates}/process_titles.html             |  0
 {templates => src/templates}/processes.html    |  0
 {templates => src/templates}/todo.html         |  0
 {templates => src/templates}/todos.html        |  0
 {tests => src/tests}/__init__.py               |  0
 {tests => src/tests}/conditions.py             |  0
 {tests => src/tests}/days.py                   |  0
 {tests => src/tests}/misc.py                   |  0
 {tests => src/tests}/processes.py              |  0
 {tests => src/tests}/todos.py                  |  0
 {tests => src/tests}/utils.py                  |  0
 taskplom                                       | 18 ++++++++++++++++++
 52 files changed, 45 insertions(+), 9 deletions(-)
 create mode 100755 install.sh
 rename .pylintrc => src/.pylintrc (100%)
 rename {migrations => src/migrations}/0_init.sql (100%)
 rename {migrations => src/migrations}/1_add_Todo_comment.sql (100%)
 rename {migrations => src/migrations}/2_add_Todo_effort.sql (100%)
 rename {migrations => src/migrations}/3_add_Todo_and_Process_calendarize.sql (100%)
 rename {migrations => src/migrations}/4_create_Process_blockers_Todo_blockers.sql (100%)
 rename {migrations => src/migrations}/5_create_process_step_suppressions.sql (100%)
 rename {migrations => src/migrations}/6_add_Day_days_since_millennium.sql (100%)
 rename {migrations => src/migrations}/7_redo_Day_id.sql (100%)
 rename {migrations => src/migrations}/init_7.sql (100%)
 rename plomlib => src/plomlib (100%)
 rename {plomtask => src/plomtask}/__init__.py (100%)
 rename {plomtask => src/plomtask}/conditions.py (100%)
 rename {plomtask => src/plomtask}/dating.py (100%)
 rename {plomtask => src/plomtask}/days.py (100%)
 rename {plomtask => src/plomtask}/db.py (100%)
 rename {plomtask => src/plomtask}/exceptions.py (100%)
 rename {plomtask => src/plomtask}/http.py (100%)
 rename {plomtask => src/plomtask}/misc.py (100%)
 rename {plomtask => src/plomtask}/processes.py (100%)
 rename {plomtask => src/plomtask}/todos.py (100%)
 rename {plomtask => src/plomtask}/versioned_attributes.py (100%)
 rename requirements.txt => src/requirements.txt (100%)
 rename run.py => src/run.py (81%)
 rename {templates => src/templates}/_base.html (100%)
 rename {templates => src/templates}/_macros.html (100%)
 rename {templates => src/templates}/calendar.html (100%)
 rename {templates => src/templates}/calendar_txt.html (100%)
 rename {templates => src/templates}/condition.html (100%)
 rename {templates => src/templates}/condition_descriptions.html (100%)
 rename {templates => src/templates}/condition_titles.html (100%)
 rename {templates => src/templates}/conditions.html (100%)
 rename {templates => src/templates}/day.html (100%)
 rename {templates => src/templates}/msg.html (100%)
 rename {templates => src/templates}/process.html (100%)
 rename {templates => src/templates}/process_descriptions.html (100%)
 rename {templates => src/templates}/process_efforts.html (100%)
 rename {templates => src/templates}/process_titles.html (100%)
 rename {templates => src/templates}/processes.html (100%)
 rename {templates => src/templates}/todo.html (100%)
 rename {templates => src/templates}/todos.html (100%)
 rename {tests => src/tests}/__init__.py (100%)
 rename {tests => src/tests}/conditions.py (100%)
 rename {tests => src/tests}/days.py (100%)
 rename {tests => src/tests}/misc.py (100%)
 rename {tests => src/tests}/processes.py (100%)
 rename {tests => src/tests}/todos.py (100%)
 rename {tests => src/tests}/utils.py (100%)
 create mode 100755 taskplom

diff --git a/.gitmodules b/.gitmodules
index 42cf7f3..4c97e95 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,3 @@
 [submodule "plomlib"]
-	path = plomlib
+	path = src/plomlib
 	url = https://plomlompom.com/repos/clone/plomlib
diff --git a/install.sh b/install.sh
new file mode 100755
index 0000000..a28e15f
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/sh
+set -e
+
+PATH_APP_SHARE=~/.local/share/taskplom
+PATH_LOCAL_BIN=~/.local/bin
+NAME_EXECUTABLE=taskplom
+
+mkdir -p "${PATH_APP_SHARE}" "${PATH_LOCAL_BIN}"
+
+cp -r ./src/* "${PATH_APP_SHARE}/"
+cp "${NAME_EXECUTABLE}" "${PATH_LOCAL_BIN}/"
+
+echo "Installed executable to ${PATH_LOCAL_BIN}/${NAME_EXECUTABLE}, app files to ${PATH_APP_SHARE}."
diff --git a/scripts/pre-commit b/scripts/pre-commit
index 0dd4d45..21ad816 100755
--- a/scripts/pre-commit
+++ b/scripts/pre-commit
@@ -1,5 +1,5 @@
 #!/bin/sh
-set -e
+cd src
 for dir in $(echo '.' 'plomtask' 'tests'); do
     echo "Running mypy on ${dir}/ …."
     python3 -m mypy ${dir}/*.py
@@ -10,7 +10,4 @@ for dir in $(echo '.' 'plomtask' 'tests'); do
 done
 echo "Running unittest-parallel on tests/."
 unittest-parallel -t . -s tests/ -p '*.py'
-set +e
 rm test_db:*
-set -e
-exit 0
diff --git a/.pylintrc b/src/.pylintrc
similarity index 100%
rename from .pylintrc
rename to src/.pylintrc
diff --git a/migrations/0_init.sql b/src/migrations/0_init.sql
similarity index 100%
rename from migrations/0_init.sql
rename to src/migrations/0_init.sql
diff --git a/migrations/1_add_Todo_comment.sql b/src/migrations/1_add_Todo_comment.sql
similarity index 100%
rename from migrations/1_add_Todo_comment.sql
rename to src/migrations/1_add_Todo_comment.sql
diff --git a/migrations/2_add_Todo_effort.sql b/src/migrations/2_add_Todo_effort.sql
similarity index 100%
rename from migrations/2_add_Todo_effort.sql
rename to src/migrations/2_add_Todo_effort.sql
diff --git a/migrations/3_add_Todo_and_Process_calendarize.sql b/src/migrations/3_add_Todo_and_Process_calendarize.sql
similarity index 100%
rename from migrations/3_add_Todo_and_Process_calendarize.sql
rename to src/migrations/3_add_Todo_and_Process_calendarize.sql
diff --git a/migrations/4_create_Process_blockers_Todo_blockers.sql b/src/migrations/4_create_Process_blockers_Todo_blockers.sql
similarity index 100%
rename from migrations/4_create_Process_blockers_Todo_blockers.sql
rename to src/migrations/4_create_Process_blockers_Todo_blockers.sql
diff --git a/migrations/5_create_process_step_suppressions.sql b/src/migrations/5_create_process_step_suppressions.sql
similarity index 100%
rename from migrations/5_create_process_step_suppressions.sql
rename to src/migrations/5_create_process_step_suppressions.sql
diff --git a/migrations/6_add_Day_days_since_millennium.sql b/src/migrations/6_add_Day_days_since_millennium.sql
similarity index 100%
rename from migrations/6_add_Day_days_since_millennium.sql
rename to src/migrations/6_add_Day_days_since_millennium.sql
diff --git a/migrations/7_redo_Day_id.sql b/src/migrations/7_redo_Day_id.sql
similarity index 100%
rename from migrations/7_redo_Day_id.sql
rename to src/migrations/7_redo_Day_id.sql
diff --git a/migrations/init_7.sql b/src/migrations/init_7.sql
similarity index 100%
rename from migrations/init_7.sql
rename to src/migrations/init_7.sql
diff --git a/plomlib b/src/plomlib
similarity index 100%
rename from plomlib
rename to src/plomlib
diff --git a/plomtask/__init__.py b/src/plomtask/__init__.py
similarity index 100%
rename from plomtask/__init__.py
rename to src/plomtask/__init__.py
diff --git a/plomtask/conditions.py b/src/plomtask/conditions.py
similarity index 100%
rename from plomtask/conditions.py
rename to src/plomtask/conditions.py
diff --git a/plomtask/dating.py b/src/plomtask/dating.py
similarity index 100%
rename from plomtask/dating.py
rename to src/plomtask/dating.py
diff --git a/plomtask/days.py b/src/plomtask/days.py
similarity index 100%
rename from plomtask/days.py
rename to src/plomtask/days.py
diff --git a/plomtask/db.py b/src/plomtask/db.py
similarity index 100%
rename from plomtask/db.py
rename to src/plomtask/db.py
diff --git a/plomtask/exceptions.py b/src/plomtask/exceptions.py
similarity index 100%
rename from plomtask/exceptions.py
rename to src/plomtask/exceptions.py
diff --git a/plomtask/http.py b/src/plomtask/http.py
similarity index 100%
rename from plomtask/http.py
rename to src/plomtask/http.py
diff --git a/plomtask/misc.py b/src/plomtask/misc.py
similarity index 100%
rename from plomtask/misc.py
rename to src/plomtask/misc.py
diff --git a/plomtask/processes.py b/src/plomtask/processes.py
similarity index 100%
rename from plomtask/processes.py
rename to src/plomtask/processes.py
diff --git a/plomtask/todos.py b/src/plomtask/todos.py
similarity index 100%
rename from plomtask/todos.py
rename to src/plomtask/todos.py
diff --git a/plomtask/versioned_attributes.py b/src/plomtask/versioned_attributes.py
similarity index 100%
rename from plomtask/versioned_attributes.py
rename to src/plomtask/versioned_attributes.py
diff --git a/requirements.txt b/src/requirements.txt
similarity index 100%
rename from requirements.txt
rename to src/requirements.txt
diff --git a/run.py b/src/run.py
similarity index 81%
rename from run.py
rename to src/run.py
index 0d50d25..3e45ad8 100755
--- a/run.py
+++ b/src/run.py
@@ -1,12 +1,20 @@
 #!/usr/bin/env python3
 """Call this to start the application."""
+
+# included libs
 from sys import exit as sys_exit
 from os import environ
 from pathlib import Path
-from plomtask.exceptions import HandledException
-from plomtask.http import TaskHandler, TaskServer
-from plomtask.db import DatabaseFile
-from plomlib.db import PlomDbException
+# might need module installation(s)
+try:
+    from plomtask.exceptions import HandledException
+    from plomtask.http import TaskHandler, TaskServer
+    from plomtask.db import DatabaseFile
+    from plomlib.db import PlomDbException
+except ModuleNotFoundError as e:
+    print('FAIL: Missing module(s), please run with "install_deps" argument.')
+    print(e)
+    sys_exit(1)
 
 PLOMTASK_DB_PATH = environ.get('PLOMTASK_DB_PATH')
 HTTP_PORT = 8082
diff --git a/templates/_base.html b/src/templates/_base.html
similarity index 100%
rename from templates/_base.html
rename to src/templates/_base.html
diff --git a/templates/_macros.html b/src/templates/_macros.html
similarity index 100%
rename from templates/_macros.html
rename to src/templates/_macros.html
diff --git a/templates/calendar.html b/src/templates/calendar.html
similarity index 100%
rename from templates/calendar.html
rename to src/templates/calendar.html
diff --git a/templates/calendar_txt.html b/src/templates/calendar_txt.html
similarity index 100%
rename from templates/calendar_txt.html
rename to src/templates/calendar_txt.html
diff --git a/templates/condition.html b/src/templates/condition.html
similarity index 100%
rename from templates/condition.html
rename to src/templates/condition.html
diff --git a/templates/condition_descriptions.html b/src/templates/condition_descriptions.html
similarity index 100%
rename from templates/condition_descriptions.html
rename to src/templates/condition_descriptions.html
diff --git a/templates/condition_titles.html b/src/templates/condition_titles.html
similarity index 100%
rename from templates/condition_titles.html
rename to src/templates/condition_titles.html
diff --git a/templates/conditions.html b/src/templates/conditions.html
similarity index 100%
rename from templates/conditions.html
rename to src/templates/conditions.html
diff --git a/templates/day.html b/src/templates/day.html
similarity index 100%
rename from templates/day.html
rename to src/templates/day.html
diff --git a/templates/msg.html b/src/templates/msg.html
similarity index 100%
rename from templates/msg.html
rename to src/templates/msg.html
diff --git a/templates/process.html b/src/templates/process.html
similarity index 100%
rename from templates/process.html
rename to src/templates/process.html
diff --git a/templates/process_descriptions.html b/src/templates/process_descriptions.html
similarity index 100%
rename from templates/process_descriptions.html
rename to src/templates/process_descriptions.html
diff --git a/templates/process_efforts.html b/src/templates/process_efforts.html
similarity index 100%
rename from templates/process_efforts.html
rename to src/templates/process_efforts.html
diff --git a/templates/process_titles.html b/src/templates/process_titles.html
similarity index 100%
rename from templates/process_titles.html
rename to src/templates/process_titles.html
diff --git a/templates/processes.html b/src/templates/processes.html
similarity index 100%
rename from templates/processes.html
rename to src/templates/processes.html
diff --git a/templates/todo.html b/src/templates/todo.html
similarity index 100%
rename from templates/todo.html
rename to src/templates/todo.html
diff --git a/templates/todos.html b/src/templates/todos.html
similarity index 100%
rename from templates/todos.html
rename to src/templates/todos.html
diff --git a/tests/__init__.py b/src/tests/__init__.py
similarity index 100%
rename from tests/__init__.py
rename to src/tests/__init__.py
diff --git a/tests/conditions.py b/src/tests/conditions.py
similarity index 100%
rename from tests/conditions.py
rename to src/tests/conditions.py
diff --git a/tests/days.py b/src/tests/days.py
similarity index 100%
rename from tests/days.py
rename to src/tests/days.py
diff --git a/tests/misc.py b/src/tests/misc.py
similarity index 100%
rename from tests/misc.py
rename to src/tests/misc.py
diff --git a/tests/processes.py b/src/tests/processes.py
similarity index 100%
rename from tests/processes.py
rename to src/tests/processes.py
diff --git a/tests/todos.py b/src/tests/todos.py
similarity index 100%
rename from tests/todos.py
rename to src/tests/todos.py
diff --git a/tests/utils.py b/src/tests/utils.py
similarity index 100%
rename from tests/utils.py
rename to src/tests/utils.py
diff --git a/taskplom b/taskplom
new file mode 100755
index 0000000..4bc1be6
--- /dev/null
+++ b/taskplom
@@ -0,0 +1,18 @@
+#!/usr/bin/sh
+set -e
+
+PATH_APP_SHARE=~/.local/share/taskplom
+PATH_VENV="${PATH_APP_SHARE}/venv"
+
+python3 -m venv "${PATH_VENV}"
+. "${PATH_VENV}/bin/activate"
+
+if [ "$1" = "install_deps" ]; then
+    echo "Checking dependencies."
+    pip3 install -r "${PATH_APP_SHARE}/requirements.txt"
+    exit 0
+fi
+
+export PYTHONPATH="${PATH_APP_SHARE}:${PYTHONPATH}"
+cd "${PATH_APP_SHARE}"
+./run.py $@
-- 
2.30.2