Verbesserung der Konfiguration des Eingabeverzeichnisses

This commit is contained in:
2025-10-13 19:25:31 +02:00
parent 5441b9bd73
commit 985fdcc76d
7 changed files with 83 additions and 51 deletions

2
.gitignore vendored
View File

@@ -4,7 +4,7 @@ __pycache__/
*.py[cod]
*$py.class
mylehrerpdf.ini
config.ini
# C extensions
*.so

View File

@@ -1,23 +0,0 @@
# Basiskonfiguration
Die Basiskonfiguration ist in der Datei ``lehrerpdf.ini`` zu finden, die im gleichenVerzeichnis wie das Python-Skript ``lehrerpdf.py`` liegt (vgl. Verzeichnis [src/](../src/)).
Aktuell wird in der Basiskonfiguration nur das Verzeichnis der Eingabedateien des Benutzers festgelegt. Als Standard ist das Unterverzeichnis ``data/`` eingetragen:
```
[Allgemein]
# Pfad (relativ oder absolut zu den Eingabedateien)
pfad = data/
```
Da im Unterverzeichnis ``data/`` (fiktive) Beispieldateien abgelegt sind, die als Ausgangspunkt zum Experimentieren mit dem Tool sicherlich hilfreich sind, empfiehlt es sich nicht die eigenen Dateien in diesem Verzeichnis abzulegen. Stattdessen sollten die Dateien separat abgelegt werden und das zugehörige Verzeichnis in der Basiskonfiguration angepasst werden.
Da ein Update des Tools eine Veränderung der Datei ``lehrerpdf.ini`` wieder überschreiben würde, wird folgende Vorgehensweise empfohlen: Legen Sie im gleichen Verzeichnis die Datei ``mylehrerpdf.ini`` an und passen Sie dort das Eingabeverzeichnis an. Die Datei ``mylehrerpdf.ini`` wird der Datei ``lehrerpdf.ini`` gegenüber durch das Skript bevorzugt.
Sie können wahlweise einen relativen Pfad oder einen absoluten Pfad angeben. Bitte beachten Sie, dass unter Windows die Backslashs \ zum Trennen der Verzeichnisse jeweils doppelt angegeben werden müssen:
```
/Users/username/Desktop/MeineDaten
c:\\Dokumente\\Desktop\\MeineDaten
```

19
doc/config.md Normal file
View File

@@ -0,0 +1,19 @@
# Konfiguration des Eingabeverzeichnisses (config.ini)
Im Verzeichnis des Skripts finden Sie die Datei ``config.dist`` (vgl. Verzeichnis [src/](../src/)). Sie stellt ein Beispiel dar und dient als Ausgangspunkt für das Anlegen der Datei ``config.ini``.
```
[Allgemein]
# Pfad (relativ oder absolut zu den Eingabedateien)
pfad = /Users/wolfgang/Documents/daten/
```
Legen Sie eine Kopie der Datei ``config.dist`` unter dem Namen ``config.ini`` an und ändern Sie den Pfad. Das angegebenen Eingabeverzeichnis wird fortan als Eingabe berücksichtigt.
Sie können wahlweise einen relativen Pfad oder einen absoluten Pfad angeben. Bitte beachten Sie, dass unter Windows die Backslashs \ zum Trennen der Verzeichnisse jeweils doppelt angegeben werden müssen:
```
/Users/username/Desktop/MeineDaten
c:\\Dokumente\\Desktop\\MeineDaten
```

View File

@@ -3,11 +3,15 @@
Die Konfiguration gliedert sich in zwei Teile.
### 1. Basiskonfiguration
### 1. Konfiguration des Eingabeverzeichnisses
Die Eingabe des Python-Skripts besteht aus mehreren Dateien, die im nachfolgenden Abschnitt genauer beschrieben werden. Der Pfad zu diesen Eingabedateien wird in der Basiskonfiguration festgelegt.
Das Python-Skript verarbeitet mehrere Dateien (vgl. nächster Abschnitt), die in einem gemeinsamen Verzeichnis enthalten sein müssen. Um den Pfad des Verzeichnisses festzulegen gibt es zwei Möglichkeiten:
- [Basiskonfiguration](basiskonfiguration.md) (Datei ``lehrerpdf.ini``)
- Beim Aufruf des Skripts auf der Kommandozeile (vgl. Abschnitt [Erzeugung des Zieldokuments](erzeugung.md)) wird das Verzeichnis als Option angegeben.
- Im Verzeichnis des Skrips wird eine Datei [config.ini](config.md) hinterlegt, die den Pfad enthält.
Trifft keine der beiden Möglichkeiten zu, wird das im Skript-Verzeichnis enthaltene Unterverzeichnis ``data/`` als Eingabe verwendet. Dieses Verzeichnis enthält (fiktive) Beispieldateien, die als Ausgangspunkt zum Experimentieren mit dem Tool gedacht sind.
### 2. Konfiguration der PDF-Ausgabe

View File

@@ -1,4 +1,4 @@
[Allgemein]
# Pfad (relativ oder absolut zu den Eingabedateien)
pfad = data/
pfad = /Users/wolfgang/Documents/daten/

View File

@@ -2097,7 +2097,7 @@ endobj
endobj
357 0 obj
<<
/Author () /CreationDate (D:20251012163216+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251012163216+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
/Author () /CreationDate (D:20251013151454+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251013151454+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
/Subject () /Title () /Trapped /False
>>
endobj
@@ -2984,7 +2984,7 @@ xref
trailer
<<
/ID
[<5a8bd7cb940f8f8099579e9bd8769a19><5a8bd7cb940f8f8099579e9bd8769a19>]
[<758ef2327eee35bb2dae1e505bb7cc86><758ef2327eee35bb2dae1e505bb7cc86>]
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
/Info 357 0 R

View File

@@ -1,4 +1,4 @@
#!python3
#! python3
import os, glob, sys
import argparse, csv
@@ -10,26 +10,58 @@ sys.path.append(os.path.abspath("./pages"))
import start, halbjahr, birthday, uebersicht, korrektur, somi, ha, checkliste
# 1. Eingabepfad einlesen aus lehrerpdf.ini oder bevorzugt: mylehrerpdf.ini
base_file = "mylehrerpdf.ini"
if (not(os.path.exists(base_file))):
base_file = "lehrerpdf.ini"
# 1. Eingabeverzeichnis bestimmen
# - Option 1: Argument -d auf Kommandozeile
# - Option 2: Datei config.ini im aktuellen Verzeichnis
# - Default : lokales Demo-Verzeichnis data/ mit fiktiven Daten
if (not(os.path.exists(base_file))):
print(base_file+" nicht vorhanden!")
exit(0)
parser = argparse.ArgumentParser()
parser.add_argument('-d', dest='dir', required=False)
base = ConfigParser(allow_no_value=True)
base.read(base_file)
args = parser.parse_args()
path = args.dir
try:
path = base["Allgemein"]["pfad"] # Basispfad
except KeyError:
print('Der Schlüssel Allgemein oder "pfad" existiert nicht in der Config-Datei!')
exit(0)
if (not(os.path.exists(path))):
print("Basisverzeichnis "+path+" nicht vorhanden!")
exit(0)
if (not(path)):
base_file = "config.ini"
if (not(os.path.exists(base_file))):
print("Kein Verzeichnis angegeben, verwende das Demo-Verzeichnis mit fiktiven Daten.")
path = "data/"
if (not(os.path.exists(path))):
print("Basisverzeichnis "+path+" nicht vorhanden!")
exit(0)
else:
base = ConfigParser(allow_no_value=True)
base.read(base_file)
try:
path = base["Allgemein"]["pfad"] # Basispfad
except KeyError:
print('Der Schlüssel Allgemein oder "pfad" existiert nicht in der Config-Datei!')
exit(0)
print("Verwende Verzeichnis aus config.ini.")
if (not(os.path.exists(path))):
print("Basisverzeichnis "+path+" nicht vorhanden!")
exit(0)
else:
print("Verwende Verzeichnis aus Kommandozeilenoption -d")
if (not(os.path.exists(path))):
print("Basisverzeichnis "+path+" nicht vorhanden!")
exit(0)
if (not(path.endswith("/"))):
path = path + "/"
print("Verarbeite das Verzeichnis: "+path)
@@ -132,7 +164,7 @@ body = body + start.erstelleStartseite(lerngruppen, path, config, inputs)
# Verarbeite nacheinander alle Eingabedateien = Lerngruppen
for datei in dateien:
print("Verarbeite Datei: "+datei)
print(" - Verarbeite Datei: "+datei)
if (not(os.path.exists(datei))):
print("Datei "+datei+" nicht vorhanden!")
@@ -187,7 +219,7 @@ for datei in dateien:
gebdatum = row[2]
gebdaten.append(gebdatum)
except IndexError:
print(' - Einträge für Geburtstag fehlen für Lerngruppe "'+kursid+'"!')
print(' - Einträge für Geburtstag fehlen für Lerngruppe "'+kursid+'"!')
gebdaten = []
gebdaten_all = False
@@ -220,7 +252,7 @@ for datei in dateien:
# Geburtstagsseite zusammenbauen
if (len(gebdaten)==0):
print(' - Geburtstagsliste wird weggelassen.')
print(' - Geburtstagsliste wird weggelassen.')
else:
if (namen_kurzlang=="lang"):
body = body + birthday.erstelleGeburtstagsBogen(kursid, klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)