Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
b3a831ed42 | |||
abeec7bd9c | |||
475f3cc1ee | |||
a57e7b8929 | |||
17353b3000 |
3
.gitignore
vendored
3
.gitignore
vendored
@ -36,3 +36,6 @@ Thumbs.db
|
|||||||
# Custom:
|
# Custom:
|
||||||
*kopie*
|
*kopie*
|
||||||
gitcopy.bat
|
gitcopy.bat
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.vscode/
|
||||||
|
7
.vscode/extensions.json
vendored
7
.vscode/extensions.json
vendored
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"recommendations": [
|
|
||||||
"ms-python.python",
|
|
||||||
"ms-python.vscode-pylance",
|
|
||||||
"ms-toolsai.jupyter"
|
|
||||||
]
|
|
||||||
}
|
|
30
.vscode/settings.jsonc
vendored
30
.vscode/settings.jsonc
vendored
@ -1,30 +0,0 @@
|
|||||||
{ // 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
17
.vscode/tasks.json
vendored
@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
17
CHANGELOG.md
17
CHANGELOG.md
@ -2,6 +2,23 @@
|
|||||||
|
|
||||||
## pyUpload (TKInter-Version 1.0)
|
## pyUpload (TKInter-Version 1.0)
|
||||||
|
|
||||||
|
- **2025-05-07 - v1.2.1**
|
||||||
|
- **Geändert:**
|
||||||
|
- [x] Logo angepasst und kleine belanglose Änderungen
|
||||||
|
- [X] (C) aus LICENSE entfernt
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
- **2025-05-07 - v1.2.1**
|
||||||
|
- **Geändert:**
|
||||||
|
- [x] `main.py` übergibt beim Neustart unter Linux jetzt einen **absoluten Pfad**, um Doppelpunkte wie `app/app/main.py` zu vermeiden.
|
||||||
|
- [x] `start.pyw` berücksichtigt nun `venv`-Interpreter korrekt, wenn vorhanden, sonst fallback auf `sys.executable`.
|
||||||
|
- [x] Erkennung von fehlendem `ensurepip`, mit Hinweis zur Installation von `python3-venv` bei Bedarf.
|
||||||
|
- [x] Neue Warnung, wenn `tkinter` fehlt – ohne Abbruch, Upload-Server läuft dennoch im CLI-Modus weiter.
|
||||||
|
- [x] README.md ergänzt um Setup-Hinweise für Linux bzgl. `python3-venv` und `python3-tk`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
- **2025-04-28 - v1.2.0**
|
- **2025-04-28 - v1.2.0**
|
||||||
- **Geändert:**
|
- **Geändert:**
|
||||||
- [x] `main.py` prüft nun zusätzlich, ob die virtuelle Umgebung auch funktioniert und nicht nur ob sie lediglich vorhanden ist.
|
- [x] `main.py` prüft nun zusätzlich, ob die virtuelle Umgebung auch funktioniert und nicht nur ob sie lediglich vorhanden ist.
|
||||||
|
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
MIT License with Attribution Requirement
|
MIT License with Attribution Requirement
|
||||||
|
|
||||||
Copyright (c) 2025 Adam Skotarczak <adam@skotarczak.net>
|
Adam Skotarczak <adam@skotarczak.net>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the “Software”), to deal
|
of this software and associated documentation files (the “Software”), to deal
|
||||||
|
55
README.md
55
README.md
@ -4,11 +4,16 @@
|
|||||||
|
|
||||||
## ⚠️ 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 wird **bald** verfügbar sein unter:
|
> Die neue Version mit Flask-Backend wird **bald** verfügbar sein unter:
|
||||||
|
|
||||||
🔗 **<https://github.com/realAscot/pyUpload2>**
|
🔗 **<https://github.com/realAscot/pyUpload2>**
|
||||||
|
|
||||||
|
**DIESE** Version ist aber voll funktionsfähig, sowohl die reine Python-Version wie auch die Windows `.exe`
|
||||||
|
|
||||||
|
- (<https://github.com/realAscot/pyUpload/releases/tag/v1.0.0-alpha>)
|
||||||
|
Dem Programm liegen bootstrap Routinen bei die alle notwendigen Biblioteken nachinstallieren.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📑 Inhalt der Readme
|
## 📑 Inhalt der Readme
|
||||||
@ -19,15 +24,16 @@ Die neue Version mit Flask-Backend wird **bald** verfügbar sein unter:
|
|||||||
- [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)
|
||||||
- [▶️ Für Windows:](#️-für-windows)
|
- [▶️ Für Windows](#️-für-windows)
|
||||||
- [🐧 Für Linux / macOS:](#-für-linux--macos)
|
- [🐧 Für Linux / macOS](#-für-linux--macos)
|
||||||
- [🧩 Kommandozeilenoptionen](#-kommandozeilenoptionen)
|
- [🧩 Kommandozeilenoptionen](#-kommandozeilenoptionen)
|
||||||
- [🌐 Zugriff im Browser](#-zugriff-im-browser)
|
- [🌐 Zugriff im Browser](#-zugriff-im-browser)
|
||||||
- [📁 Logs \& Uploads](#-logs--uploads)
|
- [📁 Logs \& Uploads](#-logs--uploads)
|
||||||
- [🔐 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 Beteiligte](#--autor-und-beteiligte)
|
- [🤖 Autor und Beteiligte](#-autor-und-beteiligte)
|
||||||
|
- [☕ Support](#-support)
|
||||||
- [📝 Lizenz](#-lizenz)
|
- [📝 Lizenz](#-lizenz)
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -57,7 +63,7 @@ Sie ist vollständig lokal lauffähig – ganz ohne Installation von externen To
|
|||||||
|
|
||||||
## 🚀 Schnellstart
|
## 🚀 Schnellstart
|
||||||
|
|
||||||
### ▶️ Für Windows:
|
### ▶️ Für Windows
|
||||||
|
|
||||||
1. Lade das Projekt herunter oder klone es:
|
1. Lade das Projekt herunter oder klone es:
|
||||||
|
|
||||||
@ -94,7 +100,7 @@ Sie ist vollständig lokal lauffähig – ganz ohne Installation von externen To
|
|||||||
|
|
||||||
Ich empfehle, eine Verknüpfung der `start.pyw` z. B. auf dem Desktop zu erstellen
|
Ich empfehle, eine Verknüpfung der `start.pyw` z. B. auf dem Desktop zu erstellen
|
||||||
|
|
||||||
### 🐧 Für Linux / macOS:
|
### 🐧 Für Linux / macOS
|
||||||
|
|
||||||
1. Stelle sicher, dass Python 3.8+ installiert ist:
|
1. Stelle sicher, dass Python 3.8+ installiert ist:
|
||||||
|
|
||||||
@ -102,6 +108,20 @@ Sie ist vollständig lokal lauffähig – ganz ohne Installation von externen To
|
|||||||
python3 --version
|
python3 --version
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Stelle sicher, dass die nötigen Systempakete vorhanden sind:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install python3-venv python3-tk
|
||||||
|
```
|
||||||
|
|
||||||
|
Bei neueren Systemen mit z. B. Python 3.12:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install python3.12-venv python3.12-tk
|
||||||
|
```
|
||||||
|
|
||||||
|
Dies trifft nicht bei allen Systemen zu, bei Ubuntu z.B muss TKinter händisch leider nachinstalliert werden.
|
||||||
|
|
||||||
2. Mache das Startscript ausführbar:
|
2. Mache das Startscript ausführbar:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -189,11 +209,18 @@ Wichtig dabei ist es darauf zu achten, das tatsächlich auch https verwendet wir
|
|||||||
Damit dein Browser diese Warnung dauerhaft vermeidet, müssen die Zertifikate zu deiner verwendeten Domain passen.
|
Damit dein Browser diese Warnung dauerhaft vermeidet, müssen die Zertifikate zu deiner verwendeten Domain passen.
|
||||||
Da das in lokalen oder testnahen Umgebungen in der Regel nicht der Fall ist, lässt sich diese Warnung meist nicht vermeiden.
|
Da das in lokalen oder testnahen Umgebungen in der Regel nicht der Fall ist, lässt sich diese Warnung meist nicht vermeiden.
|
||||||
|
|
||||||
>💡 **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.
|
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.
|
Dein Browser vertraut dem Zertifikat lediglich nicht, weil es nicht von einer offiziellen Zertifizierungsstelle stammt, sondern lokal erzeugt wurde.
|
||||||
|
|
||||||
|
TKinter unter Linux:
|
||||||
|
|
||||||
|
> **Hinweis für Linux-Benutzer:**
|
||||||
|
Falls die GUI nicht erscheint und stattdessen eine Warnung, wie `ModuleNotFoundError: No module named 'tkinter'`, liegt das daran,
|
||||||
|
dass `tkinter` unter Linux separat installiert werden muss.
|
||||||
|
Siehe Abschnitt [🐧 Für Linux / macOS](#-für-linux--macos) für Details.
|
||||||
|
|
||||||
[🔝](#-inhalt-der-readme)
|
[🔝](#-inhalt-der-readme)
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -215,7 +242,8 @@ Beiträge willkommen!
|
|||||||
## 🐛 Bekannte Bugs
|
## 🐛 Bekannte Bugs
|
||||||
|
|
||||||
- **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.
|
Wenn jemand Lust und Zeit hat sich diesem anzunehmen, nur zu.
|
||||||
Ich danke im Voraus!
|
Ich danke im Voraus!
|
||||||
@ -224,7 +252,7 @@ Ich danke im Voraus!
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 👨💻 Autor und Beteiligte
|
## 🤖 Autor und Beteiligte
|
||||||
|
|
||||||
- **Adam Skotarczak**
|
- **Adam Skotarczak**
|
||||||
Kontakt: [adam@skotarczak.net](mailto:adam@skotarczak.net)
|
Kontakt: [adam@skotarczak.net](mailto:adam@skotarczak.net)
|
||||||
@ -236,6 +264,13 @@ Ich danke im Voraus!
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## ☕ Support
|
||||||
|
|
||||||
|
Wenn dir dieses Projekt gefällt, kannst du mich hier unterstützen:
|
||||||
|
☕ [paypal.me/AdamSkotarczak](https://www.paypal.me/AdamSkotarczak)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 📝 Lizenz
|
## 📝 Lizenz
|
||||||
|
|
||||||
MIT [LICENSE](./LICENSE) – frei verwendbar in eigenen Projekten bei Namensnennung.
|
MIT [LICENSE](./LICENSE) – frei verwendbar in eigenen Projekten bei Namensnennung.
|
||||||
|
12
app/main.py
12
app/main.py
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# © 2025 Adam Skotarczak (adam@skotarczak.net)
|
# © 2025 Adam Skotarczak (adam@skotarczak.net)
|
||||||
#
|
#
|
||||||
# Version 1.0.2 (28.04.2025 - virtuelle Umgebung korrekt aktiviert)
|
# Version 1.2.1 (07.05.2025 - Linux Test und Anpassungen im Bootstap)
|
||||||
# Manuell in z.B. VS-Code: .\app\.venv\Scripts\activate
|
# Manuell in z.B. VS-Code: .\app\.venv\Scripts\activate
|
||||||
#
|
#
|
||||||
# Original unter:
|
# Original unter:
|
||||||
@ -38,7 +38,9 @@ if (sys.prefix == sys.base_prefix and sys.executable != VENV_PYTHON) or not os.p
|
|||||||
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)
|
sys.exit(0)
|
||||||
else:
|
else:
|
||||||
os.execv(VENV_PYTHON, [VENV_PYTHON] + sys.argv)
|
main_script = os.path.join(BASE_DIR, "main.py")
|
||||||
|
os.execv(VENV_PYTHON, [VENV_PYTHON, main_script] + sys.argv[1:])
|
||||||
|
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
# Wir sind jetzt sicher in der richtigen Umgebung → Rest des Programms geht hier weiter:
|
# Wir sind jetzt sicher in der richtigen Umgebung → Rest des Programms geht hier weiter:
|
||||||
@ -259,7 +261,11 @@ def run_server_with_gui(port):
|
|||||||
import qrcode
|
import qrcode
|
||||||
import webbrowser
|
import webbrowser
|
||||||
from PIL import Image, ImageTk
|
from PIL import Image, ImageTk
|
||||||
import tkinter as tk
|
try:
|
||||||
|
import tkinter as tk
|
||||||
|
except ImportError:
|
||||||
|
print("⚠ Hinweis: tkinter ist nicht installiert. Für die GUI benötigst du:")
|
||||||
|
print(" sudo apt install python3-tk")
|
||||||
|
|
||||||
httpd = create_https_server(port)
|
httpd = create_https_server(port)
|
||||||
server_ip = get_server_ip()
|
server_ip = get_server_ip()
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 217 KiB |
BIN
assets/logo-1.0-alpha_1024x1024.png
Normal file
BIN
assets/logo-1.0-alpha_1024x1024.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 798 KiB |
BIN
assets/logo-1.0-alpha_512x512.png
Normal file
BIN
assets/logo-1.0-alpha_512x512.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 217 KiB |
Loading…
x
Reference in New Issue
Block a user