12 Commits
teil28 ... 1.0

Author SHA1 Message Date
7478e0fc78 POST 2025-05-30 10:55:38 +02:00
939a72c21e Merge branch 'master' into develop 2025-05-29 10:24:15 +02:00
7bfca82f33 uv - chat-rest-server 2025-05-29 10:20:24 +02:00
58b4c6e116 date_diff
Dockerfile
2025-05-18 10:47:40 +02:00
Olli Graf
61e8c85bbe Styling des "Passwort vergessen" Button. 2025-02-17 06:49:49 +01:00
Olli Graf
dac83ccbf9 requirements.txt 2025-02-16 14:41:07 +01:00
Olli Graf
4d2b58b744 Dateien zu Teil 29 2025-02-16 14:39:34 +01:00
6db74b04f5 „date_diff.py“ hinzufügen
Übernahme
2024-11-11 07:00:14 +00:00
060c235e3f Typo korrigiert. 2024-11-09 16:58:16 +01:00
Olli Graf
ea14cde427 Zwischen Commit 2024-11-09 10:21:36 +01:00
Olli Graf
f421a8abd6 Readme.md aktualosiert. 2024-06-22 08:47:55 +02:00
Olli Graf
0c76dc11d7 Versuche mit Assignment Expressions. 2024-06-19 12:03:53 +02:00
34 changed files with 585 additions and 2 deletions

52
date_diff.py Executable file
View File

@@ -0,0 +1,52 @@
#! /usr/bin/python
import sys
from datetime import datetime
def date_diff_in_days(date1, date2):
try:
# Konvertiere die übergebenen Datumsangaben in datetime-Objekte
if date1 == '$today':
print('date1 ist heutiges Datum')
date1_obj = datetime.today()
date1_obj = date1_obj.replace(hour=0,minute=0,second=0,microsecond=0)
else:
print(f'konvertiere erstes Datum {date1}')
date1_obj = datetime.strptime(date1, "%d.%m.%Y")
if date2 == '$today':
print('date2 ist heutiges Datum')
date2_obj = datetime.today()
date2_obj = date2_obj.replace(hour=0,minute=0,second=0,microsecond=0)
else:
print(f'konvertiere zweites Datum {date2}')
date2_obj = datetime.strptime(date2, "%d.%m.%Y")
print(f'konvertiere zweites Datum {date2}')
# Berechne die Differenz zwischen den beiden Datumsangaben
print(f'erstes Datum: {date1_obj}, zweites Datum: {date2_obj}')
diff = abs(date1_obj - date2_obj).days
return diff
except ValueError as e:
print("Fehler beim Parsen der Datumsangaben:", e)
return None
if __name__ == "__main__":
# Überprüfe, ob genau zwei Datumsangaben als Parameter übergeben wurden
print(f'Params: {sys.argv}')
print(f'Anzahl Param: {len(sys.argv)}')
if len(sys.argv) != 3:
print("Bitte geben Sie zwei Datumsangaben im Format YYYY-MM-DD als Kommandozeilenparameter ein.")
else:
date1 = sys.argv[1]
date2 = sys.argv[2]
# Berechne die Differenz in Tagen zwischen den beiden Datumsangaben
difference = date_diff_in_days(date1, date2)
if difference is not None:
if sys.argv[1] == '$today':
date1= 'heutigen Tag'
if sys.argv[2] == '$today':
date2= 'heutigen Tag'
print(f"Zwischen dem {date1} und dem {date2} liegen {difference} Tage.")

View File

@@ -1,5 +1,5 @@
# Python Basis-Image
FROM python:3.8
FROM python:3.11-alpine
# Arbeitsverzeichnis innerhalb des Containers
WORKDIR /app
@@ -19,4 +19,4 @@ COPY fib/static /app/static
COPY fib/templates /app/templates
# Befehl, der die Anwendung startet
CMD ["python", "app.py"]
CMD ["python", "/app/app.py"]

View File

@@ -0,0 +1,9 @@
---
version: "2.1"
services:
fibserver:
image: hans:5000/fibserver:1
container_name: fibserver
ports:
- 8085:8085
restart: unless-stopped

1
getattr/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
__pycache__

19
getattr/Kreis_getattr.py Normal file
View File

@@ -0,0 +1,19 @@
from math import pi as pi
class Kreis_getattr:
def __init__(self, radius):
self.radius = radius
self.operators ={
'durchmesser': lambda x: self.radius * 2,
'umfang': lambda x: self.durchmesser * pi,
'flaeche': lambda x: self.radius**2 *pi
}
def __getattr__(self, name):
if name not in self.operators:
raise TypeError(f'unbekannte Operation {name}')
return self.operators[name](0)

1
rest_chat_server/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.venv

View File

@@ -0,0 +1 @@
3.9

View File

View File

@@ -0,0 +1,83 @@
import falcon, json
import logging
from logging import config
from datetime import datetime
class Message:
def __init__(self,user, text):
self.user = user
self.text = text
self.created = datetime.now()
def __str__(self):
return self.text
class ChatServer(object):
def __init__(self):
self.msglist = {}
initmsg = Message('system','Chat Server bereit')
self.addMsg(initmsg)
def addMsg(self,msg):
created = datetime.now()
self.msglist[created.strftime('%d.%m.%y %H:%M.%f')] = msg
def on_get(self,req,resp):
logging.debug('on_get()')
logging.debug(f'msglist= {self.msglist}')
json_msgs = {}
for key in self.msglist:
text = self.msglist[key].text
json_msgs[key] = {
'key': key,
'user': self.msglist[key].user,
'text': text
}
resp.status = falcon.HTTP_OK
resp.media = json_msgs
def on_post(self,req,resp):
logging.debug('on_post()')
json_string = req.media
logging.debug(f'json_string={json_string}')
msg = Message(json_string['user'],json_string['text'])
self.addMsg(msg)
resp.status = falcon.HTTP_OK
def on_delete(self,req,resp):
logging.debug('on_delete()')
def create_chat_resource():
chat_endpoint = ChatServer()
logging.debug(f'endpoint={chat_endpoint}')
return chat_endpoint
application = falcon.App()
with open('log_config.json') as file_config:
config.dictConfig(json.load(file_config))
resource = create_chat_resource()
application.add_route('/msg', resource)
logging.debug('Chat REST Service bereit')

View File

@@ -0,0 +1,6 @@
def main():
print("Hello from rest-chat-server!")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,28 @@
{
"version":1,
"formatters":{
"std_out":{
"format": "%(asctime)s : %(levelname)s : %(module)s : %(funcName)s : %(lineno)d : (Process Details : (%(process)d, %(processName)s), Thread Details : (%(thread)d, %(threadName)s))\nLog : %(message)s",
"datefmt":"%d-%m-%Y %I:%M:%S"
}
},
"handlers":{
"console":{
"formatter": "std_out",
"class": "logging.StreamHandler",
"level": "DEBUG"
},
"file":{
"formatter":"std_out",
"class":"logging.FileHandler",
"level":"DEBUG",
"filename" : "chat_server.log"
}
},
"root":{
"handlers":["console","file"],
"level": "DEBUG"
}
}

View File

@@ -0,0 +1,10 @@
[project]
name = "rest-chat-server"
version = "0.0.1"
description = "Chat Server mit REST"
readme = "README.md"
requires-python = ">=3.9"
dependencies = [
"falcon>=4.0.2",
"gunicorn>=23.0.0",
]

87
rest_chat_server/uv.lock generated Normal file
View File

@@ -0,0 +1,87 @@
version = 1
requires-python = ">=3.9"
[[package]]
name = "falcon"
version = "4.0.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/37/4f/d317952294dee1982cd930c8ee2b8b7fbf04140473882801061b3346c713/falcon-4.0.2.tar.gz", hash = "sha256:58f4b9c9da4c9b1e2c9f396ad7ef897701b3c7c7c87227f0bd1aee40c7fbc525", size = 630121 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b0/75/e33013aedec976d13f2104ab2e054b5e3863b518c9b28239d2837b521d7f/falcon-4.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8eab0212e77017385d48be2dfe9f5b32305fc9e4066cd298e4bb39e666e114c8", size = 2315204 },
{ url = "https://files.pythonhosted.org/packages/90/5f/4a3ccb6d8bdb4cfcc38aea9cd5e5c49aea400305f581c839be206c3a93e2/falcon-4.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:942129dd3bfb56342ac368f05ff4f9be53e98883b4227089fce2fd616ebc6ef3", size = 2194755 },
{ url = "https://files.pythonhosted.org/packages/28/99/447d6f8618b3f8b882c7e74eafabb59f6e9112acbc3255dddd353fc75505/falcon-4.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60e7b6e5ee44bb2411a7f47bb64e0b225f11cca6ddf91e5130d456242095f0d7", size = 10390701 },
{ url = "https://files.pythonhosted.org/packages/cb/27/a93dc68be1e70809cfa6d227424790ff502cc1f4272200bb91ebe92fafb1/falcon-4.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:330f1623e579575a9e3d90c2a15aebe100b2afa1e18a4bee2ddaa9a570e97902", size = 10986193 },
{ url = "https://files.pythonhosted.org/packages/cb/22/aae29170b0947a5170844bf74b671b5e0e6dc218e2cc6262d2378ec44d15/falcon-4.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d7cfac5cfca69373d1f65211d75767ed4f2d53b46554307427ec00a6f7f87c1", size = 10511133 },
{ url = "https://files.pythonhosted.org/packages/2f/73/0862e66b5b9c5295f065ee7c83571fd106dd84d63cf0479038986ddf2881/falcon-4.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:da3d942dd34f7a5213987bd053c3b52b6eb75fcfd342dc4fea9241f79a6529b3", size = 10201951 },
{ url = "https://files.pythonhosted.org/packages/78/4f/044454ad96a542f2c446a07b6ebc8da0bef8e7e689e32aeb2bf40594a712/falcon-4.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5169e064bbe5dece52e088e3e8b17cae429f1e04c7aef8c31ae350303b19c620", size = 10633849 },
{ url = "https://files.pythonhosted.org/packages/2f/73/bd689c2790c42b6287df1a43928ae3af6cd2541ac1d64d6fa2fc960dad5b/falcon-4.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:0d62e565b9e71b52b59e03130b2b71345a6873f5299aad6a141caf4a58661b41", size = 2115914 },
{ url = "https://files.pythonhosted.org/packages/01/e3/dfeff966d60f2308f765736044e0a62f046d2420baf50fa4872b06338fd5/falcon-4.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cb6ee1aee9ff6a656762cf5fcd2e6c5dced410ca990016be2bc193e6b74ae9da", size = 2321291 },
{ url = "https://files.pythonhosted.org/packages/73/02/8a1a68ddf9b6f9d4a7d0d63f0a485109318f08c0181a3d9f4b05dceab355/falcon-4.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f1a16d8bdc8ef9cf2832a6ca6d43b156b613fb1587cd08cc928c7b8a118ea0a", size = 2196225 },
{ url = "https://files.pythonhosted.org/packages/9f/64/6fa45987bd0fc78d991be5ea0e30f0812eb26713c2e99ce07e35c959346b/falcon-4.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aee81fc4702eef5bccb640b93187fdf36ca2606fca511982069dbc60be2d1c93", size = 11603829 },
{ url = "https://files.pythonhosted.org/packages/84/ef/bc1d47ee32e2a211cffca346bd935009d2b37189c2119df95c31a9af6231/falcon-4.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c1dbcec63d9118c3dfac1f810305128c4fffe26f4f99a7b4e379dec95fc3bfc", size = 12146705 },
{ url = "https://files.pythonhosted.org/packages/e9/cd/ef07fd256c2a29d3c3f1cc22e0ce59724450eb13ef5ca553e63b6abd19f7/falcon-4.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2892ab1232d3a7cc9890b1b539c471fe04c54f826704f9d05efe5632f18efa1", size = 11693278 },
{ url = "https://files.pythonhosted.org/packages/7e/2b/e03066e7be01f1b09c87ecd9c48e14a0ddafd9fc8fddd05db27b5ad4e3d9/falcon-4.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:af68482b408bde53a77b36e45317767dfc5b6fce1525f5b25d65f57f35d33fca", size = 11379786 },
{ url = "https://files.pythonhosted.org/packages/2d/15/f218b581df1447f743b16812c84ab8f6f7d51fb3c1950129744f6fd653bc/falcon-4.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:53d84de83abe1a2094b319a4f018ab6c5773d9c2c841b528662aa151ab9df35c", size = 11770361 },
{ url = "https://files.pythonhosted.org/packages/11/3e/855c3051cb8aad61a921959e5e62416d759761241c1da8394103c3d1d6af/falcon-4.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:1d06bbbccdb58522b2a6bb2e79074844b0db0da1fff407725858a02515e15bbd", size = 2124712 },
{ url = "https://files.pythonhosted.org/packages/67/db/0b78b7ee3fe7e370ed430b7deabfa524b57a5b9eb32622ce1f1bb7aacf0d/falcon-4.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:23b0419a9a025745734022aaa2e65447595e539ba27352b3f59d86b288f614db", size = 2294078 },
{ url = "https://files.pythonhosted.org/packages/63/01/77b5b0214bc4ca717b6c6cbe8c3adaba653a7312c9c51a9b390f66efbce0/falcon-4.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:524d7b75f7368fe82e94ed16370db5a27bb4b2d066470cba53f02304264447e8", size = 2186007 },
{ url = "https://files.pythonhosted.org/packages/1d/0c/44abd34e38b88f15c5a7030f48ec079669218af3162de2bd1925e13a46a5/falcon-4.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c6b1d7451d5dee4be9b67a75e2a4a0b024dccffedd4e7c7a09513733b5a11db", size = 11644341 },
{ url = "https://files.pythonhosted.org/packages/5e/f3/0260f70dd080d23372e2ff0e330ca37897ab5e1b4890df281558bda8e34a/falcon-4.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59bb4a29626c5e610c62620a1395755e8c7b5509385b80d3637fbc8a604d29a3", size = 12218712 },
{ url = "https://files.pythonhosted.org/packages/8d/f8/704b73fc76cf283504aaacc2f466a08fd5d440cddd8d50b6d5c288f0293b/falcon-4.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26c9ed2912ee48e2e1e7eca3e7e85ab664ff07bd321097a26e4ad6168059424", size = 11842131 },
{ url = "https://files.pythonhosted.org/packages/f2/9a/53f9ee7ee8758972d92bb3dfb2225a9c382fbd12f684616cab9126420602/falcon-4.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0a12bbf3482b7ef1db0c6727c2ad8be5c3ac777d892e56a170e0b4b93651c915", size = 11346087 },
{ url = "https://files.pythonhosted.org/packages/af/ac/8098957dd5b97ed16788104b7acb33c64689f7ab04e0c6b07d6561182950/falcon-4.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a601de7816138f17bf168262e0bceb128fdd1ea2f29ddae035585b5da9223a21", size = 11992383 },
{ url = "https://files.pythonhosted.org/packages/7a/23/f8a74294b5b0cb5b9e3eb44ccea310a5d480ef95e938704827db0dd97f99/falcon-4.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:eec3feda4a9cd773203401e3cf425728a13bf5055b22243b1452e9ad963634f5", size = 2077409 },
{ url = "https://files.pythonhosted.org/packages/1f/34/71ef64406ac7f83c5726a37c9fcae0578bc9d650de09c32148aa6c58502f/falcon-4.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:110b172afe337fbae802f1402c89a5dfe6392f3b8ce4f2ecdfd5cee48f68b805", size = 2257265 },
{ url = "https://files.pythonhosted.org/packages/b7/13/528d074e8a75a9236c9f060685e4cb813fbca774269afc89d31e821d8560/falcon-4.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b3a5db14cf2ef05f8f9630468c03939b86dc16115a5250a1870dac3dca1e04ba", size = 2151133 },
{ url = "https://files.pythonhosted.org/packages/2f/70/8c7bf8bf941238a87debce72fcdc7b2301d6599271a392c8216ea2f5d91e/falcon-4.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e0b4d41ce29c2b5c5b18021320e9e0977ba47ade46b67face52ee1325e2ea4", size = 11438997 },
{ url = "https://files.pythonhosted.org/packages/fa/43/71e358d36ec4559737d63312d746fb5f8b0e64f1fe273cd6991e567a9225/falcon-4.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:56af3b8838da2e19ae56b4e1bac168669ba257d6941f94933dc4f814fe721c08", size = 12015197 },
{ url = "https://files.pythonhosted.org/packages/7a/70/c10acaa3486748f77d9b0e79aaa19d3023b760bb9b93389ac1883a52e366/falcon-4.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec939d26dd77f57f08f3e13fb14b4e609c0baf073dc3f0c368f0e4cc10439528", size = 11653687 },
{ url = "https://files.pythonhosted.org/packages/b7/3b/dfdd9bd9f6114a49a55298b12048f1b65d0813b82c28676b956c4444f707/falcon-4.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9bfd751dd898505e17152d7ecfcdc457c9d85bceed7e651a9915183bd4afc86b", size = 11165291 },
{ url = "https://files.pythonhosted.org/packages/01/61/eb3d1d2076df85d5a7c2cd823ba5dbe0a928053a3102effb9006b2851377/falcon-4.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b85f9c6f50a7465303290cb305404ea5c1ddeff6702179c1a8879c4693b0e5e", size = 11831049 },
{ url = "https://files.pythonhosted.org/packages/bf/c7/268cddb1f84ebe5b402acdf116083658f3fb0dd38a75571e0ee703cef212/falcon-4.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:a410e4023999a74ccf615fafa646b112044b987ef5901c8e5c5b79b163f2b3ba", size = 2052994 },
{ url = "https://files.pythonhosted.org/packages/d0/00/7be6347247812e6553be50d83b0951e569d597b9c3a71e4c0de5b00789b7/falcon-4.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f9709fd9181f58d492463b951cc42fb33b230e8f261128bc8252a37a4553f318", size = 2323679 },
{ url = "https://files.pythonhosted.org/packages/c4/71/65266fc8433e396f42a2b045e7b7069390c4314e8b66e66c4e092166226f/falcon-4.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:427c20ceb367039b856506d7baeef17c7f0c40b8fcbf1147c0e76f33a574a7cf", size = 2203699 },
{ url = "https://files.pythonhosted.org/packages/80/30/82ff9d61d6baa5f908ccbbb775585cd1ac24dd47fcc2d2e6c5b9b0f44ce4/falcon-4.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fb50cebc3cae6720ccf4a05fccb233ea6a88e803828a07c063d6dce10a74e0e", size = 10418688 },
{ url = "https://files.pythonhosted.org/packages/bf/e5/660262ee87a90aab812d2d10ab42e6e0bffe853890b2e14268863c4dd659/falcon-4.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:628c450e14af811f13db6334265d7ff8a7b8a25ece1bde35d09a367a72046533", size = 11033845 },
{ url = "https://files.pythonhosted.org/packages/8f/b2/cf4c9567ad571e3304743e6f65c42576929cc16d494cb234f972fa70a150/falcon-4.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e04b30a7f89e5413e00c5cd1ea62bf7948323eb0220f8a5bbf705abae266a384", size = 10547880 },
{ url = "https://files.pythonhosted.org/packages/e2/b8/503d3574be76a09b64dd48214e012fd1b911a158400bc04b1ee0d4caec0f/falcon-4.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9095a36b8eeb80207322393b3bc88edaacd0426c2907e8427617618421bde9cc", size = 10218888 },
{ url = "https://files.pythonhosted.org/packages/2c/88/d96a3e9d93aee74280a82be844c2eaa603283c5548b3293165deb2d55b4e/falcon-4.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0adc6c2887f9d7ed55fe38edef055cc85c26762e392d80dca8765184c180b921", size = 10663138 },
{ url = "https://files.pythonhosted.org/packages/38/97/4021fce87e3feb67839405ca8d2560d989da141692214c6f1b297af23443/falcon-4.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:7bffb4cadcbf7c5994695d421ef5305ad8315cfbefe971713046967614f0ffa4", size = 2121203 },
{ url = "https://files.pythonhosted.org/packages/20/e2/ef821224a9ca9d4bb81d6e7ba60c6fbf3eae2e0dc10d806e6ff21b6dfdc5/falcon-4.0.2-py3-none-any.whl", hash = "sha256:077b2abf001940c6128c9b5872ae8147fe13f6ca333f928d8045d7601a5e847e", size = 318356 },
]
[[package]]
name = "gunicorn"
version = "23.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "packaging" },
]
sdist = { url = "https://files.pythonhosted.org/packages/34/72/9614c465dc206155d93eff0ca20d42e1e35afc533971379482de953521a4/gunicorn-23.0.0.tar.gz", hash = "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec", size = 375031 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/cb/7d/6dac2a6e1eba33ee43f318edbed4ff29151a49b5d37f080aad1e6469bca4/gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d", size = 85029 },
]
[[package]]
name = "packaging"
version = "25.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 },
]
[[package]]
name = "rest-chat-server"
version = "0.0.1"
source = { virtual = "." }
dependencies = [
{ name = "falcon" },
{ name = "gunicorn" },
]
[package.metadata]
requires-dist = [
{ name = "falcon", specifier = ">=4.0.2" },
{ name = "gunicorn", specifier = ">=23.0.0" },
]

4
teil29/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
# created by virtualenv automatically
bin
lib

1
teil29/.python-version Normal file
View File

@@ -0,0 +1 @@
3.9

0
teil29/README.md Normal file
View File

30
teil29/handleButton.py Executable file
View File

@@ -0,0 +1,30 @@
#! /usr/bin/python
#Datei: handleButton.py
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Button Signal")
button = QPushButton("Bitte klicken")
button.setCheckable(True)
button.clicked.connect(self.handle_button_click)
# Set the central widget of the Window.
self.setCentralWidget(button)
def handle_button_click(self):
print("Button geklickt")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()

6
teil29/hello.py Normal file
View File

@@ -0,0 +1,6 @@
def main():
print("Hello from teil29!")
if __name__ == "__main__":
main()

36
teil29/lineedit.py Executable file
View File

@@ -0,0 +1,36 @@
#! /usr/bin/python
#Datei: lineEdit.py
from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QVBoxLayout, QWidget
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Eingabe mit LineEdit")
self.label = QLabel()
self.input = QLineEdit()
self.input.textChanged.connect(self.label.setText)
layout = QVBoxLayout()
layout.addWidget(self.input)
layout.addWidget(self.label)
container = QWidget()
container.setLayout(layout)
# Set the central widget of the Window.
self.setCentralWidget(container)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()

78
teil29/login.py Executable file
View File

@@ -0,0 +1,78 @@
#! /usr/bin/python
#Datei: lineEdit.py
from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QPushButton, QGridLayout, QWidget
from PyQt6.QtGui import QPixmap
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Login")
layout = QGridLayout()
layout.setContentsMargins(20, 20, 20, 20)
layout.setSpacing(10)
self.user_logo_pixmap =QPixmap('./user.jpg')
self.user_logo_label = QLabel()
self.user_logo_label.setPixmap(self.user_logo_pixmap)
layout.addWidget(self.user_logo_label,1,1)
self.user_label = QLabel('Username:')
self.password_label = QLabel('Passwort:')
self.username_input = QLineEdit()
self.password_input = QLineEdit()
self.password_input.setEchoMode(QLineEdit.EchoMode.Password)
layout.addWidget(self.user_label,2,0)
layout.addWidget(self.username_input,2,1,1,2)
layout.addWidget(self.password_label,3,0)
layout.addWidget(self.password_input,3,1,1,2)
#Buttons
self.register_button = QPushButton("Register")
layout.addWidget(self.register_button, 4, 1)
self.login_button = QPushButton("Login")
self.login_button.clicked.connect(self.handle_login_button)
self.register_button.clicked.connect(self.handle_register_button)
layout.addWidget(self.login_button, 4, 2)
# Password vergessen
self.forgot_pw_button = QPushButton('Passwort vergessen')
self.forgot_pw_button.setStyleSheet('QPushButton {background-color: #A3C1DA; color: blue;}')
layout.addWidget(self.forgot_pw_button,5,2)
container = QWidget()
container.setLayout(layout)
# Set the central widget of the Window.
self.setCentralWidget(container)
def handle_register_button(self):
print('Register Button')
def handle_login_button(self):
print(f'Login mit {self.username_input.text()} and {self.password_input.text()}')
def handle_forgot_pw_button(self):
print('Forgot PW')
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()

26
teil29/mainwindow.py Executable file
View File

@@ -0,0 +1,26 @@
#! /usr/bin/python
#Datei: mainwindows.py
import sys
from PyQt6.QtCore import QSize, Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton
# Subclass QMainWindow to customize your application's main window
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
button = QPushButton("Bitte klicken")
# Set the central widget of the Window.
self.setCentralWidget(button)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()

12
teil29/pushbutton.py Executable file
View File

@@ -0,0 +1,12 @@
#! /usr/bin/python
#Datei: pushbutton.py
import sys
from PyQt6.QtWidgets import QApplication, QPushButton
app = QApplication(sys.argv)
window = QPushButton("Bitte klicken")
window.show()
app.exec()

7
teil29/pyproject.toml Normal file
View File

@@ -0,0 +1,7 @@
[project]
name = "teil29"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.9"
dependencies = []

8
teil29/pyvenv.cfg Normal file
View File

@@ -0,0 +1,8 @@
home = /usr/bin
implementation = CPython
version_info = 3.11.2.final.0
virtualenv = 20.17.1+ds
include-system-site-packages = false
base-prefix = /usr
base-exec-prefix = /usr
base-executable = /usr/bin/python3

5
teil29/requirements.txt Normal file
View File

@@ -0,0 +1,5 @@
numpy==2.2.3
opencv-python==4.11.0.86
PyQt6==6.8.1
PyQt6-Qt6==6.8.2
PyQt6_sip==13.10.0

30
teil29/sizewindow.py Executable file
View File

@@ -0,0 +1,30 @@
#! /usr/bin/python
# Datei: sizewindow.py
import sys
from PyQt6.QtCore import QSize, Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton
# abgeleitet von QMainWindow können wir unser GUI besser einstellen und
# z.B. die Dimensionen des Fensters ändern.
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Fenstergröße")
button = QPushButton("Bitte klicken")
self.setFixedSize(QSize(400, 300))
# der Button sitzt als zentrales Widget im Fenster.
self.setCentralWidget(button)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()

BIN
teil29/user.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

23
teil29/window.py Executable file
View File

@@ -0,0 +1,23 @@
#! /usr/bin/python
#Datei: window.py
# Die benötigten Qt Widgets
from PyQt6.QtWidgets import QApplication, QWidget
# Für die Kommandozeilenparameter
import sys
# QTApplication instanziieren. Die Kommandozeilenparameter geben wir
# mit.
app = QApplication(sys.argv)
# Window Widget erzeugen
window = QWidget()
window.show() # Das Fenster muss immer manuell angzeigt werden.
# Wvent-Loop starten.
app.exec()
# So lang die Event-Loop läuft kommen wir hier nicht hin,
# sie kann durch den "Schließen" Button des Fensters unterbrochen werden.

10
walross/loop.py Normal file
View File

@@ -0,0 +1,10 @@
# Ohne Walross-Operator
n = 0
while n < 10:
n += 1
print(n)
# Mit Walross-Operator
n = 0
while (n := n + 1) <= 10:
print(n)

10
walross/simple_loop.py Normal file
View File

@@ -0,0 +1,10 @@
# Ohne Walross-Operator
n = 0
while n < 10:
n += 1
print(n)
# Mit Walross-Operator
n = 0
while (n := n + 1) < 10:
print(n)