diff --git a/.env b/.env index a8471c01..e69de29b 100644 --- a/.env +++ b/.env @@ -1 +0,0 @@ -PYTHONPATH=jellyfin_kodi diff --git a/.gitignore b/.gitignore index fa83b3a9..a3b78682 100644 --- a/.gitignore +++ b/.gitignore @@ -50,6 +50,7 @@ coverage.xml *.py,cover .hypothesis/ .pytest_cache/ +.mypy_cache/ flake8.output test.xml diff --git a/context.py b/context.py index 2a6b3d5a..0326e073 100644 --- a/context.py +++ b/context.py @@ -3,26 +3,8 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################# -import os -import sys - -from kodi_six import xbmc, xbmcaddon, xbmcvfs - -################################################################################################# - -kodi_version = int(xbmc.getInfoLabel('System.BuildVersion')[:2]) -__addon__ = xbmcaddon.Addon(id='plugin.video.jellyfin') -if kodi_version > 18: - __base__ = xbmcvfs.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'jellyfin_kodi')) -else: - __base__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'jellyfin_kodi')) - -sys.path.insert(0, __base__) - -################################################################################################# - -from entrypoint import Context # noqa: E402 -from helper import LazyLogger # noqa: E402 +from jellyfin_kodi.entrypoint import Context +from jellyfin_kodi.helper import LazyLogger ################################################################################################# diff --git a/context_play.py b/context_play.py index 01513485..c2fcc774 100644 --- a/context_play.py +++ b/context_play.py @@ -3,26 +3,8 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################# -import os -import sys - -from kodi_six import xbmc, xbmcaddon, xbmcvfs - -################################################################################################# - -kodi_version = int(xbmc.getInfoLabel('System.BuildVersion')[:2]) -__addon__ = xbmcaddon.Addon(id='plugin.video.jellyfin') -if kodi_version > 18: - __base__ = xbmcvfs.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'jellyfin_kodi')) -else: - __base__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'jellyfin_kodi')) - -sys.path.insert(0, __base__) - -################################################################################################# - -from entrypoint import Context # noqa: E402 -from helper import LazyLogger # noqa: E402 +from jellyfin_kodi.entrypoint import Context +from jellyfin_kodi.helper import LazyLogger ################################################################################################# diff --git a/default.py b/default.py index 06610631..ac86b22a 100644 --- a/default.py +++ b/default.py @@ -3,26 +3,8 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################# -import os -import sys - -from kodi_six import xbmc, xbmcaddon, xbmcvfs - -################################################################################################# - -kodi_version = int(xbmc.getInfoLabel('System.BuildVersion')[:2]) -__addon__ = xbmcaddon.Addon(id='plugin.video.jellyfin') -if kodi_version > 18: - __base__ = xbmcvfs.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'jellyfin_kodi')) -else: - __base__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'jellyfin_kodi')) - -sys.path.insert(0, __base__) - -################################################################################################# - -from entrypoint import Events # noqa: E402 -from helper import LazyLogger # noqa: E402 +from jellyfin_kodi.entrypoint import Events +from jellyfin_kodi.helper import LazyLogger ################################################################################################# diff --git a/jellyfin_kodi/client.py b/jellyfin_kodi/client.py index a521c7dd..0879225d 100644 --- a/jellyfin_kodi/client.py +++ b/jellyfin_kodi/client.py @@ -7,9 +7,8 @@ import os from kodi_six import xbmc, xbmcaddon, xbmcvfs -from helper import translate, window, settings, addon_id, dialog -from helper.utils import create_id, translate_path -from helper import LazyLogger # noqa: F402 +from .helper import translate, window, settings, addon_id, dialog, LazyLogger +from .helper.utils import create_id, translate_path ################################################################################################## diff --git a/jellyfin_kodi/connect.py b/jellyfin_kodi/connect.py index ec2fa325..7566ce90 100644 --- a/jellyfin_kodi/connect.py +++ b/jellyfin_kodi/connect.py @@ -5,14 +5,13 @@ from __future__ import division, absolute_import, print_function, unicode_litera from kodi_six import xbmc, xbmcaddon -import client -from database import get_credentials, save_credentials -from dialogs import ServerConnect, UsersConnect, LoginManual, ServerManual -from helper import settings, addon_id, event, api, window -from jellyfin import Jellyfin -from jellyfin.connection_manager import CONNECTION_STATE -from helper.exceptions import HTTPException -from helper import LazyLogger +from . import client +from .database import get_credentials, save_credentials +from .dialogs import ServerConnect, UsersConnect, LoginManual, ServerManual +from .helper import settings, addon_id, event, api, window, LazyLogger +from .jellyfin import Jellyfin +from .jellyfin.connection_manager import CONNECTION_STATE +from .helper.exceptions import HTTPException ################################################################################################## diff --git a/jellyfin_kodi/database/__init__.py b/jellyfin_kodi/database/__init__.py index fe7d62e1..af1bf859 100644 --- a/jellyfin_kodi/database/__init__.py +++ b/jellyfin_kodi/database/__init__.py @@ -12,11 +12,11 @@ import re from kodi_six import xbmc, xbmcvfs from six import text_type -from database import jellyfin_db -from helper import translate, settings, window, dialog -from helper.utils import translate_path -from objects import obj -from helper import LazyLogger +from . import jellyfin_db +from ..helper import translate, settings, window, dialog +from ..helper.utils import translate_path +from ..objects import obj +from ..helper import LazyLogger ################################################################################################# @@ -200,7 +200,7 @@ def reset(): ''' Reset both the jellyfin database and the kodi database. ''' - from views import Views + from ..views import Views views = Views() if not dialog("yesno", "{jellyfin}", translate(33074)): diff --git a/jellyfin_kodi/database/jellyfin_db.py b/jellyfin_kodi/database/jellyfin_db.py index 5683e740..a518b830 100644 --- a/jellyfin_kodi/database/jellyfin_db.py +++ b/jellyfin_kodi/database/jellyfin_db.py @@ -2,10 +2,10 @@ from __future__ import division, absolute_import, print_function, unicode_literals ################################################################################################# -from database import queries as QU -from helper import LazyLogger +from . import queries as QU +from ..helper import LazyLogger -from jellyfin.utils import sqlite_namedtuple_factory +from ..jellyfin.utils import sqlite_namedtuple_factory ################################################################################################## diff --git a/jellyfin_kodi/dialogs/context.py b/jellyfin_kodi/dialogs/context.py index d2b51e7a..6d48a503 100644 --- a/jellyfin_kodi/dialogs/context.py +++ b/jellyfin_kodi/dialogs/context.py @@ -8,8 +8,8 @@ import os from kodi_six import xbmcgui, xbmcaddon from six import ensure_text -from helper import window, addon_id -from helper import LazyLogger +from ..helper import window, addon_id +from ..helper import LazyLogger ################################################################################################## diff --git a/jellyfin_kodi/dialogs/loginmanual.py b/jellyfin_kodi/dialogs/loginmanual.py index eee28d41..1d70bec2 100644 --- a/jellyfin_kodi/dialogs/loginmanual.py +++ b/jellyfin_kodi/dialogs/loginmanual.py @@ -6,9 +6,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera from six import iteritems from kodi_six import xbmcgui -from helper import translate -from helper import LazyLogger -from helper import kodi_version +from ..helper import translate, LazyLogger, kodi_version ################################################################################################## diff --git a/jellyfin_kodi/dialogs/resume.py b/jellyfin_kodi/dialogs/resume.py index bee793f9..0357a413 100644 --- a/jellyfin_kodi/dialogs/resume.py +++ b/jellyfin_kodi/dialogs/resume.py @@ -5,7 +5,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera from kodi_six import xbmc, xbmcgui -from helper import LazyLogger +from ..helper import LazyLogger ################################################################################################## diff --git a/jellyfin_kodi/dialogs/serverconnect.py b/jellyfin_kodi/dialogs/serverconnect.py index c4c3afff..73d72058 100644 --- a/jellyfin_kodi/dialogs/serverconnect.py +++ b/jellyfin_kodi/dialogs/serverconnect.py @@ -6,9 +6,9 @@ from __future__ import division, absolute_import, print_function, unicode_litera from six import iteritems from kodi_six import xbmc, xbmcgui -from helper import translate -from jellyfin.connection_manager import CONNECTION_STATE -from helper import LazyLogger +from ..helper import translate +from ..jellyfin.connection_manager import CONNECTION_STATE +from ..helper import LazyLogger ################################################################################################## diff --git a/jellyfin_kodi/dialogs/servermanual.py b/jellyfin_kodi/dialogs/servermanual.py index 803e706a..551c840e 100644 --- a/jellyfin_kodi/dialogs/servermanual.py +++ b/jellyfin_kodi/dialogs/servermanual.py @@ -8,9 +8,9 @@ import re from six import iteritems from kodi_six import xbmcgui -from helper import translate -from jellyfin.connection_manager import CONNECTION_STATE -from helper import LazyLogger +from ..helper import translate +from ..jellyfin.connection_manager import CONNECTION_STATE +from ..helper import LazyLogger ################################################################################################## diff --git a/jellyfin_kodi/dialogs/usersconnect.py b/jellyfin_kodi/dialogs/usersconnect.py index a361756d..8c1428ef 100644 --- a/jellyfin_kodi/dialogs/usersconnect.py +++ b/jellyfin_kodi/dialogs/usersconnect.py @@ -4,9 +4,10 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################## from six import iteritems -from kodi_six import xbmc, xbmcgui +from kodi_six import xbmcgui -from helper import LazyLogger +from ..helper import LazyLogger +from ..helper.utils import kodi_version ################################################################################################## @@ -30,7 +31,7 @@ class UsersConnect(xbmcgui.WindowXMLDialog): def __init__(self, *args, **kwargs): - self.kodi_version = int(xbmc.getInfoLabel('System.BuildVersion')[:2]) + self.kodi_version = kodi_version() xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs) def set_args(self, **kwargs): diff --git a/jellyfin_kodi/downloader.py b/jellyfin_kodi/downloader.py index fa67facc..b52128c6 100644 --- a/jellyfin_kodi/downloader.py +++ b/jellyfin_kodi/downloader.py @@ -10,11 +10,11 @@ from datetime import date from six.moves import range, queue as Queue import requests -from helper import settings, stop, window -from jellyfin import Jellyfin -from jellyfin import api -from helper.exceptions import HTTPException -from helper import LazyLogger + +from .helper import settings, stop, window, LazyLogger +from .jellyfin import Jellyfin +from .jellyfin import api +from .helper.exceptions import HTTPException ################################################################################################# diff --git a/jellyfin_kodi/entrypoint/__init__.py b/jellyfin_kodi/entrypoint/__init__.py index 84a9e4b4..82e8ff62 100644 --- a/jellyfin_kodi/entrypoint/__init__.py +++ b/jellyfin_kodi/entrypoint/__init__.py @@ -3,19 +3,11 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################# -import logging - -from kodi_six import xbmc, xbmcvfs - -from helper import LazyLogger -from jellyfin import Jellyfin +from ..helper import LazyLogger +from ..jellyfin import Jellyfin from .default import Events from .service import Service from .context import Context ################################################################################################# - -LOG = LazyLogger(__name__) - -################################################################################################# diff --git a/jellyfin_kodi/entrypoint/context.py b/jellyfin_kodi/entrypoint/context.py index 0b0f1708..f1cfb690 100644 --- a/jellyfin_kodi/entrypoint/context.py +++ b/jellyfin_kodi/entrypoint/context.py @@ -8,12 +8,11 @@ import sys from kodi_six import xbmc, xbmcaddon -import database -from dialogs import context -from helper import translate, settings, dialog -from helper import LazyLogger -from helper.utils import translate_path -from jellyfin import Jellyfin +from .. import database +from ..dialogs import context +from ..helper import translate, settings, dialog, LazyLogger +from ..helper.utils import translate_path +from ..jellyfin import Jellyfin ################################################################################################# diff --git a/jellyfin_kodi/entrypoint/default.py b/jellyfin_kodi/entrypoint/default.py index d2b400a4..a80c2edd 100644 --- a/jellyfin_kodi/entrypoint/default.py +++ b/jellyfin_kodi/entrypoint/default.py @@ -11,13 +11,12 @@ from six import iteritems from six.moves.urllib.parse import parse_qsl, urlencode from kodi_six import xbmc, xbmcvfs, xbmcgui, xbmcplugin, xbmcaddon -import client -from database import reset, get_sync, Database, jellyfin_db, get_credentials -from objects import Objects, Actions -from helper import translate, event, settings, window, dialog, api, JSONRPC -from helper.utils import JsonDebugPrinter, translate_path -from helper import LazyLogger -from jellyfin import Jellyfin +from .. import client +from ..database import reset, get_sync, Database, jellyfin_db, get_credentials +from ..objects import Objects, Actions +from ..helper import translate, event, settings, window, dialog, api, JSONRPC, LazyLogger +from ..helper.utils import JsonDebugPrinter, translate_path, kodi_version +from ..jellyfin import Jellyfin ################################################################################################# @@ -426,7 +425,7 @@ def browse_subfolders(media, view_id, server_id=None): ''' Display submenus for jellyfin views. ''' - from views import DYNNODES + from ..views import DYNNODES view = Jellyfin(server_id).get_client().jellyfin.get_item(view_id) xbmcplugin.setPluginCategory(PROCESS_HANDLE, view['Name']) @@ -792,9 +791,9 @@ def get_themes(api_client): ''' Add theme media locally, via strm. This is only for tv tunes. If another script is used, adjust this code. ''' - from helper.utils import normalize_string - from helper.playutils import PlayUtils - from helper.xmls import tvtunes_nfo + from ..helper.utils import normalize_string + from ..helper.playutils import PlayUtils + from ..helper.xmls import tvtunes_nfo library = translate_path("special://profile/addon_data/plugin.video.jellyfin/library") play = settings('useDirectPaths') == "1" @@ -863,7 +862,7 @@ def delete_item(): ''' Delete keymap action. ''' - import context + from . import context context.Context(delete=True) @@ -872,10 +871,10 @@ def backup(): ''' Jellyfin backup. ''' - from helper.utils import delete_folder, copytree + from ..helper.utils import delete_folder, copytree path = settings('backupPath') - folder_name = "Kodi%s.%s" % (xbmc.getInfoLabel('System.BuildVersion')[:2], xbmc.getInfoLabel('System.Date(dd-mm-yy)')) + folder_name = "Kodi%s.%s" % (kodi_version(), xbmc.getInfoLabel('System.Date(dd-mm-yy)')) folder_name = dialog("input", heading=translate(33089), defaultt=folder_name) if not folder_name: diff --git a/jellyfin_kodi/entrypoint/service.py b/jellyfin_kodi/entrypoint/service.py index 8e30b27e..7d5a3bf5 100644 --- a/jellyfin_kodi/entrypoint/service.py +++ b/jellyfin_kodi/entrypoint/service.py @@ -12,16 +12,15 @@ import _strptime # noqa:F401 from kodi_six import xbmc, xbmcgui from six.moves import reload_module as reload -import objects -import connect -import client -import library -import monitor -from views import Views -from helper import translate, window, settings, event, dialog, set_addon_mode -from helper.utils import JsonDebugPrinter, translate_path -from jellyfin import Jellyfin -from helper import LazyLogger +from .. import objects +from .. import connect +from .. import client +from .. import library +from .. import monitor +from ..views import Views +from ..helper import translate, window, settings, event, dialog, set_addon_mode, LazyLogger +from ..helper.utils import JsonDebugPrinter, translate_path +from ..jellyfin import Jellyfin ################################################################################################# diff --git a/jellyfin_kodi/full_sync.py b/jellyfin_kodi/full_sync.py index 8ce9a7f8..9501d665 100644 --- a/jellyfin_kodi/full_sync.py +++ b/jellyfin_kodi/full_sync.py @@ -8,14 +8,12 @@ import datetime from kodi_six import xbmc -import downloader as server -import helper.xmls as xmls -from objects import Movies, TVShows, MusicVideos, Music -from database import Database, get_sync, save_sync, jellyfin_db -from helper import translate, settings, window, progress, dialog -from helper.utils import get_screensaver, set_screensaver -from helper import LazyLogger -from helper.exceptions import LibraryException, PathValidationException +from . import downloader as server +from .objects import Movies, TVShows, MusicVideos, Music +from .database import Database, get_sync, save_sync, jellyfin_db +from .helper import translate, settings, window, progress, dialog, LazyLogger, xmls +from .helper.utils import get_screensaver, set_screensaver +from .helper.exceptions import LibraryException, PathValidationException ################################################################################################## diff --git a/jellyfin_kodi/helper/api.py b/jellyfin_kodi/helper/api.py index 7ecf80ad..ea8e9ee9 100644 --- a/jellyfin_kodi/helper/api.py +++ b/jellyfin_kodi/helper/api.py @@ -3,9 +3,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################## -from helper import LazyLogger - -from . import settings +from . import settings, LazyLogger ################################################################################################## diff --git a/jellyfin_kodi/helper/lazylogger.py b/jellyfin_kodi/helper/lazylogger.py index 52534ec2..c53ddefa 100644 --- a/jellyfin_kodi/helper/lazylogger.py +++ b/jellyfin_kodi/helper/lazylogger.py @@ -14,6 +14,6 @@ class LazyLogger(object): def __getattr__(self, name): if self.__logger is None: - from helper.loghandler import getLogger + from .loghandler import getLogger self.__logger = getLogger(self.__logger_name) return getattr(self.__logger, name) diff --git a/jellyfin_kodi/helper/loghandler.py b/jellyfin_kodi/helper/loghandler.py index 306a50f2..ce06ecb1 100644 --- a/jellyfin_kodi/helper/loghandler.py +++ b/jellyfin_kodi/helper/loghandler.py @@ -10,12 +10,9 @@ import traceback from six import ensure_text from kodi_six import xbmc, xbmcaddon -import database -from helper import get_filesystem_encoding -from helper.utils import translate_path - -from . import settings -from . import kodi_version +from .. import database +from . import get_filesystem_encoding, settings, kodi_version +from .utils import translate_path ################################################################################################## diff --git a/jellyfin_kodi/helper/playutils.py b/jellyfin_kodi/helper/playutils.py index d6d1ea27..ad9c377f 100644 --- a/jellyfin_kodi/helper/playutils.py +++ b/jellyfin_kodi/helper/playutils.py @@ -7,18 +7,19 @@ import enum import os from uuid import uuid4 +import requests from kodi_six import xbmc, xbmcvfs -import client -import requests -from helper import LazyLogger -from helper.utils import translate_path +from .. import client +from .utils import translate_path -from . import translate, settings, window, dialog, api +from . import translate, settings, window, dialog, api, LazyLogger ################################################################################################# LOG = LazyLogger(__name__) + + class Transcode(enum.IntEnum): Enabled = 0 Audio = 1 @@ -607,6 +608,7 @@ class PlayUtils(object): subs_streams.append(index) skip_dialog = Transcode(int(settings('skipDialogTranscode') or 0)) + def get_track_title(track_index): return streams[track_index]['DisplayTitle'] or ("Track %s" % track_index) diff --git a/jellyfin_kodi/helper/translate.py b/jellyfin_kodi/helper/translate.py index 8b75b1de..2714e9ee 100644 --- a/jellyfin_kodi/helper/translate.py +++ b/jellyfin_kodi/helper/translate.py @@ -5,7 +5,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera from kodi_six import xbmc, xbmcaddon -from helper import LazyLogger +from . import LazyLogger ################################################################################################## diff --git a/jellyfin_kodi/helper/utils.py b/jellyfin_kodi/helper/utils.py index 42529ff3..f9ef3c34 100644 --- a/jellyfin_kodi/helper/utils.py +++ b/jellyfin_kodi/helper/utils.py @@ -34,7 +34,10 @@ def addon_id(): def kodi_version(): - return int(xbmc.getInfoLabel('System.BuildVersion').split('.')[0]) + # Kodistubs returns empty string, causing Python 3 tests to choke on int() + # TODO: Make Kodistubs version configurable for testing purposes + version_string = xbmc.getInfoLabel('System.BuildVersion') or "19.1 (19.1.0) Git:20210509-85e05228b4" + return int(version_string.split(' ', 1)[0].split('.', 1)[0]) def window(key, value=None, clear=False, window_id=10000): @@ -537,7 +540,7 @@ def get_filesystem_encoding(): def find_library(server, item): - from database import get_sync + from ..database import get_sync sync = get_sync() @@ -549,6 +552,7 @@ def find_library(server, item): LOG.error('No ancestor found, not syncing item with ID: {}'.format(item['Id'])) return {} + def translate_path(path): ''' Use new library location for translate path starting in Kodi 19 @@ -559,4 +563,3 @@ def translate_path(path): return xbmcvfs.translatePath(path) else: return xbmc.translatePath(path) - diff --git a/jellyfin_kodi/helper/wrapper.py b/jellyfin_kodi/helper/wrapper.py index 9077a48c..1b814da1 100644 --- a/jellyfin_kodi/helper/wrapper.py +++ b/jellyfin_kodi/helper/wrapper.py @@ -5,7 +5,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera from kodi_six import xbmcgui -from helper import LazyLogger +from . import LazyLogger from .utils import should_stop from .exceptions import LibraryException diff --git a/jellyfin_kodi/helper/xmls.py b/jellyfin_kodi/helper/xmls.py index 6e62ba9d..907e142c 100644 --- a/jellyfin_kodi/helper/xmls.py +++ b/jellyfin_kodi/helper/xmls.py @@ -8,10 +8,8 @@ import xml.etree.ElementTree as etree from kodi_six import xbmc -from helper import LazyLogger -from helper.utils import translate_path - -from . import translate, dialog, settings +from .utils import translate_path +from . import translate, dialog, settings, LazyLogger ################################################################################################# diff --git a/jellyfin_kodi/jellyfin/__init__.py b/jellyfin_kodi/jellyfin/__init__.py index 74178de7..6d0bcdec 100644 --- a/jellyfin_kodi/jellyfin/__init__.py +++ b/jellyfin_kodi/jellyfin/__init__.py @@ -3,9 +3,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################# -import logging - -from helper import has_attribute, LazyLogger +from ..helper import has_attribute, LazyLogger from .client import JellyfinClient @@ -35,7 +33,7 @@ class Jellyfin(object): ''' This is your Jellyfinclient, you can create more than one. The server_id is only a temporary thing to communicate with the JellyfinClient(). - from jellyfin import Jellyfin + from jellyfin_kodi.jellyfin import Jellyfin Jellyfin('123456').config.data['app'] diff --git a/jellyfin_kodi/jellyfin/api.py b/jellyfin_kodi/jellyfin/api.py index a8702f0c..c9761025 100644 --- a/jellyfin_kodi/jellyfin/api.py +++ b/jellyfin_kodi/jellyfin/api.py @@ -5,8 +5,8 @@ import json import requests -from helper.utils import settings -from helper import LazyLogger +from ..helper.utils import settings +from ..helper import LazyLogger from six import ensure_str diff --git a/jellyfin_kodi/jellyfin/client.py b/jellyfin_kodi/jellyfin/client.py index 0da2975e..c22397c2 100644 --- a/jellyfin_kodi/jellyfin/client.py +++ b/jellyfin_kodi/jellyfin/client.py @@ -3,7 +3,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################# -from helper import LazyLogger +from ..helper import LazyLogger from . import api from .configuration import Config diff --git a/jellyfin_kodi/jellyfin/configuration.py b/jellyfin_kodi/jellyfin/configuration.py index 0b6607e6..c8407dbf 100644 --- a/jellyfin_kodi/jellyfin/configuration.py +++ b/jellyfin_kodi/jellyfin/configuration.py @@ -7,7 +7,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################# -from helper import LazyLogger +from ..helper import LazyLogger ################################################################################################# diff --git a/jellyfin_kodi/jellyfin/connection_manager.py b/jellyfin_kodi/jellyfin/connection_manager.py index 669f23b3..bdba0652 100644 --- a/jellyfin_kodi/jellyfin/connection_manager.py +++ b/jellyfin_kodi/jellyfin/connection_manager.py @@ -11,7 +11,7 @@ import traceback import urllib3 -from helper import LazyLogger +from ..helper import LazyLogger from .credentials import Credentials from .api import API diff --git a/jellyfin_kodi/jellyfin/credentials.py b/jellyfin_kodi/jellyfin/credentials.py index 661792a7..638f4af3 100644 --- a/jellyfin_kodi/jellyfin/credentials.py +++ b/jellyfin_kodi/jellyfin/credentials.py @@ -6,7 +6,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera import time from datetime import datetime -from helper import LazyLogger +from ..helper import LazyLogger ################################################################################################# diff --git a/jellyfin_kodi/jellyfin/http.py b/jellyfin_kodi/jellyfin/http.py index 63c0f570..646dc071 100644 --- a/jellyfin_kodi/jellyfin/http.py +++ b/jellyfin_kodi/jellyfin/http.py @@ -8,10 +8,10 @@ import time import requests from six import string_types, ensure_str -from helper.utils import JsonDebugPrinter -from helper import LazyLogger -from helper.exceptions import HTTPException -from jellyfin.utils import clean_none_dict_values +from ..helper.utils import JsonDebugPrinter +from ..helper import LazyLogger +from ..helper.exceptions import HTTPException +from .utils import clean_none_dict_values ################################################################################################# diff --git a/jellyfin_kodi/jellyfin/ws_client.py b/jellyfin_kodi/jellyfin/ws_client.py index 30f4c831..72b81b80 100644 --- a/jellyfin_kodi/jellyfin/ws_client.py +++ b/jellyfin_kodi/jellyfin/ws_client.py @@ -8,7 +8,7 @@ import threading from kodi_six import xbmc -from helper import LazyLogger +from ..helper import LazyLogger # If numpy is installed, the websockets library tries to use it, and then # kodi hard crashes for reasons I don't even want to pretend to understand diff --git a/jellyfin_kodi/library.py b/jellyfin_kodi/library.py index 01bb4eac..b44e722d 100644 --- a/jellyfin_kodi/library.py +++ b/jellyfin_kodi/library.py @@ -10,16 +10,15 @@ from six.moves import queue as Queue from kodi_six import xbmc, xbmcgui -from objects import Movies, TVShows, MusicVideos, Music -from database import Database, jellyfin_db, get_sync, save_sync -from full_sync import FullSync -from views import Views -from downloader import GetItemWorker -from helper import translate, api, stop, settings, window, dialog, event -from helper.utils import split_list, set_screensaver, get_screensaver -from helper.exceptions import LibraryException -from jellyfin import Jellyfin -from helper import LazyLogger +from .objects import Movies, TVShows, MusicVideos, Music +from .database import Database, jellyfin_db, get_sync, save_sync +from .full_sync import FullSync +from .views import Views +from .downloader import GetItemWorker +from .helper import translate, api, stop, settings, window, dialog, event, LazyLogger +from .helper.utils import split_list, set_screensaver, get_screensaver +from .helper.exceptions import LibraryException +from .jellyfin import Jellyfin ################################################################################################## diff --git a/jellyfin_kodi/monitor.py b/jellyfin_kodi/monitor.py index d1928fa2..4b2e6bec 100644 --- a/jellyfin_kodi/monitor.py +++ b/jellyfin_kodi/monitor.py @@ -9,14 +9,14 @@ import threading from kodi_six import xbmc -import connect -import player -from client import get_device_id -from objects import PlaylistWorker, on_play, on_update, special_listener -from helper import translate, settings, window, dialog, api, JSONRPC -from helper.utils import JsonDebugPrinter -from jellyfin import Jellyfin -from helper import LazyLogger +from . import connect +from . import player +from .client import get_device_id +from .objects import PlaylistWorker, on_play, on_update, special_listener +from .helper import translate, settings, window, dialog, api, JSONRPC +from .helper.utils import JsonDebugPrinter +from .jellyfin import Jellyfin +from .helper import LazyLogger ################################################################################################# diff --git a/jellyfin_kodi/objects/actions.py b/jellyfin_kodi/objects/actions.py index 7eef6a3d..d49c6b46 100644 --- a/jellyfin_kodi/objects/actions.py +++ b/jellyfin_kodi/objects/actions.py @@ -10,12 +10,12 @@ from datetime import timedelta from kodi_six import xbmc, xbmcgui, xbmcplugin, xbmcaddon -import database -from helper import translate, playutils, api, window, settings, dialog -from dialogs import resume -from helper import LazyLogger -from jellyfin import Jellyfin -from helper.utils import translate_path +from .. import database +from ..helper import translate, playutils, api, window, settings, dialog +from ..dialogs import resume +from ..helper import LazyLogger +from ..jellyfin import Jellyfin +from ..helper.utils import translate_path from .obj import Objects diff --git a/jellyfin_kodi/objects/kodi/artwork.py b/jellyfin_kodi/objects/kodi/artwork.py index a986f96a..a37320a8 100644 --- a/jellyfin_kodi/objects/kodi/artwork.py +++ b/jellyfin_kodi/objects/kodi/artwork.py @@ -3,7 +3,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################# -from helper import LazyLogger +from ...helper import LazyLogger from . import queries as QU diff --git a/jellyfin_kodi/objects/kodi/kodi.py b/jellyfin_kodi/objects/kodi/kodi.py index d0276c11..b9650149 100644 --- a/jellyfin_kodi/objects/kodi/kodi.py +++ b/jellyfin_kodi/objects/kodi/kodi.py @@ -3,8 +3,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################## -from helper import values -from helper import LazyLogger +from ...helper import values, LazyLogger from . import artwork from . import queries as QU diff --git a/jellyfin_kodi/objects/kodi/movies.py b/jellyfin_kodi/objects/kodi/movies.py index 5d3dfb28..e0a20475 100644 --- a/jellyfin_kodi/objects/kodi/movies.py +++ b/jellyfin_kodi/objects/kodi/movies.py @@ -3,7 +3,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################## -from helper import LazyLogger +from ...helper import LazyLogger from .kodi import Kodi from . import queries as QU diff --git a/jellyfin_kodi/objects/kodi/music.py b/jellyfin_kodi/objects/kodi/music.py index 8033f572..84d7a1a4 100644 --- a/jellyfin_kodi/objects/kodi/music.py +++ b/jellyfin_kodi/objects/kodi/music.py @@ -3,7 +3,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################## -from helper import LazyLogger +from ...helper import LazyLogger from . import queries_music as QU from .kodi import Kodi diff --git a/jellyfin_kodi/objects/kodi/musicvideos.py b/jellyfin_kodi/objects/kodi/musicvideos.py index 14752a52..97f3f6b6 100644 --- a/jellyfin_kodi/objects/kodi/musicvideos.py +++ b/jellyfin_kodi/objects/kodi/musicvideos.py @@ -3,7 +3,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################## -from helper import LazyLogger +from ...helper import LazyLogger from . import queries as QU from .kodi import Kodi diff --git a/jellyfin_kodi/objects/kodi/tvshows.py b/jellyfin_kodi/objects/kodi/tvshows.py index 81f1e4bf..e2a34449 100644 --- a/jellyfin_kodi/objects/kodi/tvshows.py +++ b/jellyfin_kodi/objects/kodi/tvshows.py @@ -3,7 +3,7 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################## -from helper import LazyLogger +from ...helper import LazyLogger from . import queries as QU from .kodi import Kodi diff --git a/jellyfin_kodi/objects/movies.py b/jellyfin_kodi/objects/movies.py index 2cf9ce53..45cf2e07 100644 --- a/jellyfin_kodi/objects/movies.py +++ b/jellyfin_kodi/objects/movies.py @@ -6,12 +6,12 @@ from __future__ import division, absolute_import, print_function, unicode_litera from six.moves.urllib.parse import urlencode from kodi_six.utils import py2_encode -import downloader as server -from database import jellyfin_db, queries as QUEM -from helper import api, stop, validate, validate_bluray_dir, validate_dvd_dir, jellyfin_item, values, Local -from helper import LazyLogger -from helper.utils import find_library -from helper.exceptions import PathValidationException +from .. import downloader as server +from ..database import jellyfin_db, queries as QUEM +from ..helper import api, stop, validate, validate_bluray_dir, validate_dvd_dir, jellyfin_item, values, Local +from ..helper import LazyLogger +from ..helper.utils import find_library +from ..helper.exceptions import PathValidationException from .obj import Objects from .kodi import Movies as KodiDb, queries as QU diff --git a/jellyfin_kodi/objects/music.py b/jellyfin_kodi/objects/music.py index 72631dae..2a95bfa7 100644 --- a/jellyfin_kodi/objects/music.py +++ b/jellyfin_kodi/objects/music.py @@ -5,11 +5,10 @@ from __future__ import division, absolute_import, print_function, unicode_litera import datetime -from database import jellyfin_db, queries as QUEM -from helper import api, stop, validate, jellyfin_item, values, Local -from helper import LazyLogger -from helper.utils import find_library -from helper.exceptions import PathValidationException +from ..database import jellyfin_db, queries as QUEM +from ..helper import api, stop, validate, jellyfin_item, values, Local, LazyLogger +from ..helper.utils import find_library +from ..helper.exceptions import PathValidationException from .obj import Objects from .kodi import Music as KodiDb, queries_music as QU diff --git a/jellyfin_kodi/objects/musicvideos.py b/jellyfin_kodi/objects/musicvideos.py index 8dff2c57..0d80dccd 100644 --- a/jellyfin_kodi/objects/musicvideos.py +++ b/jellyfin_kodi/objects/musicvideos.py @@ -9,11 +9,10 @@ import re from six.moves.urllib.parse import urlencode from kodi_six.utils import py2_encode -from database import jellyfin_db, queries as QUEM -from helper import api, stop, validate, jellyfin_item, values, Local -from helper import LazyLogger -from helper.utils import find_library -from helper.exceptions import PathValidationException +from ..database import jellyfin_db, queries as QUEM +from ..helper import api, stop, validate, jellyfin_item, values, Local, LazyLogger +from ..helper.utils import find_library +from ..helper.exceptions import PathValidationException from .obj import Objects from .kodi import MusicVideos as KodiDb, queries as QU diff --git a/jellyfin_kodi/objects/obj.py b/jellyfin_kodi/objects/obj.py index 5aedb80f..f9015791 100644 --- a/jellyfin_kodi/objects/obj.py +++ b/jellyfin_kodi/objects/obj.py @@ -8,7 +8,7 @@ import os from six import iteritems, ensure_text -from helper import LazyLogger, get_filesystem_encoding +from ..helper import LazyLogger, get_filesystem_encoding ################################################################################################## diff --git a/jellyfin_kodi/objects/tvshows.py b/jellyfin_kodi/objects/tvshows.py index 3da519a1..61809779 100644 --- a/jellyfin_kodi/objects/tvshows.py +++ b/jellyfin_kodi/objects/tvshows.py @@ -9,12 +9,12 @@ from ntpath import dirname from six.moves.urllib.parse import urlencode from kodi_six.utils import py2_encode -import downloader as server -from database import jellyfin_db, queries as QUEM -from helper import api, stop, validate, validate_bluray_dir, validate_dvd_dir, jellyfin_item, values, Local -from helper import LazyLogger -from helper.utils import find_library -from helper.exceptions import PathValidationException +from .. import downloader as server +from ..database import jellyfin_db, queries as QUEM +from ..helper import api, stop, validate, validate_bluray_dir, validate_dvd_dir, jellyfin_item, values, Local +from ..helper import LazyLogger +from ..helper.utils import find_library +from ..helper.exceptions import PathValidationException from .obj import Objects from .kodi import TVShows as KodiDb, queries as QU diff --git a/jellyfin_kodi/objects/utils.py b/jellyfin_kodi/objects/utils.py index 56f5876a..31bbf7d1 100644 --- a/jellyfin_kodi/objects/utils.py +++ b/jellyfin_kodi/objects/utils.py @@ -3,8 +3,8 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################# -from helper import JSONRPC -from helper import LazyLogger +from ..helper import JSONRPC +from ..helper import LazyLogger ################################################################################################# diff --git a/jellyfin_kodi/player.py b/jellyfin_kodi/player.py index 86c8eb34..e8a92985 100644 --- a/jellyfin_kodi/player.py +++ b/jellyfin_kodi/player.py @@ -7,11 +7,11 @@ import os from kodi_six import xbmc, xbmcvfs -from objects.obj import Objects -from helper import translate, api, window, settings, dialog, event, JSONRPC -from jellyfin import Jellyfin -from helper import LazyLogger -from helper.utils import translate_path +from .objects.obj import Objects +from .helper import translate, api, window, settings, dialog, event, JSONRPC +from .jellyfin import Jellyfin +from .helper import LazyLogger +from .helper.utils import translate_path ################################################################################################# diff --git a/jellyfin_kodi/views.py b/jellyfin_kodi/views.py index e3ee07c0..6ee678b0 100644 --- a/jellyfin_kodi/views.py +++ b/jellyfin_kodi/views.py @@ -7,13 +7,13 @@ import os import xml.etree.ElementTree as etree from six.moves.urllib.parse import urlencode -from kodi_six import xbmc, xbmcvfs +from kodi_six import xbmcvfs -from database import Database, jellyfin_db, get_sync, save_sync -from helper import translate, api, window, event -from jellyfin import Jellyfin -from helper import LazyLogger -from helper.utils import translate_path +from .database import Database, jellyfin_db, get_sync, save_sync +from .helper import translate, api, window, event +from .jellyfin import Jellyfin +from .helper import LazyLogger +from .helper.utils import translate_path ################################################################################################# diff --git a/service.py b/service.py index c0f47b84..d725b37c 100644 --- a/service.py +++ b/service.py @@ -3,28 +3,13 @@ from __future__ import division, absolute_import, print_function, unicode_litera ################################################################################################# -import os import threading -import sys -from kodi_six import xbmc, xbmcaddon, xbmcvfs +from kodi_six import xbmc -################################################################################################# - -kodi_version = int(xbmc.getInfoLabel('System.BuildVersion')[:2]) -__addon__ = xbmcaddon.Addon(id='plugin.video.jellyfin') -if kodi_version > 18: - __base__ = xbmcvfs.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'jellyfin_kodi')) -else: - __base__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'jellyfin_kodi')) - -sys.path.insert(0, __base__) - -################################################################################################# - -from entrypoint import Service # noqa: E402 -from helper.utils import settings # noqa: E402 -from helper import LazyLogger # noqa: E402 +from jellyfin_kodi.entrypoint import Service +from jellyfin_kodi.helper.utils import settings +from jellyfin_kodi.helper import LazyLogger ################################################################################################# diff --git a/tests/test_clean_none_dict_values.py b/tests/test_clean_none_dict_values.py index 9c094fb1..4a4f43d8 100644 --- a/tests/test_clean_none_dict_values.py +++ b/tests/test_clean_none_dict_values.py @@ -1,10 +1,6 @@ -import sys - import pytest -sys.path.insert(0, 'jellyfin_kodi') - -from jellyfin.utils import clean_none_dict_values # noqa: E402 +from jellyfin_kodi.jellyfin.utils import clean_none_dict_values @pytest.mark.parametrize("obj,expected", [ diff --git a/tests/test_helper_utils.py b/tests/test_helper_utils.py index 2be266ea..89732e0b 100644 --- a/tests/test_helper_utils.py +++ b/tests/test_helper_utils.py @@ -1,13 +1,9 @@ # -*- coding: utf-8 -*- from __future__ import division, absolute_import, print_function, unicode_literals -import sys - import pytest -sys.path.insert(0, 'jellyfin_kodi') - -from helper.utils import values # noqa: E402 +from jellyfin_kodi.helper.utils import values item1 = {'foo': 123, 'bar': 456, 'baz': 789} diff --git a/tox.ini b/tox.ini index a8463728..cd2729f9 100644 --- a/tox.ini +++ b/tox.ini @@ -13,12 +13,7 @@ testpaths = tests [coverage:run] -source = - jellyfin_kodi - context.py - context_play.py - default.py - service.py +source = . omit = tests/* build.py diff --git a/typings/database/jellyfin_db.pyi b/typings/jellyfin_kodi/database/jellyfin_db.pyi similarity index 100% rename from typings/database/jellyfin_db.pyi rename to typings/jellyfin_kodi/database/jellyfin_db.pyi diff --git a/typings/jellyfin_kodi/helper/utils.pyi b/typings/jellyfin_kodi/helper/utils.pyi new file mode 100644 index 00000000..3629bba0 --- /dev/null +++ b/typings/jellyfin_kodi/helper/utils.pyi @@ -0,0 +1 @@ +def kodi_version(self) -> int: ...