JSON-Parsing Fehler bei Verwendung von MySQL
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 条评论