diff --git a/gui/slick/images/providers/french-adn.png b/gui/slick/images/providers/french_adn.png similarity index 100% rename from gui/slick/images/providers/french-adn.png rename to gui/slick/images/providers/french_adn.png diff --git a/gui/slick/images/providers/french-adn_com.png b/gui/slick/images/providers/french_adn_com.png similarity index 100% rename from gui/slick/images/providers/french-adn_com.png rename to gui/slick/images/providers/french_adn_com.png diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index e6fe03748a..b0beeef970 100644 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -18,7 +18,6 @@ # along with SickRage. If not, see . # pylint: disable=too-many-lines -import webbrowser import datetime import socket import os @@ -2177,6 +2176,13 @@ def save_config(): # pylint: disable=too-many-statements, too-many-branches def launchBrowser(protocol='http', startPort=None, web_root='/'): + + try: + import webbrowser + except ImportError: + logger.log(u"Unable to load the webbrowser module, cannot launch the browser.", logger.WARNING) + return + if not startPort: startPort = WEB_PORT diff --git a/sickbeard/clients/generic.py b/sickbeard/clients/generic.py index 8f79e970d9..469d54e7ca 100644 --- a/sickbeard/clients/generic.py +++ b/sickbeard/clients/generic.py @@ -6,7 +6,7 @@ from base64 import b16encode, b32decode import sickbeard -from sickbeard import logger +from sickbeard import logger, helpers from bencode import bencode, bdecode import requests import cookielib @@ -27,7 +27,7 @@ def __init__(self, name, host=None, username=None, password=None): self.response = None self.auth = None self.last_time = time.time() - self.session = requests.Session() + self.session = helpers.make_session() self.session.auth = (self.username, self.password) self.session.cookies = cookielib.CookieJar() diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index 1d99be40c1..b27664b2e2 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -58,6 +58,8 @@ from sickrage.helper.exceptions import ex from sickrage.show.Show import Show from cachecontrol import CacheControl +# from httpcache import CachingHTTPAdapter + from itertools import izip, cycle import shutil @@ -1381,6 +1383,14 @@ def _getTempDir(): return ek(os.path.join, tempfile.gettempdir(), "sickrage-%s" % uid) +def make_session(): + session = requests.Session() + # session.mount('http://', CachingHTTPAdapter()) + # session.mount('http://', CachingHTTPAdapter()) + session = CacheControl(sess=session, cache_etags=True) + return session + + def _setUpSession(session, headers): """ Returns a session initialized with default cache and parameter settings @@ -1390,9 +1400,6 @@ def _setUpSession(session, headers): :return: session object """ - # request session - session = CacheControl(sess=session, cache_etags=True) - # request session clear residual referer # pylint: disable=superfluous-parens # These extra parens are necessary! @@ -1760,7 +1767,7 @@ def getDiskSpaceUsage(diskPath=None): def getTVDBFromID(indexer_id, indexer): # pylint:disable=too-many-return-statements - session = requests.Session() + session = make_session() tvdb_id = '' if indexer == 'IMDB': url = "http://www.thetvdb.com/api/GetSeriesByRemoteID.php?imdbid=%s" % indexer_id diff --git a/sickbeard/imdbPopular.py b/sickbeard/imdbPopular.py index 68d5ceb642..73dc5f5387 100644 --- a/sickbeard/imdbPopular.py +++ b/sickbeard/imdbPopular.py @@ -2,7 +2,6 @@ import re import os import posixpath -import requests from bs4 import BeautifulSoup from datetime import date @@ -25,7 +24,7 @@ def __init__(self): 'year': '%s,%s' % (date.today().year - 1, date.today().year + 1) } - self.session = requests.Session() + self.session = helpers.make_session() def fetch_popular_shows(self): """Get popular show information from IMDB""" diff --git a/sickbeard/indexers/indexer_config.py b/sickbeard/indexers/indexer_config.py index 10b1e90309..5effb5c321 100644 --- a/sickbeard/indexers/indexer_config.py +++ b/sickbeard/indexers/indexer_config.py @@ -1,17 +1,19 @@ # coding=utf-8 from tvdb_api.tvdb_api import Tvdb -import requests +from sickbeard import helpers initConfig = { - 'valid_languages': ["da", "fi", "nl", "de", "it", "es", "fr", "pl", "hu", "el", "tr", - "ru", "he", "ja", "pt", "zh", "cs", "sl", "hr", "ko", "en", "sv", "no" - ], - 'langabbv_to_id': {'el': 20, 'en': 7, 'zh': 27, - 'it': 15, 'cs': 28, 'es': 16, 'ru': 22, 'nl': 13, 'pt': 26, 'no': 9, - 'tr': 21, 'pl': 18, 'fr': 17, 'hr': 31, 'de': 14, 'da': 10, 'fi': 11, - 'hu': 19, 'ja': 25, 'he': 24, 'ko': 32, 'sv': 8, 'sl': 30 - } + 'valid_languages': [ + "da", "fi", "nl", "de", "it", "es", "fr", "pl", "hu", "el", "tr", + "ru", "he", "ja", "pt", "zh", "cs", "sl", "hr", "ko", "en", "sv", "no" + ], + 'langabbv_to_id': { + 'el': 20, 'en': 7, 'zh': 27, + 'it': 15, 'cs': 28, 'es': 16, 'ru': 22, 'nl': 13, 'pt': 26, 'no': 9, + 'tr': 21, 'pl': 18, 'fr': 17, 'hr': 31, 'de': 14, 'da': 10, 'fi': 11, + 'hu': 19, 'ja': 25, 'he': 24, 'ko': 32, 'sv': 8, 'sl': 30 + } } INDEXER_TVDB = 1 @@ -22,11 +24,12 @@ 'id': INDEXER_TVDB, 'name': 'theTVDB', 'module': Tvdb, - 'api_params': {'apikey': 'F9C450E78D99172E', - 'language': 'en', - 'useZip': True, - }, - 'session': requests.Session(), + 'api_params': { + 'apikey': 'F9C450E78D99172E', + 'language': 'en', + 'useZip': True, + }, + 'session': helpers.make_session(), 'trakt_id': 'tvdb_id', 'xem_origin': 'tvdb', 'icon': 'thetvdb16.png', diff --git a/sickbeard/metadata/helpers.py b/sickbeard/metadata/helpers.py index 972dc5cf5e..d721797e8c 100644 --- a/sickbeard/metadata/helpers.py +++ b/sickbeard/metadata/helpers.py @@ -20,9 +20,8 @@ from sickbeard import helpers from sickbeard import logger -import requests -meta_session = requests.Session() +meta_session = helpers.make_session() def getShowImage(url, imgNum=None): diff --git a/sickbeard/network_timezones.py b/sickbeard/network_timezones.py index 78e3e302cb..bdfa506f38 100644 --- a/sickbeard/network_timezones.py +++ b/sickbeard/network_timezones.py @@ -20,7 +20,6 @@ import re import datetime -import requests from dateutil import tz from sickbeard import db @@ -39,8 +38,8 @@ def update_network_dict(): """Update timezone information from SR repositories""" - url = 'https://raw.githubusercontent.com/pymedusa/sickrage.github.io/master/sb_network_timezones/network_timezones.txt' - url_data = helpers.getURL(url, session=requests.Session(), returns='text') + url = 'http://raw.githubusercontent.com/pymedusa/sickrage.github.io/master/sb_network_timezones/network_timezones.txt' + url_data = helpers.getURL(url, session=helpers.make_session(), returns='text') if not url_data: logger.log(u'Updating network timezones failed, this can happen from time to time. URL: %s' % url, logger.WARNING) load_network_dict() diff --git a/sickbeard/notifiers/plex.py b/sickbeard/notifiers/plex.py index 9855e9217b..e6ad745d79 100644 --- a/sickbeard/notifiers/plex.py +++ b/sickbeard/notifiers/plex.py @@ -19,7 +19,6 @@ # along with SickRage. If not, see . import re -import requests try: import xml.etree.cElementTree as etree except ImportError: @@ -27,7 +26,7 @@ import sickbeard from sickbeard import logger, common -from sickbeard.helpers import getURL +from sickbeard.helpers import getURL, make_session from sickrage.helper.exceptions import ex @@ -40,7 +39,7 @@ def __init__(self): 'X-Plex-Client-Identifier': sickbeard.common.USER_AGENT, 'X-Plex-Version': '2016.02.10' } - self.session = requests.Session() + self.session = make_session() @staticmethod def _notify_pht(message, title='SickRage', host=None, username=None, password=None, force=False): # pylint: disable=too-many-arguments diff --git a/sickbeard/notifiers/pushbullet.py b/sickbeard/notifiers/pushbullet.py index 906a696234..c0dc5ebb04 100644 --- a/sickbeard/notifiers/pushbullet.py +++ b/sickbeard/notifiers/pushbullet.py @@ -19,11 +19,10 @@ # along with SickRage. If not, see . import json -import requests import traceback import sickbeard -from sickbeard import logger +from sickbeard import logger, helpers from sickbeard.common import notifyStrings from sickbeard.common import NOTIFY_SNATCH from sickbeard.common import NOTIFY_DOWNLOAD @@ -35,7 +34,7 @@ class Notifier(object): - session = requests.Session() + session = helpers.make_session() TEST_EVENT = 'Test' def __init__(self): diff --git a/sickbeard/nzbSplitter.py b/sickbeard/nzbSplitter.py index a3d25d15d4..86a177af67 100644 --- a/sickbeard/nzbSplitter.py +++ b/sickbeard/nzbSplitter.py @@ -20,7 +20,6 @@ # pylint: disable=line-too-long -import requests # pylint: disable=import-error import re try: @@ -150,7 +149,7 @@ def split_result(obj): :param obj: to search for results :return: a list of episode objects or an empty list """ - url_data = helpers.getURL(obj.url, session=requests.Session(), returns='content') + url_data = helpers.getURL(obj.url, session=helpers.make_session(), returns='content') if url_data is None: logger.log(u"Unable to load url " + obj.url + ", can't download season NZB", logger.ERROR) return [] diff --git a/sickbeard/postProcessor.py b/sickbeard/postProcessor.py index f56482c34a..18d01a7896 100644 --- a/sickbeard/postProcessor.py +++ b/sickbeard/postProcessor.py @@ -421,7 +421,7 @@ def _int_copy(cur_file_path, new_file_path): helpers.copyFile(cur_file_path, new_file_path) helpers.chmodAsParent(new_file_path) except (IOError, OSError) as e: - logger.log(u"Unable to copy file " + cur_file_path + " to " + new_file_path + ": " + ex(e), logger.ERROR) + self._log(u"Unable to copy file " + cur_file_path + " to " + new_file_path + ": " + ex(e), logger.ERROR) raise self._combined_file_operation(file_path, new_path, new_base_name, associated_files, action=_int_copy, diff --git a/sickbeard/scene_exceptions.py b/sickbeard/scene_exceptions.py index 291b874bc8..44964c800f 100644 --- a/sickbeard/scene_exceptions.py +++ b/sickbeard/scene_exceptions.py @@ -295,9 +295,7 @@ def _anidb_exceptions_fetcher(): setLastRefresh('anidb') return anidb_exception_dict - -xem_session = requests.Session() - +xem_session = helpers.make_session() def _xem_exceptions_fetcher(): if shouldRefresh('xem'): diff --git a/sickbeard/showUpdater.py b/sickbeard/showUpdater.py index b8b10b962a..d226dc0e68 100644 --- a/sickbeard/showUpdater.py +++ b/sickbeard/showUpdater.py @@ -40,7 +40,7 @@ def __init__(self): self.lock = threading.Lock() self.amActive = False - self.session = requests.Session() + self.session = helpers.make_session() def run(self, force=False): # pylint: disable=unused-argument, too-many-locals, too-many-branches, too-many-statements diff --git a/sickbeard/versionChecker.py b/sickbeard/versionChecker.py index 4017a13ba1..6740fea253 100644 --- a/sickbeard/versionChecker.py +++ b/sickbeard/versionChecker.py @@ -27,7 +27,6 @@ import traceback import time import datetime -import requests import shutil import shutil_custom @@ -58,7 +57,7 @@ def __init__(self): elif self.install_type == 'source': self.updater = SourceUpdateManager() - self.session = requests.Session() + self.session = helpers.make_session() def run(self, force=False): @@ -701,7 +700,7 @@ def __init__(self): self._newest_commit_hash = None self._num_commits_behind = 0 - self.session = requests.Session() + self.session = helpers.make_session() @staticmethod def _find_installed_branch(): diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index 499d3d1cb6..f6b4992538 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -1227,7 +1227,7 @@ def getDBcompare(): def displayShow(self, show=None): # todo: add more comprehensive show validation try: - show = int(show) # fails if show id ends in a period PyMedusa/SickRage-issues#65 + show = int(show) # fails if show id ends in a period SickRage/sickrage-issues#65 showObj = Show.find(sickbeard.showList, show) except (ValueError, TypeError): return self._genericMessage("Error", "Invalid show ID: %s" % str(show)) @@ -2241,7 +2241,7 @@ def index(self): changes = helpers.getURL('https://api.pymedusa.com/changelog.md', session=requests.Session(), returns='text') except Exception: logger.log(u'Could not load changes from repo, giving a link!', logger.DEBUG) - changes = 'Could not load changes from the repo. [Click here for CHANGES.md](https://raw.githubusercontent.com/pymedusa/sickrage.github.io/master/sickrage-news/CHANGES.md)' + changes = 'Could not load changes from the repo. [Click here for CHANGES.md](https://api.pymedusa.com/CHANGES.md)' t = PageTemplate(rh=self, filename="markdown.mako") data = markdown2.markdown(changes if changes else "The was a problem connecting to github, please refresh and try again", extras=['header-ids']) diff --git a/sickrage/show/recommendations/anidb.py b/sickrage/show/recommendations/anidb.py index d91c33334b..0d3fd8a36f 100644 --- a/sickrage/show/recommendations/anidb.py +++ b/sickrage/show/recommendations/anidb.py @@ -1,15 +1,16 @@ # coding=utf-8 -import requests from anidbhttp import anidbquery from anidbhttp.query import QUERY_HOT +from sickbeard import helpers from sickrage.helper.common import try_int from recommended import RecommendedShow + class AnidbPopular(object): def __init__(self): self.cache_subfolder = __name__.split('.')[-1] if '.' in __name__ else __name__ - self.session = requests.Session() + self.session = helpers.make_session() def fetch_latest_hot_shows(self): """Get popular show information from IMDB""" @@ -21,7 +22,7 @@ def fetch_latest_hot_shows(self): for show in shows: try: recommended_show = RecommendedShow(show.id, show.titles['x-jat'][0], 1, show.tvdbid, cache_subfolder=self.cache_subfolder, - rating=str(show.ratings['temporary']['rating']), votes=str(try_int(show.ratings['temporary']['count'],0)), image_href=show.url) + rating=str(show.ratings['temporary']['rating']), votes=str(try_int(show.ratings['temporary']['count'], 0)), image_href=show.url) # Check cache or get and save image recommended_show.cache_image("http://img7.anidb.net/pics/anime/{0}".format(show.image_path)) diff --git a/sickrage/show/recommendations/imdb.py b/sickrage/show/recommendations/imdb.py index 99b83d1923..46b8e241ac 100644 --- a/sickrage/show/recommendations/imdb.py +++ b/sickrage/show/recommendations/imdb.py @@ -2,7 +2,6 @@ import re import os import posixpath -import requests from bs4 import BeautifulSoup from datetime import date @@ -25,7 +24,7 @@ def __init__(self): 'year': '%s,%s' % (date.today().year - 1, date.today().year + 1) } - self.session = requests.Session() + self.session = helpers.make_session() def fetch_popular_shows(self): """Get popular show information from IMDB""" diff --git a/sickrage/show/recommendations/recommended.py b/sickrage/show/recommendations/recommended.py index 3afbad3ba4..f68ac12fe8 100644 --- a/sickrage/show/recommendations/recommended.py +++ b/sickrage/show/recommendations/recommended.py @@ -23,7 +23,6 @@ import os import posixpath -import requests import sickbeard from sickbeard import helpers @@ -62,7 +61,7 @@ def __init__(self, show_id, title, indexer, indexer_id, cache_subfolder=u'recomm # Check if the show is currently already in the db self.show_in_list = self.indexer_id in {show.indexerid for show in sickbeard.showList if show.indexerid} - self.session = requests.Session() + self.session = helpers.make_session() def cache_image(self, image_url): """ diff --git a/tests/torrent_tests.py b/tests/torrent_tests.py index 11df7c31a2..6abca544e3 100644 --- a/tests/torrent_tests.py +++ b/tests/torrent_tests.py @@ -31,10 +31,9 @@ sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) from bs4 import BeautifulSoup -from sickbeard.helpers import getURL +from sickbeard.helpers import getURL, make_session from sickbeard.providers.bitcannon import BitCannonProvider from sickbeard.tv import TVEpisode, TVShow -import requests # pylint: disable=import-error import tests.test_lib as test import urlparse @@ -81,7 +80,7 @@ def test_search(): # pylint: disable=too-many-locals url = 'http://kickass.to/' search_url = 'http://kickass.to/usearch/American%20Dad%21%20S08%20-S08E%20category%3Atv/?field=seeders&sorder=desc' - html = getURL(search_url, session=requests.Session(), returns='text') + html = getURL(search_url, session=make_session(), returns='text') if not html: return