From 86455dfff7e4878e5192dd97991f2e96a3021739 Mon Sep 17 00:00:00 2001 From: Sebastian Golasch Date: Mon, 6 Mar 2017 17:13:04 +0100 Subject: [PATCH] chore(performance): Further speed up of imports --- addon.py | 2 -- addon.xml | 3 +- resources/language/English/strings.po | 2 +- resources/language/German/strings.po | 2 +- resources/lib/KodiHelper.py | 16 +++++------ resources/lib/Library.py | 8 +++--- resources/lib/Navigation.py | 10 +++---- resources/lib/NetflixSession.py | 40 +++++++++++++-------------- service.py | 1 - 9 files changed, 39 insertions(+), 45 deletions(-) diff --git a/addon.py b/addon.py index 55c918c..5b2d7e8 100644 --- a/addon.py +++ b/addon.py @@ -3,8 +3,6 @@ # Module: default # Created on: 13.01.2017 -# import local classes - import sys from resources.lib.NetflixSession import NetflixSession from resources.lib.KodiHelper import KodiHelper diff --git a/addon.xml b/addon.xml index f301981..920b7c1 100644 --- a/addon.xml +++ b/addon.xml @@ -1,11 +1,10 @@ - + - video diff --git a/resources/language/English/strings.po b/resources/language/English/strings.po index 89d8e2a..cfa6cd0 100644 --- a/resources/language/English/strings.po +++ b/resources/language/English/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.9.10 +# Addon version: 0.9.11 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/German/strings.po b/resources/language/German/strings.po index 28a8569..494840c 100644 --- a/resources/language/German/strings.po +++ b/resources/language/German/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.9.10 +# Addon version: 0.9.11 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/lib/KodiHelper.py b/resources/lib/KodiHelper.py index 94516ca..7386ece 100644 --- a/resources/lib/KodiHelper.py +++ b/resources/lib/KodiHelper.py @@ -3,14 +3,14 @@ # Module: KodiHelper # Created on: 13.01.2017 -import os -import urllib import xbmcplugin import xbmcgui -import xbmcaddon import xbmc import json -import uuid +from os.path import join +from urllib import urlencode +from xbmcaddon import Addon +from uuid import uuid4 from UniversalAnalytics import Tracker try: import cPickle as pickle @@ -33,14 +33,14 @@ class KodiHelper: """ self.plugin_handle = plugin_handle self.base_url = base_url - self.addon = xbmcaddon.Addon() + self.addon = Addon() self.plugin = self.addon.getAddonInfo('name') self.base_data_path = xbmc.translatePath(self.addon.getAddonInfo('profile')) self.home_path = xbmc.translatePath('special://home') self.plugin_path = self.addon.getAddonInfo('path') self.cookie_path = self.base_data_path + 'COOKIE' self.data_path = self.base_data_path + 'DATA' - self.config_path = os.path.join(self.base_data_path, 'config') + self.config_path = join(self.base_data_path, 'config') self.msl_data_path = xbmc.translatePath('special://profile/addon_data/service.msl').decode('utf-8') + '/' self.verb_log = self.addon.getSetting('logging') == 'true' self.default_fanart = self.addon.getAddonInfo('fanart') @@ -801,7 +801,7 @@ class KodiHelper: entry_keys = entry.keys() # action item templates - encoded_title = urllib.urlencode({'title': entry['title'].encode('utf-8')}) if 'title' in entry else '' + encoded_title = urlencode({'title': entry['title'].encode('utf-8')}) if 'title' in entry else '' url_tmpl = 'XBMC.RunPlugin(' + self.base_url + '?action=%action%&id=' + str(entry['id']) + '&' + encoded_title + ')' actions = [ ['export_to_library', self.get_local_string(30018), 'export'], @@ -922,7 +922,7 @@ class KodiHelper: #Get or Create Tracking id tracking_id = self.addon.getSetting('tracking_id') if tracking_id is '': - tracking_id = str(uuid.uuid4()) + tracking_id = str(uuid4()) self.addon.setSetting('tracking_id', tracking_id) # Send the tracking event tracker = Tracker.create('UA-46081640-5', client_id=tracking_id) diff --git a/resources/lib/Library.py b/resources/lib/Library.py index 3dd8475..0d70ad3 100644 --- a/resources/lib/Library.py +++ b/resources/lib/Library.py @@ -4,12 +4,12 @@ # Created on: 13.01.2017 import os -import shutil +from shutil import rmtree +from utils import noop try: import cPickle as pickle except: import pickle -from utils import noop class Library: """Exports Netflix shows & movies to a local library folder""" @@ -348,7 +348,7 @@ class Library: self._update_local_db(filename=self.db_filepath, db=self.db) dirname = os.path.join(self.movie_path, folder) if os.path.exists(dirname): - shutil.rmtree(dirname) + rmtree(dirname) return True return False @@ -370,7 +370,7 @@ class Library: self._update_local_db(filename=self.db_filepath, db=self.db) show_dir = os.path.join(self.tvshow_path, folder) if os.path.exists(show_dir): - shutil.rmtree(show_dir) + rmtree(show_dir) return True return False diff --git a/resources/lib/Navigation.py b/resources/lib/Navigation.py index 79efa59..d4d3f7f 100644 --- a/resources/lib/Navigation.py +++ b/resources/lib/Navigation.py @@ -3,11 +3,9 @@ # Module: Navigation # Created on: 13.01.2017 -import urllib -import time +from urllib import urlencode, unquote from urlparse import parse_qsl -from utils import noop -from utils import log +from utils import noop, log class Navigation: """Routes to the correct subfolder, dispatches actions & acts as a controller for the Kodi view & the Netflix model""" @@ -95,7 +93,7 @@ class Navigation: return self.add_to_list(video_id=params['id']) elif params['action'] == 'export': # adds a title to the users list on Netflix - alt_title = self.kodi_helper.show_add_to_library_title_dialog(original_title=urllib.unquote(params['title']).decode('utf8')) + alt_title = self.kodi_helper.show_add_to_library_title_dialog(original_title=unquote(params['title']).decode('utf8')) return self.export_to_library(video_id=params['id'], alt_title=alt_title) elif params['action'] == 'remove': # adds a title to the users list on Netflix @@ -543,4 +541,4 @@ class Navigation: str Url + querystring based on the param """ - return self.base_url + '?' + urllib.urlencode(query) + return self.base_url + '?' + urlencode(query) diff --git a/resources/lib/NetflixSession.py b/resources/lib/NetflixSession.py index a96fae6..0ad98b1 100644 --- a/resources/lib/NetflixSession.py +++ b/resources/lib/NetflixSession.py @@ -4,17 +4,17 @@ # Created on: 13.01.2017 import os -import base64 -import time -import urllib import json -import requests +from requests import session, cookies +from urllib import quote +from time import time +from base64 import urlsafe_b64encode +from bs4 import BeautifulSoup, SoupStrainer +from utils import noop try: import cPickle as pickle except: import pickle -from bs4 import BeautifulSoup, SoupStrainer -from utils import noop class NetflixSession: """Helps with login/session management of Netflix users & API data fetching""" @@ -100,7 +100,7 @@ class NetflixSession: self.log = log_fn # start session, fake chrome on the current platform (so that we get a proper widevine esn) & enable gzip - self.session = requests.session() + self.session = session() self.session.headers.update({ 'User-Agent': self._get_user_agent_for_current_platform(), 'Accept-Encoding': 'gzip' @@ -272,7 +272,7 @@ class NetflixSession: """ payload = { 'switchProfileGuid': profile_id, - '_': int(time.time()), + '_': int(time()), 'authURL': self.user_data['authURL'] } @@ -1295,7 +1295,7 @@ class NetflixSession: 'toRow': list_to, 'opaqueImageExtension': 'jpg', 'transparentImageExtension': 'png', - '_': int(time.time()), + '_': int(time()), 'authURL': self.user_data['authURL'] } response = self._session_get(component='video_list_ids', params=payload, type='api') @@ -1321,7 +1321,7 @@ class NetflixSession: Raw Netflix API call response or api call error """ # properly encode the search string - encoded_search_string = urllib.quote(search_str) + encoded_search_string = quote(search_str) paths = [ ['search', encoded_search_string, 'titles', {'from': list_from, 'to': list_to}, ['summary', 'title']], @@ -1424,7 +1424,7 @@ class NetflixSession: payload = { 'movieid': id, 'imageformat': 'jpg', - '_': int(time.time()) + '_': int(time()) } response = self._session_get(component='metadata', params=payload, type='api') return self._process_response(response=response, component=self._get_api_url_for(component='metadata')) @@ -1813,10 +1813,10 @@ class NetflixSession: return False with open(filename) as f: - cookies = pickle.load(f) - if cookies: - jar = requests.cookies.RequestsCookieJar() - jar._cookies = cookies + _cookies = pickle.load(f) + if _cookies: + jar = cookies.RequestsCookieJar() + jar._cookies = _cookies self.session.cookies = jar else: return False @@ -1849,7 +1849,7 @@ class NetflixSession: :obj:`str` Account data hash """ - return base64.urlsafe_b64encode(account['email']) + return urlsafe_b64encode(account['email']) def _get_user_agent_for_current_platform (self): """Determines the user agent string for the current platform (to retrieve a valid ESN) @@ -1895,9 +1895,9 @@ class NetflixSession: Contents of the field to match """ url = self._get_document_url_for(component=component) if type == 'document' else self._get_api_url_for(component=component) - start = time.time() + start = time() response = self.session.post(url=url, data=data, params=params, headers=headers, verify=self.verify_ssl) - end = time.time() + end = time() self.log('[POST] Request for "' + url + '" took ' + str(end - start) + ' seconds') return response @@ -1921,9 +1921,9 @@ class NetflixSession: Contents of the field to match """ url = self._get_document_url_for(component=component) if type == 'document' else self._get_api_url_for(component=component) - start = time.time() + start = time() response = self.session.get(url=url, verify=self.verify_ssl, params=params) - end = time.time() + end = time() self.log('[GET] Request for "' + url + '" took ' + str(end - start) + ' seconds') return response diff --git a/service.py b/service.py index b6abc1b..1829fbd 100644 --- a/service.py +++ b/service.py @@ -12,7 +12,6 @@ kodi_helper = KodiHelper( base_url=None ) - def select_unused_port(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost', 0)) -- 2.30.2