diff --git a/resources/lib/__run__.py b/resources/lib/__run__.py index a2c904c..b068e40 100644 --- a/resources/lib/__run__.py +++ b/resources/lib/__run__.py @@ -25,11 +25,11 @@ def main(argv=None): - if sys.argv: + if argv is None: argv = sys.argv - queries = kodi.parse_query(sys.argv[2]) - log_utils.log('Version: |%s| Queries: |%s|' % (kodi.get_version(), queries), log_utils.LOGDEBUG) - log_utils.log('Args: |%s|' % argv, log_utils.LOGDEBUG) + queries = kodi.parse_query(argv[2]) + log_utils.log(f'Version: |{kodi.get_version()}| Queries: |{queries}|', log_utils.LOGDEBUG) + log_utils.log(f'Args: |{argv}|', log_utils.LOGDEBUG) mode = queries.get('mode', None) DISPATCHER.dispatch(mode, queries) diff --git a/resources/lib/constants.py b/resources/lib/constants.py index 78a6bc5..3e04303 100644 --- a/resources/lib/constants.py +++ b/resources/lib/constants.py @@ -34,9 +34,9 @@ def __enum(**enums): ) DIRECTORIES = __enum( - DATA=kodi.translate_path('special://profile/addon_data/%s/' % kodi.get_id()) + DATA=kodi.translate_path(f'special://profile/addon_data/{kodi.get_id()}/') ) ICONS = __enum( - ADDON=kodi.translate_path('special://home/addons/{0!s}/icon.png'.format(kodi.get_id())) + ADDON=kodi.translate_path(f'special://home/addons/{kodi.get_id()}/icon.png') ) diff --git a/resources/lib/kodi.py b/resources/lib/kodi.py index 1c6e7ed..4bc6448 100644 --- a/resources/lib/kodi.py +++ b/resources/lib/kodi.py @@ -22,8 +22,7 @@ import xbmcgui import xbmc import xbmcvfs -import urllib -import urlparse +import urllib.parse as urlparse import sys import os import re @@ -48,7 +47,7 @@ def execute_jsonrpc(command): - if not isinstance(command, basestring): + if not isinstance(command, str): command = json.dumps(command) response = xbmc.executeJSONRPC(command) return json.loads(response) @@ -59,19 +58,19 @@ def get_handle(): def get_path(): - return addon.getAddonInfo('path').decode('utf-8') + return addon.getAddonInfo('path') def get_profile(): - return addon.getAddonInfo('profile').decode('utf-8') + return addon.getAddonInfo('profile') def translate_path(path): - return xbmc.translatePath(path).decode('utf-8') + return xbmcvfs.translatePath(path) def set_setting(id, value): - if not isinstance(value, basestring): value = str(value) + if not isinstance(value, str): value = str(value) addon.setSetting(id, value) @@ -97,12 +96,12 @@ def get_fanart(): def get_plugin_url(queries): try: - query = urllib.urlencode(queries) + query = urllib.parse.urlencode(queries) except UnicodeEncodeError: for k in queries: - if isinstance(queries[k], unicode): + if isinstance(queries[k], str): queries[k] = queries[k].encode('utf-8') - query = urllib.urlencode(queries) + query = urllib.parse.urlencode(queries) return sys.argv[0] + '?' + query @@ -230,7 +229,7 @@ def get_keyboard(heading, default=''): def i18n(string_id): try: - return addon.getLocalizedString(strings.STRINGS[string_id]).encode('utf-8', 'ignore') + return addon.getLocalizedString(strings.STRINGS[string_id]) except Exception as e: xbmc.log('%s: Failed String Lookup: %s (%s)' % (get_name(), string_id, e), xbmc.LOGWARNING) return string_id @@ -314,9 +313,8 @@ class MetaClass(type): def __str__(self): return '|%s| -> |%s|%s|%s|%s|%s|' % (self.version, self.major, self.minor, self.tag, self.tag_version, self.revision) - class KodiVersion(object): - __metaclass__ = MetaClass - version = xbmc.getInfoLabel('System.BuildVersion').decode('utf-8') + class KodiVersion(object, metaclass=MetaClass): + version = xbmc.getInfoLabel('System.BuildVersion') match = re.search('([0-9]+)\.([0-9]+)', version) if match: major, minor = match.groups() match = re.search('-([a-zA-Z]+)([0-9]*)', version) @@ -333,13 +331,13 @@ class KodiVersion(object): except: minor = 0 try: - revision = revision.decode('utf-8') + revision = revision except: - revision = u'' + revision = '' try: - tag = tag.decode('utf-8') + tag = tag except: - tag = u'' + tag = '' try: tag_version = int(tag_version) except: diff --git a/resources/lib/log_utils.py b/resources/lib/log_utils.py index 94a3675..50be700 100644 --- a/resources/lib/log_utils.py +++ b/resources/lib/log_utils.py @@ -26,7 +26,7 @@ def log(msg, level=LOGDEBUG): try: - if isinstance(msg, unicode): + if isinstance(msg, str): msg = '%s (ENCODED)' % msg.encode('utf-8') kodi.__log('%s: %s' % (name, msg), level) except Exception as e: @@ -43,7 +43,7 @@ def method_trace_on(*args, **kwargs): result = method(*args, **kwargs) end = time.time() log('{name!r} time: {time:2.4f}s args: |{args!r}| kwargs: |{kwargs!r}|' - .format(name=method.__name__,time=end - start, args=args, kwargs=kwargs), LOGDEBUG) + .format(name=method.__name__, time=end - start, args=args, kwargs=kwargs), LOGDEBUG) return result def method_trace_off(*args, **kwargs): diff --git a/resources/lib/routes.py b/resources/lib/routes.py index 2d35e7f..e2bd681 100644 --- a/resources/lib/routes.py +++ b/resources/lib/routes.py @@ -22,7 +22,7 @@ import rpc from constants import DISPATCHER, MODES -from urllib2 import unquote +from urllib.parse import unquote requests = rpc.Library() i18n = kodi.i18n @@ -47,8 +47,8 @@ def play_route(video_type, title, year, trakt_id=None, episode_id=None, season_i file_path = requests.find_episode(tvshow_id, season, episode) if not file_path: - str_season = '0' + str(season) if len(season) == 1 else str(season) - str_episode = '0' + str(episode) if len(episode) == 1 else str(episode) + str_season = '0' + str(season) if len(str(season)) == 1 else str(season) + str_episode = '0' + str(episode) if len(str(episode)) == 1 else str(episode) label = '%s - S%sE%s' % (title, str_season, str_episode) kodi.notify(msg=i18n('not_found_') % label) @@ -65,10 +65,9 @@ def play_route(video_type, title, year, trakt_id=None, episode_id=None, season_i @DISPATCHER.register(MODES.OPEN, args=['video_type', 'title', 'year'], kwargs=['trakt_id', 'episode_id', 'season_id', 'season', 'episode', 'ep_title', 'imdb_id', 'tmdb_id', 'tvdb_id']) def open_route(video_type, title, year, trakt_id=None, episode_id=None, season_id=None, imdb_id=None, tmdb_id=None, tvdb_id=None, season=None, episode=None, ep_title=None): - if (video_type != 'episode') and (video_type != 'movie'): - title = unquote(title) - if ep_title is not None: - ep_title = unquote(ep_title) + title = unquote(title) + if ep_title is not None: + ep_title = unquote(ep_title) if video_type == 'episode': play_route(video_type, title, year, trakt_id, episode_id, season_id, imdb_id, tmdb_id, tvdb_id, season, episode, ep_title) @@ -86,7 +85,7 @@ def open_route(video_type, title, year, trakt_id=None, episode_id=None, season_i kodi.execute_builtin('ActivateWindow(Videos,videodb://tvshows/titles/%s/%s/?tvshowid=%s)' % (str(tvshow_id), str(season), str(tvshow_id))) if not season_exists: - str_season = '0' + str(season) if len(season) == 1 else str(season) + str_season = '0' + str(season) if len(str(season)) == 1 else str(season) label = '%s - S%s' % (title, str_season) kodi.notify(msg=i18n('not_found_') % label) diff --git a/resources/lib/url_dispatcher.py b/resources/lib/url_dispatcher.py index 87d5e45..9826b1b 100644 --- a/resources/lib/url_dispatcher.py +++ b/resources/lib/url_dispatcher.py @@ -97,7 +97,7 @@ def dispatch(self, mode, queries): if 'mode' in unused_args: del unused_args['mode'] # delete mode last in case it's used by the target function log_utils.log('Calling |%s| for mode |%s| with pos args |%s| and kwargs |%s|' % ( - self.func_registry[mode].__name__, mode, args, kwargs)) + self.func_registry[mode].__name__, mode, args, kwargs)) if unused_args: log_utils.log('Warning: Arguments |%s| were passed but unused by |%s| for mode |%s|' % (unused_args, self.func_registry[mode].__name__, mode)) self.func_registry[mode](*args, **kwargs)