Fix UnicodeDecodeError for playqueue logging

- Fixes #419
This commit is contained in:
croneter 2018-03-06 20:40:30 +01:00
parent 62e973dbe2
commit 2fb79b97f8

View file

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
""" """
Collection of functions associated with Kodi and Plex playlists and playqueues Collection of functions associated with Kodi and Plex playlists and playqueues
""" """
@ -8,7 +9,7 @@ from re import compile as re_compile
import plexdb_functions as plexdb import plexdb_functions as plexdb
from downloadutils import DownloadUtils as DU from downloadutils import DownloadUtils as DU
from utils import try_encode from utils import try_decode, try_encode
from PlexAPI import API from PlexAPI import API
from PlexFunctions import GetPlexMetadata from PlexFunctions import GetPlexMetadata
from kodidb_functions import kodiid_from_filename from kodidb_functions import kodiid_from_filename
@ -53,21 +54,20 @@ class PlaylistObjectBaseclase(object):
def __repr__(self): def __repr__(self):
""" """
Print the playlist, e.g. to log Print the playlist, e.g. to log. Returns utf-8 encoded string
""" """
answ = '{\'%s\': {' % (self.__class__.__name__) answ = u'{\'%s\': {\'id\': %s, ' % (self.__class__.__name__, self.id)
# For some reason, can't use dir directly # For some reason, can't use dir directly
answ += '\'id\': %s, ' % self.id
for key in self.__dict__: for key in self.__dict__:
if key in ('id', 'items', 'kodi_pl'): if key in ('id', 'items', 'kodi_pl'):
continue continue
if isinstance(getattr(self, key), (str, unicode)): if isinstance(getattr(self, key), str):
answ += '\'%s\': \'%s\', ' % (key, answ += '\'%s\': \'%s\', ' % (key,
try_encode(getattr(self, key))) try_decode(getattr(self, key)))
else: else:
# e.g. int # e.g. int
answ += '\'%s\': %s, ' % (key, str(getattr(self, key))) answ += '\'%s\': %s, ' % (key, unicode(getattr(self, key)))
return answ + '\'items\': %s}}' % self.items return try_encode(answ + '\'items\': %s}}' % self.items)
def is_pkc_clear(self): def is_pkc_clear(self):
""" """
@ -174,25 +174,27 @@ class Playlist_Item(object):
def __repr__(self): def __repr__(self):
""" """
Print the playlist item, e.g. to log Print the playlist item, e.g. to log. Returns utf-8 encoded string
""" """
answ = '{\'%s\': {' % (self.__class__.__name__) answ = (u'{\'%s\': {\'id\': \'%s\', \'plex_id\': \'%s\', '
answ += '\'id\': \'%s\', ' % self.id % (self.__class__.__name__, self.id, self.plex_id))
answ += '\'plex_id\': \'%s\', ' % self.plex_id
for key in self.__dict__: for key in self.__dict__:
if key in ('id', 'plex_id', 'xml'): if key in ('id', 'plex_id', 'xml'):
continue continue
if isinstance(getattr(self, key), (str, unicode)): if isinstance(getattr(self, key), str):
LOG.debug('key: %s, type: %s', key, type(key))
LOG.debug('answ: %s, type: %s', answ, type(answ))
LOG.debug('content: %s, type: %s', getattr(self, key), type(getattr(self, key)))
answ += '\'%s\': \'%s\', ' % (key, answ += '\'%s\': \'%s\', ' % (key,
try_encode(getattr(self, key))) try_decode(getattr(self, key)))
else: else:
# e.g. int # e.g. int
answ += '\'%s\': %s, ' % (key, str(getattr(self, key))) answ += '\'%s\': %s, ' % (key, unicode(getattr(self, key)))
if self.xml is None: if self.xml is None:
answ += '\'xml\': None}}' answ += '\'xml\': None}}'
else: else:
answ += '\'xml\': \'%s\'}}' % self.xml.tag answ += '\'xml\': \'%s\'}}' % self.xml.tag
return answ return try_encode(answ)
def plex_stream_index(self, kodi_stream_index, stream_type): def plex_stream_index(self, kodi_stream_index, stream_type):
""" """