Threema Gateway SDK Python Callback Beispiel wirft fehler

Stelle deine Frage öffentlich an die Threema-Forum-Community - über 4.800 Mitglieder helfen dir weiter. > Frage stellen <
  • Hallo Zusammen

    Im Rahmen eines Studiumprojektes versuchen wir einen Commandline Chat Client in Python zu realisieren. Als wir nun aber eine Callback funktion nach Vorlage aus dem Gitrepo erstellt haben und unsere Daten eingetragen haben, sind wir auf folgenden Fehler gestossen:

    [2022-05-25 21:19:39.716023] ERROR: aiohttp.server: Error handling request

    Traceback (most recent call last):

    File "C:\Python310\lib\site-packages\aiohttp\web_protocol.py", line 435, in _handle_request

    resp = await request_handler(request)

    File "C:\Python310\lib\site-packages\aiohttp\web_app.py", line 504, in _handle

    resp = await handler(request)

    File "C:\Python310\lib\site-packages\threema\gateway\e2e.py", line 212, in handle_callback

    message = await context.receive_handler(context.connection, {

    File "C:\Python310\lib\site-packages\threema\gateway\e2e.py", line 481, in receive

    key_pair = await cls.get_decrypt_key_pair(connection, parameters)

    File "C:\Python310\lib\site-packages\threema\gateway\e2e.py", line 585, in get_decrypt_key_pair

    public = await connection.get_public_key(parameters['from_id'])

    File "C:\Python310\lib\site-packages\threema\gateway\util.py", line 352, in _wrapper

    value = await func(*args, **kwargs)

    File "C:\Python310\lib\site-packages\threema\gateway\_gateway.py", line 176, in get_public_key

    response = await self._get(self.urls['get_public_key'].format(id_))

    File "C:\Python310\lib\site-packages\threema\gateway\_gateway.py", line 317, in _get

    return await self._session.get(*args, **kwargs)

    File "C:\Python310\lib\site-packages\aiohttp\client.py", line 466, in _request

    with timer:

    File "C:\Python310\lib\site-packages\aiohttp\helpers.py", line 701, in __enter__

    raise RuntimeError(

    RuntimeError: Timeout context manager should be used inside a task

    [2022-05-25 21:19:39.729985] INFO: aiohttp.access: 185.88.236.88 [25/May/2022:21:19:39 +0000] "POST /gateway_callback HTTP/1.1" 500 1931 "-" "ThreemaGateway/1.0 Java/1.8.0_312"

    [2022-05-25 21:24:39.834548] ERROR: aiohttp.server: Error handling request

    Traceback (most recent call last):

    File "C:\Python310\lib\site-packages\aiohttp\web_protocol.py", line 435, in _handle_request

    resp = await request_handler(request)

    File "C:\Python310\lib\site-packages\aiohttp\web_app.py", line 504, in _handle

    resp = await handler(request)

    File "C:\Python310\lib\site-packages\threema\gateway\e2e.py", line 212, in handle_callback

    message = await context.receive_handler(context.connection, {

    File "C:\Python310\lib\site-packages\threema\gateway\e2e.py", line 481, in receive

    key_pair = await cls.get_decrypt_key_pair(connection, parameters)

    File "C:\Python310\lib\site-packages\threema\gateway\e2e.py", line 585, in get_decrypt_key_pair

    public = await connection.get_public_key(parameters['from_id'])

    File "C:\Python310\lib\site-packages\threema\gateway\util.py", line 352, in _wrapper

    value = await func(*args, **kwargs)

    File "C:\Python310\lib\site-packages\threema\gateway\_gateway.py", line 176, in get_public_key

    response = await self._get(self.urls['get_public_key'].format(id_))

    File "C:\Python310\lib\site-packages\threema\gateway\_gateway.py", line 317, in _get

    return await self._session.get(*args, **kwargs)

    File "C:\Python310\lib\site-packages\aiohttp\client.py", line 466, in _request

    with timer:

    File "C:\Python310\lib\site-packages\aiohttp\helpers.py", line 701, in __enter__

    raise RuntimeError(

    RuntimeError: Timeout context manager should be used inside a task

    [2022-05-25 21:24:39.848509] INFO: aiohttp.access: 185.88.236.88 [25/May/2022:21:24:39 +0000] "POST /gateway_callback HTTP/1.1" 500 1931 "-" "ThreemaGateway/1.0 Java/1.8.0_312"

    Der Fehler wird jedes Mal ausgegeben wenn eine Nachricht eintrift.

    Fehlt hier etwas, oder was machen wir falsch? Hat jemand diese Meldung schon einmal gehabt?

    Danke im Voraus, LG

  • Aber wir haben den Code eins zu eins vom offiziellen Threema Gateway SDK - Python Gitrepo (https://github.com/lgrahl/threema…les/callback.py) übernommen und einfach nur unser Connection und SSL Zertifikatdetails eingefügt. Hat jemand diese Callback funktion schon benutzt? Liegt der Fehler evtl. an unseren Angaben oder dem SSL Zertifikat?

    Soweit ich sehen kann gab es die letzte Änderung an dem Repository vor ziemlich genau einem Jahr. Zu dem Zeitpunkt dürfte Python 3.9 aktuell gewesen sein. Deiner Pfadangabe nach scheinst du Python 3.10 zu verwenden. Hat möglicherweise was mit dem Problem zu tun.

    Ich glaube speziell die Funktionen zur asynchronen I/O werden da häufiger mal angepasst.

  • Soweit ich sehen kann gab es die letzte Änderung an dem Repository vor ziemlich genau einem Jahr. Zu dem Zeitpunkt dürfte Python 3.9 aktuell gewesen sein. Deiner Pfadangabe nach scheinst du Python 3.10 zu verwenden. Hat möglicherweise was mit dem Problem zu tun.

    Ich glaube speziell die Funktionen zur asynchronen I/O werden da häufiger mal angepasst.

    Hi Tristan
    Danke für den Hinweis, ich werde mal versuchen den Code mit Pyhton 3.9 auszuführen.

  • Soweit ich sehen kann gab es die letzte Änderung an dem Repository vor ziemlich genau einem Jahr. Zu dem Zeitpunkt dürfte Python 3.9 aktuell gewesen sein. Deiner Pfadangabe nach scheinst du Python 3.10 zu verwenden. Hat möglicherweise was mit dem Problem zu tun.

    Ich glaube speziell die Funktionen zur asynchronen I/O werden da häufiger mal angepasst.

    Habe den Code mal mit Python 3.9.6 und 3.8.10 getestet, leider mit dem selben Ergebniss. :-/

  • Probier mal das Example aus folgender Gist, aber mit Python 3.9. Für Python 3.10 braucht es noch diverse Änderungen.

    https://gist.github.com/lgrahl/d8cfe3b…6288aae206f870b

    Edit: PR.

    Hi f09fa681

    Diese funktioniert bei mir, mit allen drei Python Versionen.
    Ich habe noch eine weitere Frage, gibt es eine möglichkeit auch die ID des Senders der empfangenen Nachrichten über den MessageHandler mit auszulesen?

    Danke für die Unterstützung.