1.1.0
This commit is contained in:
parent
411e2004e4
commit
e70562cbdc
7
.vscode/extensions.json
vendored
Normal file
7
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"ms-python.python",
|
||||||
|
"ms-python.vscode-pylance",
|
||||||
|
"ms-toolsai.jupyter"
|
||||||
|
]
|
||||||
|
}
|
30
.vscode/settings.jsonc
vendored
Normal file
30
.vscode/settings.jsonc
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{ // 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,
|
||||||
|
"python.linting.pylintArgs": ["--disable=C0114,C0115,C0116"],
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.organizeImports": "explicit"
|
||||||
|
},
|
||||||
|
"python.analysis.typeCheckingMode": "basic",
|
||||||
|
|
||||||
|
// Abschliessende Leerzeichen entfernen:
|
||||||
|
"files.trimTrailingWhitespace": true,
|
||||||
|
"files.insertFinalNewline": true,
|
||||||
|
|
||||||
|
// Markdown für das Entfernen von abschliessenden Leerzeichen rausnehmen:
|
||||||
|
"[markdown]": {
|
||||||
|
"files.trimTrailingWhitespace": false,
|
||||||
|
"editor.wordWrap": "off"
|
||||||
|
},
|
||||||
|
|
||||||
|
// Für Pythonfiles Tababstand definieren und Tabs durch Leerzeichen ersetzen
|
||||||
|
"[python]": {
|
||||||
|
"editor.tabSize": 4,
|
||||||
|
"editor.insertSpaces": true
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
}
|
17
.vscode/tasks.json
vendored
Normal file
17
.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"label": "Linter (pylint)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "pylint beispiel.py",
|
||||||
|
"group": "build"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Typprüfung (mypy)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "mypy beispiel.py",
|
||||||
|
"group": "build"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
64
CHANGELOG.md
64
CHANGELOG.md
@ -2,36 +2,48 @@
|
|||||||
|
|
||||||
## pyUpload (TKInter-Version 1.0)
|
## pyUpload (TKInter-Version 1.0)
|
||||||
|
|
||||||
- **2025-04-22 - v.1.0.2**
|
- **2025-04-25 - v1.1.0**
|
||||||
|
- **Geändert:**
|
||||||
|
- [x] Lizenz auf __MIT__ mit Namensnennung umgestellt, siehe [LICENSE](./LICENSE)
|
||||||
|
|
||||||
- Behoben
|
- [x] `main.py` prüft nun zusätzlich, ob bereits mit `pythonw.exe` gestartet wurde, um doppelten Start mit neuem Fenster zu vermeiden
|
||||||
-- Wrapper-Skript `start.py` erkennt nun fehlende `.venv` und startet `main.py` beim Erststart korrekt mit System-Python, danach mit venv (`start.py`).
|
- [x] `main.py` ruft nach `subprocess.Popen(...)` nun zuverlässig `sys.exit(0)` auf, um „leere“ Ursprungsfenster zu beenden
|
||||||
-- `main.py` verwendet unter Windows statt `os.execv()` nun `subprocess.Popen(..., CREATE_NEW_CONSOLE)` für einen sauberen Neustart mit sichtbarer Konsole (`main.py`).
|
- [x] `start.cmd` verwendet jetzt `python.exe` statt `pythonw.exe`, wodurch nur noch **ein** Konsolenfenster erscheint – auch beim Setup
|
||||||
|
- [x] `start.sh` erkennt fehlendes `python3` und bricht mit Hinweis ab; Pfade werden sauber relativ berechnet
|
||||||
|
|
||||||
- Entfernt
|
- **Behoben:**
|
||||||
-- Nicht mehr benötigte Funktion `activate_venv()` entfernt (`main.py`).
|
- [x] Mit diesen Änderungen behoben, dass unter Windows unnötige Consolenfenster gestartet werden und der Sprung nun sauber in die Virtuelle Umbebung `./app/.venv` erfolgt.
|
||||||
|
|
||||||
- **2025-04-21 - v.1.0.1**
|
- **2025-04-22 - v1.0.2**
|
||||||
|
|
||||||
- Geändert
|
- **Behoben:**
|
||||||
- `main.py` übernimmt nun automatisch die Erstellung der virtuellen Umgebung `.venv` und die Installation der Abhängigkeiten aus `requirements.txt`
|
- [x] Wrapper-Skript `start.py` erkennt nun fehlende `.venv` und startet `main.py` beim Erststart korrekt mit System-Python, danach mit venv (`start.py`).
|
||||||
- Entfernt: `install.cmd` und `startUpload.cmd` wurden vollständig ersetzt durch neue Startlogik
|
- [x] `main.py` verwendet unter Windows statt `os.execv()` nun `subprocess.Popen(..., CREATE_NEW_CONSOLE)` für einen sauberen Neustart mit sichtbarer Konsole (`main.py`).
|
||||||
- `start.cmd` wurde vereinfacht, prüft nun auf vorhandenes `python` und startet `main.py` über absoluten Pfad
|
|
||||||
- `main.py` setzt bei Start automatisch `os.chdir()` auf das eigene Verzeichnis, um relative Pfade sicher zu behandeln
|
|
||||||
|
|
||||||
- Hinzugefügt
|
- **Entfernt:**
|
||||||
- Neue plattformunabhängige `start.sh` für Linux/macOS
|
-- [x] Nicht mehr benötigte Funktion `activate_venv()` entfernt (`main.py`).
|
||||||
- Automatischer Restart nach Installation über `os.execv()` in `main.py`
|
|
||||||
- Neue Sicherheits- und Netzwerkinformationen in der `README.md`
|
|
||||||
- Erweiterung der `README.md` um Speicherort der Uploads und Projektstruktur
|
|
||||||
- Hinweis auf Projektstatus und neue Version unter <https://github.com/realAscot/pyUpload2>
|
|
||||||
- Neue LICENSE-Datei (proprietär, nicht zur Weitergabe)
|
|
||||||
- start.py hinzugefügt wenn auf manchen Systemen die Ausführung von .cmd und .bat gesperrt sind.
|
|
||||||
|
|
||||||
- Fixes
|
- **2025-04-21 - v1.0.1**
|
||||||
- PowerShell-Inkompatibilitäten mit `set /p` entfernt
|
|
||||||
- `.cmd`-Startskripte reagieren jetzt korrekt auf STRG+C
|
|
||||||
- Mehrere Markdown-Korrekturen (Codeblöcke, Leerzeilen, Lesbarkeit)
|
|
||||||
|
|
||||||
- **2025-04-21 - v.1.0.0**
|
- **Geändert:**
|
||||||
- release!
|
- [x] `main.py` übernimmt nun automatisch die Erstellung der virtuellen Umgebung `.venv` und die Installation der Abhängigkeiten aus `requirements.txt`
|
||||||
|
- [x] Entfernt: `install.cmd` und `startUpload.cmd` wurden vollständig ersetzt durch neue Startlogik
|
||||||
|
- [x] `start.cmd` wurde vereinfacht, prüft nun auf vorhandenes `python` und startet `main.py` über absoluten Pfad
|
||||||
|
- [x] `main.py` setzt bei Start automatisch `os.chdir()` auf das eigene Verzeichnis, um relative Pfade sicher zu behandeln
|
||||||
|
|
||||||
|
- **Hinzugefügt:**
|
||||||
|
- [x] Neue plattformunabhängige `start.sh` für Linux/macOS
|
||||||
|
- [x] Automatischer Restart nach Installation über `os.execv()` in `main.py`
|
||||||
|
- [x] Neue Sicherheits- und Netzwerkinformationen in der `README.md`
|
||||||
|
- [x] Erweiterung der `README.md` um Speicherort der Uploads und Projektstruktur
|
||||||
|
- [x] Hinweis auf Projektstatus und neue Version unter <https://github.com/realAscot/pyUpload2>
|
||||||
|
- [x] Neue LICENSE-Datei (proprietär, nicht zur Weitergabe)
|
||||||
|
- [x] start.py hinzugefügt wenn auf manchen Systemen die Ausführung von .cmd und .bat gesperrt sind.
|
||||||
|
|
||||||
|
- **Fixes:**
|
||||||
|
- [x] PowerShell-Inkompatibilitäten mit `set /p` entfernt
|
||||||
|
- [x] `.cmd`-Startskripte reagieren jetzt korrekt auf STRG+C
|
||||||
|
- [x] Mehrere Markdown-Korrekturen (Codeblöcke, Leerzeilen, Lesbarkeit)
|
||||||
|
|
||||||
|
- **2025-04-21 - v1.0.0**
|
||||||
|
- [x] release!
|
||||||
|
26
LICENSE
26
LICENSE
@ -1,17 +1,23 @@
|
|||||||
# LICENSE
|
MIT License with Attribution Requirement
|
||||||
|
|
||||||
Copyright (c) 2025 Adam Skotarczak <adam@skotarczak.net>
|
Copyright (c) 2025 Adam Skotarczak <adam@skotarczak.net>
|
||||||
|
|
||||||
Alle Rechte vorbehalten.
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the “Software”), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, subject to the following conditions:
|
||||||
|
|
||||||
Diese Software ist urheberrechtlich geschützt. Die Verwendung, Vervielfältigung, Verbreitung oder Änderung
|
1. The above copyright notice and this permission notice shall be included in all
|
||||||
dieser Software oder von Teilen davon ist ohne vorherige schriftliche Genehmigung des Autors ausdrücklich untersagt.
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
Die Software darf ausschließlich für private, interne oder zu Prüf- und Testzwecken verwendet werden.
|
2. **Attribution Requirement**: Any public use or distribution of this Software,
|
||||||
Eine kommerzielle Nutzung oder Weitergabe an Dritte ist nicht gestattet.
|
modified or unmodified, must include a clear and visible attribution to the original author:
|
||||||
|
|
||||||
Die Bereitstellung dieser Software erfolgt OHNE JEGLICHE GARANTIE,
|
**Adam Skotarczak <adam@skotarczak.net>**
|
||||||
weder ausdrücklich noch stillschweigend, einschließlich, aber nicht beschränkt auf die Garantien
|
|
||||||
der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
|
|
||||||
|
|
||||||
Durch die Nutzung dieser Software erklärst du dich mit den oben genannten Bedingungen einverstanden.
|
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
||||||
|
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
54
README.md
54
README.md
@ -1,18 +1,21 @@
|
|||||||
# pyUpload (TKInter Version)
|
# pyUpload (TKinter-Version)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## ⚠️ Projektstatus: Eingefroren – Nur noch Bugfixes
|
## ⚠️ Projektstatus: Eingefroren – Nur noch Bugfixes
|
||||||
|
|
||||||
Diese Version von **pyUpload** wird **nicht weiterentwickelt** und erhält nur noch Fehlerbehebungen.
|
Diese Version von **pyUpload** wird **nicht weiterentwickelt** und erhält nur noch Fehlerbehebungen.
|
||||||
Die neue Version mit Flask-Backend ist **BALD** verfügbar unter:
|
Die neue Version mit Flask-Backend wird **bald** verfügbar sein unter:
|
||||||
|
|
||||||
🔗 **<https://github.com/realAscot/pyUpload2>**
|
🔗 **<https://github.com/realAscot/pyUpload2>**
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- [pyUpload (TKInter Version)](#pyupload-tkinter-version)
|
## 📑 Inhalt der Readme
|
||||||
|
|
||||||
|
- [pyUpload (TKinter-Version)](#pyupload-tkinter-version)
|
||||||
- [⚠️ Projektstatus: Eingefroren – Nur noch Bugfixes](#️-projektstatus-eingefroren--nur-noch-bugfixes)
|
- [⚠️ Projektstatus: Eingefroren – Nur noch Bugfixes](#️-projektstatus-eingefroren--nur-noch-bugfixes)
|
||||||
|
- [📑 Inhalt der Readme](#-inhalt-der-readme)
|
||||||
- [pyUpload – Sicherer Datei-Upload-Server über HTTPS (lokal \& offline)](#pyupload--sicherer-datei-upload-server-über-https-lokal--offline)
|
- [pyUpload – Sicherer Datei-Upload-Server über HTTPS (lokal \& offline)](#pyupload--sicherer-datei-upload-server-über-https-lokal--offline)
|
||||||
- [🛠 Features](#-features)
|
- [🛠 Features](#-features)
|
||||||
- [🚀 Schnellstart](#-schnellstart)
|
- [🚀 Schnellstart](#-schnellstart)
|
||||||
@ -24,7 +27,7 @@ Die neue Version mit Flask-Backend ist **BALD** verfügbar unter:
|
|||||||
- [🔐 Hinweis zur SSL-Zertifikatswarnung](#-hinweis-zur-ssl-zertifikatswarnung)
|
- [🔐 Hinweis zur SSL-Zertifikatswarnung](#-hinweis-zur-ssl-zertifikatswarnung)
|
||||||
- [💡 Ideen für zukünftige Entwicklungen](#-ideen-für-zukünftige-entwicklungen)
|
- [💡 Ideen für zukünftige Entwicklungen](#-ideen-für-zukünftige-entwicklungen)
|
||||||
- [🐛 Bekannte Bugs](#-bekannte-bugs)
|
- [🐛 Bekannte Bugs](#-bekannte-bugs)
|
||||||
- [👨💻 Autor und alle beteiligte](#-autor-und-alle-beteiligte)
|
- [## 👨💻 Autor und Beteiligte](#--autor-und-beteiligte)
|
||||||
- [📝 Lizenz](#-lizenz)
|
- [📝 Lizenz](#-lizenz)
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -34,6 +37,8 @@ Die neue Version mit Flask-Backend ist **BALD** verfügbar unter:
|
|||||||
Diese Version basiert auf **Tkinter (GUI + QR)** sowie einer optionalen **reinen CLI-Nutzung**.
|
Diese Version basiert auf **Tkinter (GUI + QR)** sowie einer optionalen **reinen CLI-Nutzung**.
|
||||||
Sie ist vollständig lokal lauffähig – ganz ohne Installation von externen Tools oder komplexen Abhängigkeiten.
|
Sie ist vollständig lokal lauffähig – ganz ohne Installation von externen Tools oder komplexen Abhängigkeiten.
|
||||||
|
|
||||||
|
[🔝](#-inhalt-der-readme)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🛠 Features
|
## 🛠 Features
|
||||||
@ -46,6 +51,8 @@ Sie ist vollständig lokal lauffähig – ganz ohne Installation von externen To
|
|||||||
- **automatische Einrichtung von `.venv` und Abhängigkeiten**
|
- **automatische Einrichtung von `.venv` und Abhängigkeiten**
|
||||||
- **kein Installationsskript mehr nötig – alles passiert beim Start von `main.py`**
|
- **kein Installationsskript mehr nötig – alles passiert beim Start von `main.py`**
|
||||||
|
|
||||||
|
[🔝](#-inhalt-der-readme)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 Schnellstart
|
## 🚀 Schnellstart
|
||||||
@ -60,7 +67,7 @@ Sie ist vollständig lokal lauffähig – ganz ohne Installation von externen To
|
|||||||
```
|
```
|
||||||
|
|
||||||
Alternativ einfach eine bereinigte `.zip` bei den [Releases auf GitHub](https://github.com/realAscot/pyUpload/releases/) herrunterladen.
|
Alternativ einfach eine bereinigte `.zip` bei den [Releases auf GitHub](https://github.com/realAscot/pyUpload/releases/) herrunterladen.
|
||||||
Diese enthällt kein `.git Archiv` und enthält nur das aller nötigste zum Betrieb des Programms.
|
Diese enthält kein `.git`-Archiv und nur das Allernötigste für den Betrieb des Programms.
|
||||||
|
|
||||||
2. Starte die App mit:
|
2. Starte die App mit:
|
||||||
|
|
||||||
@ -76,12 +83,16 @@ Sie ist vollständig lokal lauffähig – ganz ohne Installation von externen To
|
|||||||
|
|
||||||
⚠️ **Alternative 2 falls die Ausführung per Doppelklick auf .bat oder .cmd gesperrt ist:**
|
⚠️ **Alternative 2 falls die Ausführung per Doppelklick auf .bat oder .cmd gesperrt ist:**
|
||||||
|
|
||||||
> Doppelklick auf -> `start.pyw`
|
Doppelklick auf `start.pyw` oder im Terminal mit:
|
||||||
|
|
||||||
Es ist möglich das beim ersten mal gefragt wird womit das Programm gestartet werden soll.
|
```cmd
|
||||||
|
python start.pyw`
|
||||||
|
```
|
||||||
|
|
||||||
|
Es ist möglich, dass beim ersten Mal gefragt wird, womit das Programm gestartet werden soll.
|
||||||
Einfach die Python-Installation suchen und `python.exe` wählen.
|
Einfach die Python-Installation suchen und `python.exe` wählen.
|
||||||
|
|
||||||
Ich empfehle einfach eine Verknüpfung der `start.pyw` zB auf den Desktop oder ins Startmenü zu legen.
|
Ich empfehle, eine Verknüpfung der `start.pyw` z. B. auf dem Desktop zu erstellen
|
||||||
|
|
||||||
### 🐧 Für Linux / macOS:
|
### 🐧 Für Linux / macOS:
|
||||||
|
|
||||||
@ -111,6 +122,8 @@ Beim ersten Start wird automatisch:
|
|||||||
- `requirements.txt` installiert
|
- `requirements.txt` installiert
|
||||||
- das Programm danach neu aus der Umgebung gestartet
|
- das Programm danach neu aus der Umgebung gestartet
|
||||||
|
|
||||||
|
[🔝](#-inhalt-der-readme)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🧩 Kommandozeilenoptionen
|
## 🧩 Kommandozeilenoptionen
|
||||||
@ -135,6 +148,8 @@ pythonw.exe start.pyw --port 9999 # Custom-Port verwenden
|
|||||||
|
|
||||||
Wenn Du die Dateierweiterung `.pyw` mit `pythonw.exe` verknüpfst, klappt es auch ohne mit Doppelklick im Explorer :-)
|
Wenn Du die Dateierweiterung `.pyw` mit `pythonw.exe` verknüpfst, klappt es auch ohne mit Doppelklick im Explorer :-)
|
||||||
|
|
||||||
|
[🔝](#-inhalt-der-readme)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🌐 Zugriff im Browser
|
## 🌐 Zugriff im Browser
|
||||||
@ -150,6 +165,8 @@ Dateien werden im `upload/<Client-IP>/` gespeichert.
|
|||||||
|
|
||||||
Wichtig dabei ist es darauf zu achten, das tatsächlich auch https verwendet wird, falls man die Adresse händisch eingibt statt mit QR-Code! Man könnte noch zusätzlich einen http-server in der App laufen lassen, der dann automatisch umleitet, aber wir möchten das Programm so klein wie möglich halten.
|
Wichtig dabei ist es darauf zu achten, das tatsächlich auch https verwendet wird, falls man die Adresse händisch eingibt statt mit QR-Code! Man könnte noch zusätzlich einen http-server in der App laufen lassen, der dann automatisch umleitet, aber wir möchten das Programm so klein wie möglich halten.
|
||||||
|
|
||||||
|
[🔝](#-inhalt-der-readme)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📁 Logs & Uploads
|
## 📁 Logs & Uploads
|
||||||
@ -158,6 +175,8 @@ Wichtig dabei ist es darauf zu achten, das tatsächlich auch https verwendet wir
|
|||||||
- **Zentrale Logs**: `logs/pyupload.log`
|
- **Zentrale Logs**: `logs/pyupload.log`
|
||||||
- **Pro-Client Logs**: `logs/<Client-IP>.log`
|
- **Pro-Client Logs**: `logs/<Client-IP>.log`
|
||||||
|
|
||||||
|
[🔝](#-inhalt-der-readme)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔐 Hinweis zur SSL-Zertifikatswarnung
|
## 🔐 Hinweis zur SSL-Zertifikatswarnung
|
||||||
@ -172,7 +191,10 @@ Da das in lokalen oder testnahen Umgebungen in der Regel nicht der Fall ist, lä
|
|||||||
|
|
||||||
>💡 **Wichtig zu wissen:**
|
>💡 **Wichtig zu wissen:**
|
||||||
Die Verbindung ist trotzdem Ende-zu-Ende verschlüsselt. Die Schlüssel werden bei jedem Start lokal neu generiert – direkt auf deinem Rechner.
|
Die Verbindung ist trotzdem Ende-zu-Ende verschlüsselt. Die Schlüssel werden bei jedem Start lokal neu generiert – direkt auf deinem Rechner.
|
||||||
Technisch ist die Verbindung also sicher. Dein Browser vertraut dem Zertifikat nur nicht, weil es nicht von einer offiziellen Zertifizierungsstelle stammt – sondern von dir selbst.
|
Technisch ist die Verbindung also sicher.
|
||||||
|
Dein Browser vertraut dem Zertifikat lediglich nicht, weil es nicht von einer offiziellen Zertifizierungsstelle stammt, sondern lokal erzeugt wurde.
|
||||||
|
|
||||||
|
[🔝](#-inhalt-der-readme)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -186,6 +208,8 @@ Beiträge willkommen!
|
|||||||
- [ ] _____________________________________________________
|
- [ ] _____________________________________________________
|
||||||
- [ ] _____________________________________________________
|
- [ ] _____________________________________________________
|
||||||
|
|
||||||
|
[🔝](#-inhalt-der-readme)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🐛 Bekannte Bugs
|
## 🐛 Bekannte Bugs
|
||||||
@ -193,11 +217,14 @@ Beiträge willkommen!
|
|||||||
- **Frontend:** wenn im Browser der Button Hochladen gewählt wird, OHNE das Dateien ausgewählt wurden,
|
- **Frontend:** wenn im Browser der Button Hochladen gewählt wird, OHNE das Dateien ausgewählt wurden,
|
||||||
kommt es zu einem *Error response - Error code: 400* im Browser. Lösungsansatz wäre den Button über JS zu sperren solange keine Datei ausgewählt ist. Lässt sich schnell im [template](./app/template.html) erledigen.
|
kommt es zu einem *Error response - Error code: 400* im Browser. Lösungsansatz wäre den Button über JS zu sperren solange keine Datei ausgewählt ist. Lässt sich schnell im [template](./app/template.html) erledigen.
|
||||||
|
|
||||||
Wenn jemand Lust und Zeit hat sich diesem anzunehmen, nur zu. Ich Danke im Vorraus!
|
Wenn jemand Lust und Zeit hat sich diesem anzunehmen, nur zu.
|
||||||
|
Ich danke im Voraus!
|
||||||
|
|
||||||
|
[🔝](#-inhalt-der-readme)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 👨💻 Autor und alle beteiligte
|
## ## 👨💻 Autor und Beteiligte
|
||||||
|
|
||||||
- **Adam Skotarczak**
|
- **Adam Skotarczak**
|
||||||
Kontakt: [adam@skotarczak.net](mailto:adam@skotarczak.net)
|
Kontakt: [adam@skotarczak.net](mailto:adam@skotarczak.net)
|
||||||
@ -205,9 +232,10 @@ Wenn jemand Lust und Zeit hat sich diesem anzunehmen, nur zu. Ich Danke im Vorra
|
|||||||
|
|
||||||
- **Du?**
|
- **Du?**
|
||||||
|
|
||||||
|
[🔝](#-inhalt-der-readme)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📝 Lizenz
|
## 📝 Lizenz
|
||||||
|
|
||||||
- Proprietär, © 2025 Adam Skotarczak
|
MIT [LICENSE](./LICENSE) – frei verwendbar in eigenen Projekten bei Namensnennung.
|
||||||
**Keine Weitergabe ohne ausdrückliche Genehmigung**
|
|
||||||
|
@ -19,7 +19,7 @@ VENV_PYTHON = os.path.join(VENV_DIR, "Scripts", "python.exe") if os.name == "nt"
|
|||||||
REQUIREMENTS_FILE = os.path.join(BASE_DIR, "requirements.txt")
|
REQUIREMENTS_FILE = os.path.join(BASE_DIR, "requirements.txt")
|
||||||
|
|
||||||
# Wenn wir NICHT in der venv sind
|
# Wenn wir NICHT in der venv sind
|
||||||
if sys.prefix == sys.base_prefix:
|
if sys.prefix == sys.base_prefix and sys.executable != VENV_PYTHON:
|
||||||
# venv erstellen falls nötig
|
# venv erstellen falls nötig
|
||||||
if not os.path.exists(VENV_DIR):
|
if not os.path.exists(VENV_DIR):
|
||||||
print("[Setup] Virtuelle Umgebung wird erstellt...")
|
print("[Setup] Virtuelle Umgebung wird erstellt...")
|
||||||
@ -34,6 +34,7 @@ if sys.prefix == sys.base_prefix:
|
|||||||
|
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
subprocess.Popen([VENV_PYTHON] + sys.argv, creationflags=subprocess.CREATE_NEW_CONSOLE)
|
subprocess.Popen([VENV_PYTHON] + sys.argv, creationflags=subprocess.CREATE_NEW_CONSOLE)
|
||||||
|
sys.exit(0)
|
||||||
else:
|
else:
|
||||||
os.execv(VENV_PYTHON, [VENV_PYTHON] + sys.argv)
|
os.execv(VENV_PYTHON, [VENV_PYTHON] + sys.argv)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
@ -15,4 +15,10 @@ if errorlevel 1 (
|
|||||||
set SCRIPT_DIR=%~dp0
|
set SCRIPT_DIR=%~dp0
|
||||||
|
|
||||||
:: Starte den Python-Wrapper, der .venv erkennt
|
:: Starte den Python-Wrapper, der .venv erkennt
|
||||||
pythonw.exe "%SCRIPT_DIR%start.pyw" %*
|
if exist app\.venv\Scripts\python.exe (
|
||||||
|
python.exe "%SCRIPT_DIR%start.pyw" %*
|
||||||
|
) else (
|
||||||
|
echo Erste Initialisierung erforderlich.
|
||||||
|
echo Starte Setup-Konsole...
|
||||||
|
start cmd /k python.exe "%SCRIPT_DIR%start.pyw" %*
|
||||||
|
)
|
||||||
|
@ -13,4 +13,5 @@ venv_python = os.path.join("app", ".venv", "Scripts", "python.exe") if os.name =
|
|||||||
python_exec = venv_python if os.path.exists(venv_python) else sys.executable
|
python_exec = venv_python if os.path.exists(venv_python) else sys.executable
|
||||||
|
|
||||||
# Starte main.py
|
# Starte main.py
|
||||||
subprocess.run([python_exec, "app/main.py"] + sys.argv[1:])
|
main_script = os.path.abspath(os.path.join("app", "main.py"))
|
||||||
|
subprocess.run([python_exec, main_script] + sys.argv[1:])
|
||||||
|
7
start.sh
7
start.sh
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
# Verzeichnis dieser Datei bestimmen
|
# Absoluten Pfad zur start.pyw berechnen (falls per Symlink gestartet)
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
# Python-Interpreter prüfen
|
# Python-Interpreter prüfen
|
||||||
@ -10,5 +11,5 @@ if ! command -v python3 &> /dev/null; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Starte das Hauptskript
|
# Direkt ausführen
|
||||||
python3 "$SCRIPT_DIR/app/main.py" "$@"
|
python3 "$SCRIPT_DIR/start.pyw" "$@"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user