ITADN

JSON-Parsing Fehler bei Verwendung von MySQL

#234Pull Requestclocken 创建于 2024-05-31
C
clockencommented
Hi @codingPF , Python _myconnpy_ liest in der aktuellen Version die Ausstrahlungszeitpunkte und Laufzeiten als Python-Datentyp _decimal.Decimal_ aus. Das führt zu mehreren Folgefehlern bei der weiteren Verarbeitung dieser Werte im Kodi-Plugin. Die Python Standard Bibliothek _json_ unterstützt _decimal.Decimal_ nicht ohne Weiteres: ``` EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<-- - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS! Error Type: <class 'TypeError'> Error Contents: Object of type Decimal is not JSON serializable Traceback (most recent call last): File "/home/dietpi/.kodi/addons/plugin.video.mediathekview/addon.py", line 26, in <module> PLUGIN.run() File "/home/dietpi/.kodi/addons/plugin.video.mediathekview/resources/lib/plugin.py", line 214, in run ui.generate(self.database.getFilms(channel, show)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/dietpi/.kodi/addons/plugin.video.mediathekview/resources/lib/storeQuery.py", line 278, in getFilms self._cache.save_cache('films', cacheKey, rs) File "/home/dietpi/.kodi/addons/plugin.video.mediathekview/resources/lib/storeCache.py", line 98, in save_cache json.dump(cache, json_file) File "/usr/lib/python3.11/json/__init__.py", line 179, in dump for chunk in iterable: File "/usr/lib/python3.11/json/encoder.py", line 432, in _iterencode yield from _iterencode_dict(o, _current_indent_level) File "/usr/lib/python3.11/json/encoder.py", line 406, in _iterencode_dict yield from chunks File "/usr/lib/python3.11/json/encoder.py", line 326, in _iterencode_list yield from chunks File "/usr/lib/python3.11/json/encoder.py", line 326, in _iterencode_list yield from chunks File "/usr/lib/python3.11/json/encoder.py", line 439, in _iterencode o = _default(o) ^^^^^^^^^^^ File "/usr/lib/python3.11/json/encoder.py", line 180, in default raise TypeError(f'Object of type {o.__class__.__name__} ' TypeError: Object of type Decimal is not JSON serializable -->End of Python script error report<-- ``` Mit diesem Commit wird Python _simplejson_ statt _json_ verwendet - _simplejson_ unterstützt _decimal.Decimal_ [out of the box](https://stackoverflow.com/a/3148376). Bei der Erstellung der UI-Listenelemente werden dann die _decimal.Decimal_ Werte in _float_ konvertiert, damit die weitere automatische Konvertierung zu String-Werten funktioniert. Folgender Aufruf schlägt sonst fehl: https://github.com/mediathekview/plugin.video.mediathekview/blob/3e4fa90a87c2652f3b0745e55fb0e14f6863da24/resources/lib/ui/filmlistUi.py#L155 Ich habe den Fix mit einem neuen Docker Build und Kodi 20 (Nexus) getestet. Außerdem habe ich die Verwendung einer lokalen SQLite-Datenbank mit den Änderungen getestet. Wenn etwas nicht passt, sag gern Bescheid, damit ich es korrigieren kann. Cheers :beers:
合并状态:未合并 关闭于 2024-06-02 3 条评论