This commit is contained in:
Adam Skotarczak 2025-04-24 12:04:09 +02:00
parent 0221b2feb4
commit 526995cb24
10 changed files with 100 additions and 33 deletions

View File

@ -1,8 +1,10 @@
# APP_MODE ungenutzt im Template
APP_MODE=
# APP_MODE ungenutzt im Template (production/ development)
APP_MODE=development
# LOGLEVEL: "CRITICAL"- "ERROR" - "WARNING" - "INFO" - "DEBUG"
LOGLEVEL=INFO
# Pfad zum log z.B log/template.log
# Pfad zum log z.B log/template.log (relativ und absolut beachten!)
# Pfad ist ausgehend vom Ort der run.py und Verzeichnisse werden automatisch erstellt.
# DEFAULT: log/template.log
LOGFILE=log/template.log

3
.gitignore vendored
View File

@ -178,6 +178,7 @@ cython_debug/
# Custom:
logs/
log/
media/
release/
#media/
*.zip

View File

@ -1,4 +1,5 @@
{
{ // Bitte daran denken das Kommentare eigentlich nicht von json unterstützt werden :-)
// Das funktioniert hier nur in Microsofts jsonc im VS-Code!
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.linting.mypyEnabled": true,
@ -15,10 +16,15 @@
// Markdown für das Entfernen von abschliessenden Leerzeichen rausnehmen:
"[markdown]": {
"files.trimTrailingWhitespace": false
"files.trimTrailingWhitespace": false,
"editor.wordWrap": "off"
},
// Für Pythonfiles Tababstand definieren und Tabs durch Leerzeichen ersetzen
"[python]": {
"editor.tabSize": 4,
"editor.insertSpaces": true
}
},
}

18
CHANGELOG.md Normal file
View File

@ -0,0 +1,18 @@
# CHANGELOG - Python Template
- [CHANGELOG - Python Template](#changelog---python-template)
- [2025-04-24 - Commit v1.0.1](#2025-04-24---commit-v101)
- [2025-04-22 - Release v1.0.0](#2025-04-22---release-v100)
## 2025-04-24 - Commit v1.0.1
- **Geändert:**
- [X] `README.md` stilistisch überarbeitet.
- [x] `.json` in `.jsonc` umbenannt wenn sie Kommentare enthalten. Betrifft nur den .vscode teil und hat mit dem Template nicht direkt etwas zutun.
- [x] Im zentralen Logging-Modul `logging_utils.py` wird bei aktiviertem `DEBUG`-Level nun der Pfad zur Logdatei (`LOGFILE`) im Log ausgegeben. Die Ausgabe erfolgt nur, wenn `logger.isEnabledFor(logging.DEBUG)` zutrifft. Fehler bei der Pfadauflösung (`resolve()`) werden dabei abgefangen und blockieren das Logging nicht.
- [x] Standardpfad für Logdatei eingeführt: Wird `LOGFILE` nicht über die `.env` gesetzt, wird nun automatisch `"log/app.log"` verwendet. Damit funktioniert das Logging-Modul auch ohne `.env`-Konfiguration direkt nach dem Klonen oder bei lokalen Tests.
- [x] `CHANGELOG.md` erstellt.
## 2025-04-22 - Release v1.0.0
- **Release 1.0.0** 🚀

View File

@ -1,7 +1,9 @@
# Python Bootstrap-Template mit `.venv` und `.env` Support
# Python Bootstrap-Template mit `.venv`- und `.env` Support
![Logo](./media/logo.png)
Dieses Template nutzt PEP 8, Type Hints, Docstrings und einen vordefinierten Workspace für sauberen Python-Code.
Ausserdem bietet es ein portables Start-Template für Python-Anwendungen mit folgenden Features:
Außerdem bietet es ein portables Start-Template für Python-Anwendungen mit folgenden Features:
- Automatische Erstellung einer virtuellen Umgebung (`.venv`)
- Automatische Installation von Abhängigkeiten aus `requirements.txt`
@ -9,21 +11,31 @@ Ausserdem bietet es ein portables Start-Template für Python-Anwendungen mit fol
- Unterstützung von Umgebungsvariablen über eine `.env`-Datei
- Sauberer Einstiegspunkt über `run.py`
- Keine systemweiten Python-Pakete notwendig
- Logging-Utils bereits integriert
Das Template ist durchdacht, pragmatisch und stark auf Entwicklerkomfort ausgelegt.
Es bietet eine sehr gute Grundlage für Projekte aller Art insbesondere CLI-Tools, kleine Services und lokale Anwendungen.
Die automatische Einrichtung der virtuellen Umgebung hebt es funktional deutlich von Standard-Vorlagen ab.
Es bietet eine sehr gute Grundlage für Projekte aller Art insbesondere CLI-Tools, kleine Services und lokale Anwendungen. Die automatische Einrichtung der virtuellen Umgebung hebt es funktional deutlich von Standard-Vorlagen ab.
**Was dieses template __nicht__ ist:**
- [ ] [pep-518](https://peps.python.org/pep-0518/)-konform 🚫
> ⚠️ Dieses Template verfolgt kein komplexes Build-System.
Es ist dafür gedacht, dir in Sekunden eine saubere, gekapselte Python-Umgebung bereitzustellen perfekt zum schnellen Testen, Debuggen oder Projektstart.
Einfach deinen Code in main.py werfen, bei Bedarf requirements.txt anpassen, run.py starten fertig. Kein Setup-Wahnsinn, kein Overhead.
---
- [Python Bootstrap-Template mit `.venv` und `.env` Support](#python-bootstrap-template-mit-venv-und-env-support)
## 🔜 Inhalt der Readme
- [Python Bootstrap-Template mit `.venv`- und `.env` Support](#python-bootstrap-template-mit-venv--und-env-support)
- [🔜 Inhalt der Readme](#-inhalt-der-readme)
- [🔧 Projektstruktur](#-projektstruktur)
- [🚀 Erste Schritte](#-erste-schritte)
- [Beim ersten Start passiert:](#beim-ersten-start-passiert)
- [📦 Abhängigkeiten](#-abhängigkeiten)
- [⚙️ .env-Datei (optional)](#-env-datei-optional)
- [📜 Beispielausgabe](#-beispielausgabe)
- [🧼 Optional: `.env.example`](#-optional-envexample)
- [🪵 Logging](#-logging)
- [🔧 Konfiguration (in `.env`)](#-konfiguration-in-env)
- [📥 Beispielausgabe](#-beispielausgabe-1)
@ -31,7 +43,7 @@ Die automatische Einrichtung der virtuellen Umgebung hebt es funktional deutlich
- [📁 Logrotation](#-logrotation)
- [🛠 Hinweise](#-hinweise)
- [🧪 Getestet mit](#-getestet-mit)
- [🛠 Einsatz Linter (`pylint`)](#-einsatz-linter-pylint)
- [🛠 Einsatz von `Linter` (`pylint`)](#-einsatz-von-linter-pylint)
- [📁 Lizenz](#-lizenz)
---
@ -48,18 +60,32 @@ Die automatische Einrichtung der virtuellen Umgebung hebt es funktional deutlich
├── 📄 .env.example # Vorlage der .env
├── 📄 requirements.txt # Abhängigkeiten (z.B. python-dotenv)
├── 📄 README.md # diese Datei
├── 📄 CHANGELOG.md #
├── 📄 VERSION # Versionsinfo zum Paket
├── 📄 run.py # Einstiegspunkt für die Anwendung
└── 📁 app/ #
├── 📁 media/
│ └── 📄 logo.png # Logo für GitHub
└── 📁 app/
├── 📄 __init__.py #
├── 📄 main.py # Hauptlogik der Anwendung
└── 📄 bootstrap.py # Setup- und Relaunch-Logik
```
> Release-Pakete als `.zip` sind bereits von unötigem Balast bereinigt. Die dargestellte Struktur entspricht einem `git clone`.
[🔝](#-inhalt-der-readme)
---
## 🚀 Erste Schritte
- [ ] `.env.example` in `.env` umbenennen und individuell befüllen.
- [ ] `.vscode`-Verzeichnis löschen, wenn du eigene Einstellungen nutzt. Ich habe es versehentlich committet und aus Bequemlichkeit drin gelassen, weil es meinem Standard entspicht.
- [ ] `requirements.txt` auf deine Bedürfnisse anpassen.
- [ ] `media/`Verzeichnis Löschen falls vorhanden.
**Erster Start des Templates:**
```bash
python run.py
```
@ -70,7 +96,11 @@ python run.py
2. `requirements.txt` wird installiert
3. Das Skript wird automatisch innerhalb der venv neu gestartet
4. `.env` wird geladen (falls vorhanden)
5. Die App startet
5. **Die App startet 🚀**
> Es erfolgen einige Ausgaben, die alle aus der `main.py` stammen, außer du `DEBUG` in der `.env` aktiviert hast.
[🔝](#-inhalt-der-readme)
---
@ -83,6 +113,8 @@ Alle Abhängigkeiten werden aus `requirements.txt` installiert.
python-dotenv
```
[🔝](#-inhalt-der-readme)
---
## ⚙️ .env-Datei (optional)
@ -98,6 +130,8 @@ PORT=8080
Diese Werte sind im Code über `os.getenv("APP_MODE")` verfügbar.
[🔝](#-inhalt-der-readme)
---
## 📜 Beispielausgabe
@ -111,17 +145,7 @@ Diese Werte sind im Code über `os.getenv("APP_MODE")` verfügbar.
[APP] Hello, world!
```
---
## 🧼 Optional: `.env.example`
Erstelle eine `.env.example`, um deine Konfiguration zu dokumentieren:
```dotenv
APP_MODE=production
PORT=8000
LOGLEVEL=info
```
[🔝](#-inhalt-der-readme)
---
@ -173,6 +197,8 @@ logs/app.log.1
logs/app.log.2
```
[🔝](#-inhalt-der-readme)
---
## 🛠 Hinweise
@ -181,6 +207,8 @@ logs/app.log.2
- Du kannst es für jede neue App wiederverwenden.
- `run.py` ist der einzige Einstiegspunkt keine direkten Aufrufe von `main.py`.
[🔝](#-inhalt-der-readme)
---
## 🧪 Getestet mit
@ -189,11 +217,11 @@ logs/app.log.2
- Windows & Linux
- VS Code, Terminal, PowerShell
[🔝](#-inhalt-der-readme)
---
## 🛠 Einsatz Linter (`pylint`)
## 🛠 Einsatz von `Linter` (`pylint`)
```cmd
PS C:\Users\adams\Documents\template> .\.venv\Scripts\activate
@ -215,6 +243,8 @@ Your code has been rated at 8.33/10
**Bonus:**
Durch den Einsatz der <.vscode/task.json> für VS-Code, kannst du in VS-Code mit `Strg + Umschalt + P``Tasks: Run Task``Linter (pylint)` oder `Typprüfung (mypy)` aufrufen.
[🔝](#-inhalt-der-readme)
---
## 📁 Lizenz

View File

@ -1 +1 @@
1.0.0
1.0.1

View File

@ -29,7 +29,7 @@ def safe_log_level(level_str: str) -> int:
LOGLEVEL = safe_log_level(os.getenv("LOGLEVEL", "INFO"))
LOGFILE = os.getenv("LOGFILE") # z.B. logs/app.log
LOGFILE = os.getenv("LOGFILE", "log/app.log") # z.B. logs/app.log
def get_logger(name: str) -> logging.Logger:
@ -49,6 +49,14 @@ def get_logger(name: str) -> logging.Logger:
# Datei (optional)
if LOGFILE:
logfile_path = Path(LOGFILE)
# Debug: Logpfad anzeigen (nur bei DEBUG)
if logger.isEnabledFor(logging.DEBUG):
try:
logger.debug(f"Logdatei: {logfile_path.resolve()}")
except Exception:
pass # Debug-Ausgabe darf nicht blockieren
try:
logfile_path.parent.mkdir(parents=True, exist_ok=True)
file_handler = RotatingFileHandler(

View File

@ -32,6 +32,8 @@ def logtest():
"""
wirft testweise alle Logvarianten aus.
"""
print(f"\n[IFO] 📰 Loglevel: aus .env: {os.getenv('LOGFILE')}\n")
log.info("Template ready.")
log.debug("Dies ist eine Debug-Meldung.")
log.warning("Dies ist eine Warnung.")

BIN
media/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 918 KiB

View File

@ -8,7 +8,7 @@ python-dotenv
# --- ALLES AB HIER IST OPTIONAL ---
# Pytest, Linter und Typprüfung:
# Pytest, Linter und Typ-Prüfung (entfernen bei fertigem Code):
pytest
pytest-cov
pytest-mock