diff --git a/Tautulli.py b/Tautulli.py
index 74a9789d..3a1c0a8f 100755
--- a/Tautulli.py
+++ b/Tautulli.py
@@ -1,8 +1,4 @@
-#!/bin/sh
-''''which python >/dev/null 2>&1 && exec python "$0" "$@" # '''
-''''which python2 >/dev/null 2>&1 && exec python2 "$0" "$@" # '''
-''''which python2.7 >/dev/null 2>&1 && exec python2.7 "$0" "$@" # '''
-''''exec echo "Error: Python not found!" # '''
+#!/usr/bin/env python
# -*- coding: utf-8 -*-
@@ -21,6 +17,8 @@
# You should have received a copy of the GNU General Public License
# along with Tautulli. If not, see .
+from __future__ import unicode_literals
+
import os
import sys
@@ -122,7 +120,7 @@ def main():
if args.dev:
plexpy.DEV = True
- logger.debug(u"Tautulli is running in the dev environment.")
+ logger.debug("Tautulli is running in the dev environment.")
if args.daemon:
if sys.platform == 'win32':
diff --git a/plexpy/__init__.py b/plexpy/__init__.py
index c2e47ef7..47bb3137 100644
--- a/plexpy/__init__.py
+++ b/plexpy/__init__.py
@@ -137,8 +137,7 @@ def initialize(config_file):
return False
if CONFIG.HTTP_PORT < 21 or CONFIG.HTTP_PORT > 65535:
- plexpy.logger.warn(
- u"HTTP_PORT out of bounds: 21 < %s < 65535", CONFIG.HTTP_PORT)
+ plexpy.logger.warn("HTTP_PORT out of bounds: 21 < %s < 65535", CONFIG.HTTP_PORT)
CONFIG.HTTP_PORT = 8181
if not CONFIG.HTTPS_CERT:
@@ -155,26 +154,26 @@ def initialize(config_file):
logger.initLogger(console=not QUIET, log_dir=CONFIG.LOG_DIR if log_writable else None,
verbose=VERBOSE)
- logger.info(u"Starting Tautulli {}".format(
+ logger.info("Starting Tautulli {}".format(
common.RELEASE
))
- logger.info(u"{}{} {} ({}{})".format(
+ logger.info("{}{} {} ({}{})".format(
'[Docker] ' if DOCKER else '', common.PLATFORM, common.PLATFORM_RELEASE, common.PLATFORM_VERSION,
' - {}'.format(common.PLATFORM_LINUX_DISTRO) if common.PLATFORM_LINUX_DISTRO else ''
))
- logger.info(u"{} (UTC{})".format(
+ logger.info("{} (UTC{})".format(
plexpy.SYS_TIMEZONE.zone, plexpy.SYS_UTC_OFFSET
))
- logger.info(u"Python {}".format(
+ logger.info("Python {}".format(
sys.version
))
- logger.info(u"Program Dir: {}".format(
+ logger.info("Program Dir: {}".format(
PROG_DIR
))
- logger.info(u"Config File: {}".format(
+ logger.info("Config File: {}".format(
CONFIG_FILE
))
- logger.info(u"Database File: {}".format(
+ logger.info("Database File: {}".format(
DB_FILE
))
@@ -186,18 +185,18 @@ def initialize(config_file):
CONFIG.NEWSLETTER_DIR, os.path.join(DATA_DIR, 'newsletters'), 'newsletters')
# Initialize the database
- logger.info(u"Checking if the database upgrades are required...")
+ logger.info("Checking if the database upgrades are required...")
try:
dbcheck()
except Exception as e:
- logger.error(u"Can't connect to the database: %s" % e)
+ logger.error("Can't connect to the database: %s" % e)
# Perform upgrades
- logger.info(u"Checking if configuration upgrades are required...")
+ logger.info("Checking if configuration upgrades are required...")
try:
upgrade()
except Exception as e:
- logger.error(u"Could not perform upgrades: %s" % e)
+ logger.error("Could not perform upgrades: %s" % e)
# Add notifier configs to logger blacklist
newsletters.blacklist_logger()
@@ -206,19 +205,19 @@ def initialize(config_file):
# Check if Tautulli has a uuid
if CONFIG.PMS_UUID == '' or not CONFIG.PMS_UUID:
- logger.debug(u"Generating UUID...")
+ logger.debug("Generating UUID...")
CONFIG.PMS_UUID = generate_uuid()
CONFIG.write()
# Check if Tautulli has an API key
if CONFIG.API_KEY == '':
- logger.debug(u"Generating API key...")
+ logger.debug("Generating API key...")
CONFIG.API_KEY = generate_uuid()
CONFIG.write()
# Check if Tautulli has a jwt_secret
if CONFIG.JWT_SECRET == '' or not CONFIG.JWT_SECRET or CONFIG.JWT_UPDATE_SECRET:
- logger.debug(u"Generating JWT secret...")
+ logger.debug("Generating JWT secret...")
CONFIG.JWT_SECRET = generate_uuid()
CONFIG.JWT_UPDATE_SECRET = False
CONFIG.write()
@@ -231,7 +230,7 @@ def initialize(config_file):
with open(version_lock_file, "r") as fp:
prev_version = fp.read()
except IOError as e:
- logger.error(u"Unable to read previous version from file '%s': %s" %
+ logger.error("Unable to read previous version from file '%s': %s" %
(version_lock_file, e))
else:
prev_version = 'cfd30996264b7e9fe4ef87f02d1cc52d1ae8bfca'
@@ -248,7 +247,7 @@ def initialize(config_file):
with open(version_lock_file, "w") as fp:
fp.write(CURRENT_VERSION)
except IOError as e:
- logger.error(u"Unable to write current version to file '%s': %s" %
+ logger.error("Unable to write current version to file '%s': %s" %
(version_lock_file, e))
# Check for new versions
@@ -256,7 +255,7 @@ def initialize(config_file):
try:
versioncheck.check_update()
except:
- logger.exception(u"Unhandled exception")
+ logger.exception("Unhandled exception")
LATEST_VERSION = CURRENT_VERSION
else:
LATEST_VERSION = CURRENT_VERSION
@@ -269,7 +268,7 @@ def initialize(config_file):
with open(release_file, "r") as fp:
PREV_RELEASE = fp.read()
except IOError as e:
- logger.error(u"Unable to read previous release from file '%s': %s" %
+ logger.error("Unable to read previous release from file '%s': %s" %
(release_file, e))
elif prev_version == 'cfd30996264b7e9fe4ef87f02d1cc52d1ae8bfca': # Commit hash for v1.4.25
PREV_RELEASE = 'v1.4.25'
@@ -285,7 +284,7 @@ def initialize(config_file):
with open(release_file, "w") as fp:
fp.write(common.RELEASE)
except IOError as e:
- logger.error(u"Unable to write current release to file '%s': %s" %
+ logger.error("Unable to write current release to file '%s': %s" %
(release_file, e))
# Get the real PMS urls for SSL and remote access
@@ -311,7 +310,7 @@ def initialize(config_file):
def daemonize():
if threading.activeCount() != 1:
logger.warn(
- u"There are %r active threads. Daemonizing may cause"
+ "There are %r active threads. Daemonizing may cause"
" strange behavior.",
threading.enumerate())
@@ -352,10 +351,10 @@ def daemonize():
os.dup2(se.fileno(), sys.stderr.fileno())
pid = os.getpid()
- logger.info(u"Daemonized to PID: %d", pid)
+ logger.info("Daemonized to PID: %d", pid)
if CREATEPID:
- logger.info(u"Writing PID %d to %s", pid, PIDFILE)
+ logger.info("Writing PID %d to %s", pid, PIDFILE)
with file(PIDFILE, 'w') as fp:
fp.write("%s\n" % pid)
@@ -373,7 +372,7 @@ def launch_browser(host, port, root):
try:
webbrowser.open('%s://%s:%i%s' % (protocol, host, port, root))
except Exception as e:
- logger.error(u"Could not launch browser: %s" % e)
+ logger.error("Could not launch browser: %s" % e)
def win_system_tray():
@@ -411,13 +410,13 @@ def win_system_tray():
('Update', None, tray_update, None),
('Restart', None, tray_restart, None))
- logger.info(u"Launching system tray icon.")
+ logger.info("Launching system tray icon.")
try:
plexpy.WIN_SYS_TRAY_ICON = SysTrayIcon(icon, hover_text, menu_options, on_quit=tray_quit)
plexpy.WIN_SYS_TRAY_ICON.start()
except Exception as e:
- logger.error(u"Unable to launch system tray icon: %s." % e)
+ logger.error("Unable to launch system tray icon: %s." % e)
plexpy.WIN_SYS_TRAY_ICON = None
@@ -509,15 +508,15 @@ def schedule_job(func, name, hours=0, minutes=0, seconds=0, args=None):
if job:
if hours == 0 and minutes == 0 and seconds == 0:
SCHED.remove_job(name)
- logger.info(u"Removed background task: %s", name)
+ logger.info("Removed background task: %s", name)
elif job.trigger.interval != datetime.timedelta(hours=hours, minutes=minutes):
SCHED.reschedule_job(name, trigger=IntervalTrigger(
hours=hours, minutes=minutes, seconds=seconds, timezone=pytz.UTC), args=args)
- logger.info(u"Re-scheduled background task: %s", name)
+ logger.info("Re-scheduled background task: %s", name)
elif hours > 0 or minutes > 0 or seconds > 0:
SCHED.add_job(func, id=name, trigger=IntervalTrigger(
hours=hours, minutes=minutes, seconds=seconds, timezone=pytz.UTC), args=args)
- logger.info(u"Scheduled background task: %s", name)
+ logger.info("Scheduled background task: %s", name)
def start():
@@ -561,7 +560,7 @@ def start():
def sig_handler(signum=None, frame=None):
if signum is not None:
- logger.info(u"Signal %i caught, saving and exiting...", signum)
+ logger.info("Signal %i caught, saving and exiting...", signum)
shutdown()
@@ -781,7 +780,7 @@ def dbcheck():
try:
c_db.execute('SELECT started FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN started INTEGER'
)
@@ -802,7 +801,7 @@ def dbcheck():
try:
c_db.execute('SELECT title FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN title TEXT'
)
@@ -826,7 +825,7 @@ def dbcheck():
try:
c_db.execute('SELECT ip_address FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN ip_address TEXT'
)
@@ -907,7 +906,7 @@ def dbcheck():
try:
c_db.execute('SELECT buffer_count FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN buffer_count INTEGER DEFAULT 0'
)
@@ -919,7 +918,7 @@ def dbcheck():
try:
c_db.execute('SELECT last_paused FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN last_paused INTEGER'
)
@@ -928,7 +927,7 @@ def dbcheck():
try:
c_db.execute('SELECT section_id FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN section_id INTEGER'
)
@@ -937,7 +936,7 @@ def dbcheck():
try:
c_db.execute('SELECT stopped FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN stopped INTEGER'
)
@@ -946,7 +945,7 @@ def dbcheck():
try:
c_db.execute('SELECT transcode_key FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN transcode_key TEXT'
)
@@ -955,7 +954,7 @@ def dbcheck():
try:
c_db.execute('SELECT write_attempts FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN write_attempts INTEGER DEFAULT 0'
)
@@ -964,7 +963,7 @@ def dbcheck():
try:
c_db.execute('SELECT transcode_decision FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN transcode_decision TEXT'
)
@@ -994,7 +993,7 @@ def dbcheck():
try:
c_db.execute('SELECT raw_stream_info FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN product TEXT'
)
@@ -1084,7 +1083,7 @@ def dbcheck():
try:
c_db.execute('SELECT video_height FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN video_height INTEGER'
)
@@ -1093,7 +1092,7 @@ def dbcheck():
try:
c_db.execute('SELECT subtitles FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN subtitles INTEGER'
)
@@ -1102,7 +1101,7 @@ def dbcheck():
try:
c_db.execute('SELECT synced_version_profile FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN synced_version_profile TEXT'
)
@@ -1114,7 +1113,7 @@ def dbcheck():
try:
c_db.execute('SELECT transcode_hw_decoding FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN transcode_hw_decoding INTEGER'
)
@@ -1126,7 +1125,7 @@ def dbcheck():
try:
c_db.execute('SELECT watched FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN watched INTEGER DEFAULT 0'
)
@@ -1135,7 +1134,7 @@ def dbcheck():
try:
c_db.execute('SELECT live FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN live INTEGER'
)
@@ -1147,7 +1146,7 @@ def dbcheck():
try:
c_db.execute('SELECT session_id FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN session_id TEXT'
)
@@ -1156,7 +1155,7 @@ def dbcheck():
try:
c_db.execute('SELECT original_title FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN original_title TEXT'
)
@@ -1165,7 +1164,7 @@ def dbcheck():
try:
c_db.execute('SELECT secure FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN secure INTEGER'
)
@@ -1177,7 +1176,7 @@ def dbcheck():
try:
c_db.execute('SELECT rating_key_websocket FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN rating_key_websocket TEXT'
)
@@ -1186,7 +1185,7 @@ def dbcheck():
try:
c_db.execute('SELECT video_scan_type FROM sessions')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table sessions.")
+ logger.debug("Altering database. Updating database table sessions.")
c_db.execute(
'ALTER TABLE sessions ADD COLUMN video_scan_type TEXT'
)
@@ -1204,7 +1203,7 @@ def dbcheck():
try:
c_db.execute('SELECT reference_id FROM session_history')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history.")
+ logger.debug("Altering database. Updating database table session_history.")
c_db.execute(
'ALTER TABLE session_history ADD COLUMN reference_id INTEGER DEFAULT 0'
)
@@ -1227,7 +1226,7 @@ def dbcheck():
try:
c_db.execute('SELECT bandwidth FROM session_history')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history.")
+ logger.debug("Altering database. Updating database table session_history.")
c_db.execute(
'ALTER TABLE session_history ADD COLUMN platform_version TEXT'
)
@@ -1254,7 +1253,7 @@ def dbcheck():
try:
c_db.execute('SELECT secure FROM session_history')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history.")
+ logger.debug("Altering database. Updating database table session_history.")
c_db.execute(
'ALTER TABLE session_history ADD COLUMN secure INTEGER'
)
@@ -1266,7 +1265,7 @@ def dbcheck():
try:
c_db.execute('SELECT full_title FROM session_history_metadata')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history_metadata.")
+ logger.debug("Altering database. Updating database table session_history_metadata.")
c_db.execute(
'ALTER TABLE session_history_metadata ADD COLUMN full_title TEXT'
)
@@ -1275,7 +1274,7 @@ def dbcheck():
try:
c_db.execute('SELECT tagline FROM session_history_metadata')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history_metadata.")
+ logger.debug("Altering database. Updating database table session_history_metadata.")
c_db.execute(
'ALTER TABLE session_history_metadata ADD COLUMN tagline TEXT'
)
@@ -1284,7 +1283,7 @@ def dbcheck():
try:
c_db.execute('SELECT section_id FROM session_history_metadata')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history_metadata.")
+ logger.debug("Altering database. Updating database table session_history_metadata.")
c_db.execute(
'ALTER TABLE session_history_metadata ADD COLUMN section_id INTEGER'
)
@@ -1293,7 +1292,7 @@ def dbcheck():
try:
c_db.execute('SELECT labels FROM session_history_metadata')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history_metadata.")
+ logger.debug("Altering database. Updating database table session_history_metadata.")
c_db.execute(
'ALTER TABLE session_history_metadata ADD COLUMN labels TEXT'
)
@@ -1302,7 +1301,7 @@ def dbcheck():
try:
c_db.execute('SELECT original_title FROM session_history_metadata')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history_metadata.")
+ logger.debug("Altering database. Updating database table session_history_metadata.")
c_db.execute(
'ALTER TABLE session_history_metadata ADD COLUMN original_title TEXT'
)
@@ -1311,7 +1310,7 @@ def dbcheck():
try:
c_db.execute('SELECT transcode_decision FROM session_history_media_info')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history_media_info.")
+ logger.debug("Altering database. Updating database table session_history_media_info.")
c_db.execute(
'ALTER TABLE session_history_media_info ADD COLUMN transcode_decision TEXT'
)
@@ -1326,7 +1325,7 @@ def dbcheck():
try:
c_db.execute('SELECT subtitles FROM session_history_media_info')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history_media_info.")
+ logger.debug("Altering database. Updating database table session_history_media_info.")
c_db.execute(
'ALTER TABLE session_history_media_info ADD COLUMN video_bit_depth INTEGER'
)
@@ -1446,7 +1445,7 @@ def dbcheck():
try:
c_db.execute('SELECT subtitle_codec FROM session_history_media_info')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history_media_info.")
+ logger.debug("Altering database. Updating database table session_history_media_info.")
c_db.execute(
'ALTER TABLE session_history_media_info ADD COLUMN subtitle_codec TEXT '
)
@@ -1455,7 +1454,7 @@ def dbcheck():
try:
c_db.execute('SELECT synced_version_profile FROM session_history_media_info')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history_media_info.")
+ logger.debug("Altering database. Updating database table session_history_media_info.")
c_db.execute(
'ALTER TABLE session_history_media_info ADD COLUMN synced_version_profile TEXT '
)
@@ -1467,7 +1466,7 @@ def dbcheck():
try:
c_db.execute('SELECT transcode_hw_decoding FROM session_history_media_info')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history_media_info.")
+ logger.debug("Altering database. Updating database table session_history_media_info.")
c_db.execute(
'ALTER TABLE session_history_media_info ADD COLUMN transcode_hw_decoding INTEGER '
)
@@ -1483,7 +1482,7 @@ def dbcheck():
result = c_db.execute('SELECT stream_container FROM session_history_media_info '
'WHERE stream_container IS NULL').fetchall()
if len(result) > 0:
- logger.debug(u"Altering database. Removing NULL values from session_history_media_info table.")
+ logger.debug("Altering database. Removing NULL values from session_history_media_info table.")
c_db.execute(
'UPDATE session_history_media_info SET stream_container = "" WHERE stream_container IS NULL '
)
@@ -1497,13 +1496,13 @@ def dbcheck():
'UPDATE session_history_media_info SET stream_subtitle_codec = "" WHERE stream_subtitle_codec IS NULL '
)
except sqlite3.OperationalError:
- logger.warn(u"Unable to remove NULL values from session_history_media_info table.")
+ logger.warn("Unable to remove NULL values from session_history_media_info table.")
# Upgrade session_history_media_info table from earlier versions
try:
c_db.execute('SELECT video_scan_type FROM session_history_media_info')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table session_history_media_info.")
+ logger.debug("Altering database. Updating database table session_history_media_info.")
c_db.execute(
'ALTER TABLE session_history_media_info ADD COLUMN video_scan_type TEXT'
)
@@ -1542,7 +1541,7 @@ def dbcheck():
try:
c_db.execute('SELECT do_notify FROM users')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table users.")
+ logger.debug("Altering database. Updating database table users.")
c_db.execute(
'ALTER TABLE users ADD COLUMN do_notify INTEGER DEFAULT 1'
)
@@ -1551,7 +1550,7 @@ def dbcheck():
try:
c_db.execute('SELECT keep_history FROM users')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table users.")
+ logger.debug("Altering database. Updating database table users.")
c_db.execute(
'ALTER TABLE users ADD COLUMN keep_history INTEGER DEFAULT 1'
)
@@ -1560,7 +1559,7 @@ def dbcheck():
try:
c_db.execute('SELECT custom_avatar_url FROM users')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table users.")
+ logger.debug("Altering database. Updating database table users.")
c_db.execute(
'ALTER TABLE users ADD COLUMN custom_avatar_url TEXT'
)
@@ -1569,7 +1568,7 @@ def dbcheck():
try:
c_db.execute('SELECT deleted_user FROM users')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table users.")
+ logger.debug("Altering database. Updating database table users.")
c_db.execute(
'ALTER TABLE users ADD COLUMN deleted_user INTEGER DEFAULT 0'
)
@@ -1578,7 +1577,7 @@ def dbcheck():
try:
c_db.execute('SELECT allow_guest FROM users')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table users.")
+ logger.debug("Altering database. Updating database table users.")
c_db.execute(
'ALTER TABLE users ADD COLUMN allow_guest INTEGER DEFAULT 0'
)
@@ -1593,7 +1592,7 @@ def dbcheck():
try:
c_db.execute('SELECT shared_libraries FROM users')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table users.")
+ logger.debug("Altering database. Updating database table users.")
c_db.execute(
'ALTER TABLE users ADD COLUMN shared_libraries TEXT'
)
@@ -1617,7 +1616,7 @@ def dbcheck():
try:
c_db.execute('SELECT is_admin FROM users')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table users.")
+ logger.debug("Altering database. Updating database table users.")
c_db.execute(
'ALTER TABLE users ADD COLUMN is_admin INTEGER DEFAULT 0'
)
@@ -1626,7 +1625,7 @@ def dbcheck():
try:
c_db.execute('SELECT poster_url FROM notify_log')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table notify_log.")
+ logger.debug("Altering database. Updating database table notify_log.")
c_db.execute(
'ALTER TABLE notify_log ADD COLUMN poster_url TEXT'
)
@@ -1635,7 +1634,7 @@ def dbcheck():
try:
c_db.execute('SELECT timestamp FROM notify_log')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table notify_log.")
+ logger.debug("Altering database. Updating database table notify_log.")
c_db.execute(
'CREATE TABLE IF NOT EXISTS notify_log_temp (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, '
'session_key INTEGER, rating_key INTEGER, parent_rating_key INTEGER, grandparent_rating_key INTEGER, '
@@ -1673,7 +1672,7 @@ def dbcheck():
try:
c_db.execute('SELECT notifier_id FROM notify_log')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table notify_log.")
+ logger.debug("Altering database. Updating database table notify_log.")
c_db.execute(
'ALTER TABLE notify_log ADD COLUMN notifier_id INTEGER'
)
@@ -1682,7 +1681,7 @@ def dbcheck():
try:
c_db.execute('SELECT success FROM notify_log')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table notify_log.")
+ logger.debug("Altering database. Updating database table notify_log.")
c_db.execute(
'ALTER TABLE notify_log ADD COLUMN success INTEGER DEFAULT 0'
)
@@ -1694,7 +1693,7 @@ def dbcheck():
try:
c_db.execute('SELECT start_time FROM newsletter_log')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table newsletter_log.")
+ logger.debug("Altering database. Updating database table newsletter_log.")
c_db.execute(
'ALTER TABLE newsletter_log ADD COLUMN start_time INTEGER'
)
@@ -1706,7 +1705,7 @@ def dbcheck():
try:
c_db.execute('SELECT filename FROM newsletter_log')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table newsletter_log.")
+ logger.debug("Altering database. Updating database table newsletter_log.")
c_db.execute(
'ALTER TABLE newsletter_log ADD COLUMN filename TEXT'
)
@@ -1715,7 +1714,7 @@ def dbcheck():
try:
c_db.execute('SELECT email_msg_id FROM newsletter_log')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table newsletter_log.")
+ logger.debug("Altering database. Updating database table newsletter_log.")
c_db.execute(
'ALTER TABLE newsletter_log ADD COLUMN email_msg_id TEXT'
)
@@ -1724,7 +1723,7 @@ def dbcheck():
try:
c_db.execute('SELECT id_name FROM newsletters')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table newsletters.")
+ logger.debug("Altering database. Updating database table newsletters.")
c_db.execute(
'ALTER TABLE newsletters ADD COLUMN id_name TEXT NOT NULL DEFAULT ""'
)
@@ -1733,7 +1732,7 @@ def dbcheck():
try:
result = c_db.execute('SELECT SQL FROM sqlite_master WHERE type="table" AND name="library_sections"').fetchone()
if 'section_id INTEGER UNIQUE' in result[0]:
- logger.debug(u"Altering database. Removing unique constraint on section_id from library_sections table.")
+ logger.debug("Altering database. Removing unique constraint on section_id from library_sections table.")
c_db.execute(
'CREATE TABLE library_sections_temp (id INTEGER PRIMARY KEY AUTOINCREMENT, '
'server_id TEXT, section_id INTEGER, section_name TEXT, section_type TEXT, '
@@ -1757,7 +1756,7 @@ def dbcheck():
'ALTER TABLE library_sections_temp RENAME TO library_sections'
)
except sqlite3.OperationalError:
- logger.warn(u"Unable to remove section_id unique constraint from library_sections.")
+ logger.warn("Unable to remove section_id unique constraint from library_sections.")
try:
c_db.execute(
'DROP TABLE library_sections_temp'
@@ -1769,18 +1768,18 @@ def dbcheck():
try:
result = c_db.execute('SELECT * FROM library_sections WHERE server_id = ""').fetchall()
if len(result) > 0:
- logger.debug(u"Altering database. Removing duplicate libraries from library_sections table.")
+ logger.debug("Altering database. Removing duplicate libraries from library_sections table.")
c_db.execute(
'DELETE FROM library_sections WHERE server_id = ""'
)
except sqlite3.OperationalError:
- logger.warn(u"Unable to remove duplicate libraries from library_sections table.")
+ logger.warn("Unable to remove duplicate libraries from library_sections table.")
# Upgrade library_sections table from earlier versions
try:
c_db.execute('SELECT agent FROM library_sections')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table library_sections.")
+ logger.debug("Altering database. Updating database table library_sections.")
c_db.execute(
'ALTER TABLE library_sections ADD COLUMN agent TEXT'
)
@@ -1789,7 +1788,7 @@ def dbcheck():
try:
result = c_db.execute('SELECT SQL FROM sqlite_master WHERE type="table" AND name="users"').fetchone()
if 'username TEXT NOT NULL UNIQUE' in result[0]:
- logger.debug(u"Altering database. Removing unique constraint on username from users table.")
+ logger.debug("Altering database. Removing unique constraint on username from users table.")
c_db.execute(
'CREATE TABLE users_temp (id INTEGER PRIMARY KEY AUTOINCREMENT, '
'user_id INTEGER DEFAULT NULL UNIQUE, username TEXT NOT NULL, friendly_name TEXT, '
@@ -1811,7 +1810,7 @@ def dbcheck():
'ALTER TABLE users_temp RENAME TO users'
)
except sqlite3.OperationalError:
- logger.warn(u"Unable to remove username unique constraint from users.")
+ logger.warn("Unable to remove username unique constraint from users.")
try:
c_db.execute(
'DROP TABLE users_temp'
@@ -1823,7 +1822,7 @@ def dbcheck():
try:
result = c_db.execute('SELECT SQL FROM sqlite_master WHERE type="table" AND name="mobile_devices"').fetchone()
if 'device_token TEXT NOT NULL UNIQUE' in result[0]:
- logger.debug(u"Altering database. Dropping and recreating mobile_devices table.")
+ logger.debug("Altering database. Dropping and recreating mobile_devices table.")
c_db.execute(
'DROP TABLE mobile_devices'
)
@@ -1832,14 +1831,14 @@ def dbcheck():
'device_id TEXT NOT NULL UNIQUE, device_token TEXT, device_name TEXT, friendly_name TEXT)'
)
except sqlite3.OperationalError:
- logger.warn(u"Failed to recreate mobile_devices table.")
+ logger.warn("Failed to recreate mobile_devices table.")
pass
# Upgrade mobile_devices table from earlier versions
try:
c_db.execute('SELECT last_seen FROM mobile_devices')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table mobile_devices.")
+ logger.debug("Altering database. Updating database table mobile_devices.")
c_db.execute(
'ALTER TABLE mobile_devices ADD COLUMN last_seen INTEGER'
)
@@ -1848,7 +1847,7 @@ def dbcheck():
try:
c_db.execute('SELECT custom_conditions FROM notifiers')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table notifiers.")
+ logger.debug("Altering database. Updating database table notifiers.")
c_db.execute(
'ALTER TABLE notifiers ADD COLUMN custom_conditions TEXT'
)
@@ -1860,7 +1859,7 @@ def dbcheck():
try:
c_db.execute('SELECT on_change FROM notifiers')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table notifiers.")
+ logger.debug("Altering database. Updating database table notifiers.")
c_db.execute(
'ALTER TABLE notifiers ADD COLUMN on_change INTEGER DEFAULT 0'
)
@@ -1875,7 +1874,7 @@ def dbcheck():
try:
c_db.execute('SELECT rating_key FROM tvmaze_lookup')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table tvmaze_lookup.")
+ logger.debug("Altering database. Updating database table tvmaze_lookup.")
c_db.execute(
'ALTER TABLE tvmaze_lookup ADD COLUMN rating_key INTEGER'
)
@@ -1890,7 +1889,7 @@ def dbcheck():
try:
c_db.execute('SELECT rating_key FROM themoviedb_lookup')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table themoviedb_lookup.")
+ logger.debug("Altering database. Updating database table themoviedb_lookup.")
c_db.execute(
'ALTER TABLE themoviedb_lookup ADD COLUMN rating_key INTEGER'
)
@@ -1905,7 +1904,7 @@ def dbcheck():
try:
c_db.execute('SELECT success FROM user_login')
except sqlite3.OperationalError:
- logger.debug(u"Altering database. Updating database table user_login.")
+ logger.debug("Altering database. Updating database table user_login.")
c_db.execute(
'ALTER TABLE user_login ADD COLUMN success INTEGER DEFAULT 1'
)
@@ -1914,7 +1913,7 @@ def dbcheck():
result = c_db.execute('SELECT agent_label FROM notifiers '
'WHERE agent_label = "XBMC" OR agent_label = "OSX Notify"').fetchone()
if result:
- logger.debug(u"Altering database. Renaming notifiers.")
+ logger.debug("Altering database. Renaming notifiers.")
c_db.execute(
'UPDATE notifiers SET agent_label = "Kodi" WHERE agent_label = "XBMC"'
)
@@ -1925,7 +1924,7 @@ def dbcheck():
# Add "Local" user to database as default unauthenticated user.
result = c_db.execute('SELECT id FROM users WHERE username = "Local"')
if not result.fetchone():
- logger.debug(u"User 'Local' does not exist. Adding user.")
+ logger.debug("User 'Local' does not exist. Adding user.")
c_db.execute('INSERT INTO users (user_id, username) VALUES (0, "Local")')
# Create table indices
@@ -1948,7 +1947,7 @@ def dbcheck():
result = db.select('SELECT SQL FROM sqlite_master WHERE type="table" AND name="poster_urls"')
if result:
result = db.select('SELECT * FROM poster_urls')
- logger.debug(u"Altering database. Updating database table imgur_lookup.")
+ logger.debug("Altering database. Updating database table imgur_lookup.")
data_factory = datafactory.DataFactory()
@@ -1990,31 +1989,31 @@ def shutdown(restart=False, update=False, checkout=False):
CONFIG.write()
if not restart and not update and not checkout:
- logger.info(u"Tautulli is shutting down...")
+ logger.info("Tautulli is shutting down...")
if update:
- logger.info(u"Tautulli is updating...")
+ logger.info("Tautulli is updating...")
try:
versioncheck.update()
except Exception as e:
- logger.warn(u"Tautulli failed to update: %s. Restarting." % e)
+ logger.warn("Tautulli failed to update: %s. Restarting." % e)
if checkout:
- logger.info(u"Tautulli is switching the git branch...")
+ logger.info("Tautulli is switching the git branch...")
try:
versioncheck.checkout_git_branch()
except Exception as e:
- logger.warn(u"Tautulli failed to switch git branch: %s. Restarting." % e)
+ logger.warn("Tautulli failed to switch git branch: %s. Restarting." % e)
if CREATEPID:
- logger.info(u"Removing pidfile %s", PIDFILE)
+ logger.info("Removing pidfile %s", PIDFILE)
os.remove(PIDFILE)
if WIN_SYS_TRAY_ICON:
WIN_SYS_TRAY_ICON.shutdown()
if restart:
- logger.info(u"Tautulli is restarting...")
+ logger.info("Tautulli is restarting...")
exe = sys.executable
args = [exe, FULL_PATH]
@@ -2088,7 +2087,7 @@ def analytics_event(category, action, label=None, value=None, **kwargs):
try:
TRACKER.send('event', data)
except Exception as e:
- logger.warn(u"Failed to send analytics event for category '%s', action '%s': %s" % (category, action, e))
+ logger.warn("Failed to send analytics event for category '%s', action '%s': %s" % (category, action, e))
def check_folder_writable(folder, fallback, name):
@@ -2099,17 +2098,17 @@ def check_folder_writable(folder, fallback, name):
try:
os.makedirs(folder)
except OSError as e:
- logger.error(u"Could not create %s dir '%s': %s" % (name, folder, e))
+ logger.error("Could not create %s dir '%s': %s" % (name, folder, e))
if folder != fallback:
- logger.warn(u"Falling back to %s dir '%s'" % (name, fallback))
+ logger.warn("Falling back to %s dir '%s'" % (name, fallback))
return check_folder_writable(None, fallback, name)
else:
return folder, None
if not os.access(folder, os.W_OK):
- logger.error(u"Cannot write to %s dir '%s'" % (name, folder))
+ logger.error("Cannot write to %s dir '%s'" % (name, folder))
if folder != fallback:
- logger.warn(u"Falling back to %s dir '%s'" % (name, fallback))
+ logger.warn("Falling back to %s dir '%s'" % (name, fallback))
return check_folder_writable(None, fallback, name)
else:
return folder, False
diff --git a/plexpy/activity_handler.py b/plexpy/activity_handler.py
index b65ebff6..09811a7a 100644
--- a/plexpy/activity_handler.py
+++ b/plexpy/activity_handler.py
@@ -107,7 +107,7 @@ class ActivityHandler(object):
if not session:
return
- logger.debug(u"Tautulli ActivityHandler :: Session %s started by user %s (%s) with ratingKey %s (%s)."
+ logger.debug("Tautulli ActivityHandler :: Session %s started by user %s (%s) with ratingKey %s (%s)."
% (str(session['session_key']), str(session['user_id']), session['username'],
str(session['rating_key']), session['full_title']))
@@ -124,7 +124,7 @@ class ActivityHandler(object):
def on_stop(self, force_stop=False):
if self.is_valid_session():
- logger.debug(u"Tautulli ActivityHandler :: Session %s %sstopped."
+ logger.debug("Tautulli ActivityHandler :: Session %s %sstopped."
% (str(self.get_session_key()), 'force ' if force_stop else ''))
# Set the session last_paused timestamp
@@ -149,7 +149,7 @@ class ActivityHandler(object):
schedule_callback('session_key-{}'.format(self.get_session_key()), remove_job=True)
# Remove the session from our temp session table
- logger.debug(u"Tautulli ActivityHandler :: Removing sessionKey %s ratingKey %s from session queue"
+ logger.debug("Tautulli ActivityHandler :: Removing sessionKey %s ratingKey %s from session queue"
% (str(self.get_session_key()), str(self.get_rating_key())))
ap.delete_session(row_id=row_id)
delete_metadata_cache(self.get_session_key())
@@ -162,7 +162,7 @@ class ActivityHandler(object):
def on_pause(self, still_paused=False):
if self.is_valid_session():
if not still_paused:
- logger.debug(u"Tautulli ActivityHandler :: Session %s paused." % str(self.get_session_key()))
+ logger.debug("Tautulli ActivityHandler :: Session %s paused." % str(self.get_session_key()))
# Set the session last_paused timestamp
ap = activity_processor.ActivityProcessor()
@@ -179,7 +179,7 @@ class ActivityHandler(object):
def on_resume(self):
if self.is_valid_session():
- logger.debug(u"Tautulli ActivityHandler :: Session %s resumed." % str(self.get_session_key()))
+ logger.debug("Tautulli ActivityHandler :: Session %s resumed." % str(self.get_session_key()))
# Set the session last_paused timestamp
ap = activity_processor.ActivityProcessor()
@@ -195,7 +195,7 @@ class ActivityHandler(object):
def on_change(self):
if self.is_valid_session():
- logger.debug(u"Tautulli ActivityHandler :: Session %s has changed transcode decision." % str(self.get_session_key()))
+ logger.debug("Tautulli ActivityHandler :: Session %s has changed transcode decision." % str(self.get_session_key()))
# Update the session state and viewOffset
self.update_db_session()
@@ -208,7 +208,7 @@ class ActivityHandler(object):
def on_buffer(self):
if self.is_valid_session():
- logger.debug(u"Tautulli ActivityHandler :: Session %s is buffering." % self.get_session_key())
+ logger.debug("Tautulli ActivityHandler :: Session %s is buffering." % self.get_session_key())
ap = activity_processor.ActivityProcessor()
db_stream = ap.get_session_by_key(session_key=self.get_session_key())
@@ -217,7 +217,7 @@ class ActivityHandler(object):
# Get our current buffer count
current_buffer_count = ap.get_session_buffer_count(self.get_session_key())
- logger.debug(u"Tautulli ActivityHandler :: Session %s buffer count is %s." %
+ logger.debug("Tautulli ActivityHandler :: Session %s buffer count is %s." %
(self.get_session_key(), current_buffer_count))
# Get our last triggered time
@@ -228,7 +228,7 @@ class ActivityHandler(object):
time_since_last_trigger = None
if buffer_last_triggered:
- logger.debug(u"Tautulli ActivityHandler :: Session %s buffer last triggered at %s." %
+ logger.debug("Tautulli ActivityHandler :: Session %s buffer last triggered at %s." %
(self.get_session_key(), buffer_last_triggered))
time_since_last_trigger = int(time.time()) - int(buffer_last_triggered)
@@ -318,7 +318,7 @@ class ActivityHandler(object):
}
if progress_percent >= watched_percent.get(db_session['media_type'], 101):
- logger.debug(u"Tautulli ActivityHandler :: Session %s watched."
+ logger.debug("Tautulli ActivityHandler :: Session %s watched."
% str(self.get_session_key()))
ap.set_watched(session_key=self.get_session_key())
@@ -413,7 +413,7 @@ class TimelineHandler(object):
RECENTLY_ADDED_QUEUE[rating_key] = set([grandparent_rating_key])
- logger.debug(u"Tautulli TimelineHandler :: Library item '%s' (%s, grandparent %s) added to recently added queue."
+ logger.debug("Tautulli TimelineHandler :: Library item '%s' (%s, grandparent %s) added to recently added queue."
% (title, str(rating_key), str(grandparent_rating_key)))
# Schedule a callback to clear the recently added queue
@@ -432,7 +432,7 @@ class TimelineHandler(object):
parent_set.add(rating_key)
RECENTLY_ADDED_QUEUE[parent_rating_key] = parent_set
- logger.debug(u"Tautulli TimelineHandler :: Library item '%s' (%s , parent %s) added to recently added queue."
+ logger.debug("Tautulli TimelineHandler :: Library item '%s' (%s , parent %s) added to recently added queue."
% (title, str(rating_key), str(parent_rating_key)))
# Schedule a callback to clear the recently added queue
@@ -445,7 +445,7 @@ class TimelineHandler(object):
queue_set = RECENTLY_ADDED_QUEUE.get(rating_key, set())
RECENTLY_ADDED_QUEUE[rating_key] = queue_set
- logger.debug(u"Tautulli TimelineHandler :: Library item '%s' (%s) added to recently added queue."
+ logger.debug("Tautulli TimelineHandler :: Library item '%s' (%s) added to recently added queue."
% (title, str(rating_key)))
# Schedule a callback to clear the recently added queue
@@ -459,13 +459,13 @@ class TimelineHandler(object):
state_type == 5 and metadata_state is None and queue_size is None and \
rating_key in RECENTLY_ADDED_QUEUE:
- logger.debug(u"Tautulli TimelineHandler :: Library item '%s' (%s) done processing metadata."
+ logger.debug("Tautulli TimelineHandler :: Library item '%s' (%s) done processing metadata."
% (title, str(rating_key)))
# An item was deleted, make sure it is removed from the queue
elif state_type == 9 and metadata_state == 'deleted':
if rating_key in RECENTLY_ADDED_QUEUE and not RECENTLY_ADDED_QUEUE[rating_key]:
- logger.debug(u"Tautulli TimelineHandler :: Library item %s removed from recently added queue."
+ logger.debug("Tautulli TimelineHandler :: Library item %s removed from recently added queue."
% str(rating_key))
del_keys(rating_key)
@@ -505,7 +505,7 @@ def force_stop_stream(session_key, title, user):
if row_id:
# If session is written to the database successfully, remove the session from the session table
- logger.info(u"Tautulli ActivityHandler :: Removing stale stream with sessionKey %s ratingKey %s from session queue"
+ logger.info("Tautulli ActivityHandler :: Removing stale stream with sessionKey %s ratingKey %s from session queue"
% (session['session_key'], session['rating_key']))
ap.delete_session(row_id=row_id)
delete_metadata_cache(session_key)
@@ -514,7 +514,7 @@ def force_stop_stream(session_key, title, user):
session['write_attempts'] += 1
if session['write_attempts'] < plexpy.CONFIG.SESSION_DB_WRITE_ATTEMPTS:
- logger.warn(u"Tautulli ActivityHandler :: Failed to write stream with sessionKey %s ratingKey %s to the database. " \
+ logger.warn("Tautulli ActivityHandler :: Failed to write stream with sessionKey %s ratingKey %s to the database. " \
"Will try again in 30 seconds. Write attempt %s."
% (session['session_key'], session['rating_key'], str(session['write_attempts'])))
ap.increment_write_attempts(session_key=session_key)
@@ -524,10 +524,10 @@ def force_stop_stream(session_key, title, user):
args=[session_key, session['full_title'], session['user']], seconds=30)
else:
- logger.warn(u"Tautulli ActivityHandler :: Failed to write stream with sessionKey %s ratingKey %s to the database. " \
+ logger.warn("Tautulli ActivityHandler :: Failed to write stream with sessionKey %s ratingKey %s to the database. " \
"Removing session from the database. Write attempt %s."
% (session['session_key'], session['rating_key'], str(session['write_attempts'])))
- logger.info(u"Tautulli ActivityHandler :: Removing stale stream with sessionKey %s ratingKey %s from session queue"
+ logger.info("Tautulli ActivityHandler :: Removing stale stream with sessionKey %s ratingKey %s from session queue"
% (session['session_key'], session['rating_key']))
ap.delete_session(session_key=session_key)
delete_metadata_cache(session_key)
@@ -561,7 +561,7 @@ def clear_recently_added_queue(rating_key, title):
def on_created(rating_key, **kwargs):
- logger.debug(u"Tautulli TimelineHandler :: Library item %s added to Plex." % str(rating_key))
+ logger.debug("Tautulli TimelineHandler :: Library item %s added to Plex." % str(rating_key))
pms_connect = pmsconnect.PmsConnect()
metadata = pms_connect.get_metadata_details(rating_key)
@@ -570,14 +570,14 @@ def on_created(rating_key, **kwargs):
# now = int(time.time())
#
# if helpers.cast_to_int(metadata['added_at']) < now - 86400: # Updated more than 24 hours ago
- # logger.debug(u"Tautulli TimelineHandler :: Library item %s added more than 24 hours ago. Not notifying."
+ # logger.debug("Tautulli TimelineHandler :: Library item %s added more than 24 hours ago. Not notifying."
# % str(rating_key))
# notify = False
data_factory = datafactory.DataFactory()
if 'child_keys' not in kwargs:
if data_factory.get_recently_added_item(rating_key):
- logger.debug(u"Tautulli TimelineHandler :: Library item %s added already. Not notifying again."
+ logger.debug("Tautulli TimelineHandler :: Library item %s added already. Not notifying again."
% str(rating_key))
notify = False
@@ -593,15 +593,15 @@ def on_created(rating_key, **kwargs):
for key in all_keys:
data_factory.set_recently_added_item(key)
- logger.debug(u"Added %s items to the recently_added database table." % str(len(all_keys)))
+ logger.debug("Added %s items to the recently_added database table." % str(len(all_keys)))
else:
- logger.error(u"Tautulli TimelineHandler :: Unable to retrieve metadata for rating_key %s" % str(rating_key))
+ logger.error("Tautulli TimelineHandler :: Unable to retrieve metadata for rating_key %s" % str(rating_key))
def delete_metadata_cache(session_key):
try:
os.remove(os.path.join(plexpy.CONFIG.CACHE_DIR, 'session_metadata/metadata-sessionKey-%s.json' % session_key))
except OSError as e:
- logger.error(u"Tautulli ActivityHandler :: Failed to remove metadata cache file (sessionKey %s): %s"
+ logger.error("Tautulli ActivityHandler :: Failed to remove metadata cache file (sessionKey %s): %s"
% (session_key, e))
diff --git a/plexpy/activity_pinger.py b/plexpy/activity_pinger.py
index 073a0323..21616f76 100644
--- a/plexpy/activity_pinger.py
+++ b/plexpy/activity_pinger.py
@@ -48,7 +48,7 @@ def check_active_sessions(ws_request=False):
pms_connect = pmsconnect.PmsConnect()
session_list = pms_connect.get_current_activity()
- logger.debug(u"Tautulli Monitor :: Checking for active streams.")
+ logger.debug("Tautulli Monitor :: Checking for active streams.")
if session_list:
media_container = session_list['sessions']
@@ -65,12 +65,12 @@ def check_active_sessions(ws_request=False):
# Here we can check the play states
if session['state'] != stream['state']:
if session['state'] == 'paused':
- logger.debug(u"Tautulli Monitor :: Session %s paused." % stream['session_key'])
+ logger.debug("Tautulli Monitor :: Session %s paused." % stream['session_key'])
plexpy.NOTIFY_QUEUE.put({'stream_data': stream.copy(), 'notify_action': 'on_pause'})
if session['state'] == 'playing' and stream['state'] == 'paused':
- logger.debug(u"Tautulli Monitor :: Session %s resumed." % stream['session_key'])
+ logger.debug("Tautulli Monitor :: Session %s resumed." % stream['session_key'])
plexpy.NOTIFY_QUEUE.put({'stream_data': stream.copy(), 'notify_action': 'on_resume'})
@@ -102,7 +102,7 @@ def check_active_sessions(ws_request=False):
# Push it on it's own thread so we don't hold up our db actions
# Our first buffer notification
if buffer_values[0]['buffer_count'] == plexpy.CONFIG.BUFFER_THRESHOLD:
- logger.info(u"Tautulli Monitor :: User '%s' has triggered a buffer warning."
+ logger.info("Tautulli Monitor :: User '%s' has triggered a buffer warning."
% stream['user'])
# Set the buffer trigger time
monitor_db.action('UPDATE sessions '
@@ -116,7 +116,7 @@ def check_active_sessions(ws_request=False):
# Subsequent buffer notifications after wait time
if int(time.time()) > buffer_values[0]['buffer_last_triggered'] + \
plexpy.CONFIG.BUFFER_WAIT:
- logger.info(u"Tautulli Monitor :: User '%s' has triggered multiple buffer warnings."
+ logger.info("Tautulli Monitor :: User '%s' has triggered multiple buffer warnings."
% stream['user'])
# Set the buffer trigger time
monitor_db.action('UPDATE sessions '
@@ -126,7 +126,7 @@ def check_active_sessions(ws_request=False):
plexpy.NOTIFY_QUEUE.put({'stream_data': stream.copy(), 'notify_action': 'on_buffer'})
- logger.debug(u"Tautulli Monitor :: Session %s is buffering. Count is now %s. Last triggered %s."
+ logger.debug("Tautulli Monitor :: Session %s is buffering. Count is now %s. Last triggered %s."
% (stream['session_key'],
buffer_values[0]['buffer_count'],
buffer_values[0]['buffer_last_triggered']))
@@ -146,7 +146,7 @@ def check_active_sessions(ws_request=False):
else:
# The user has stopped playing a stream
if stream['state'] != 'stopped':
- logger.debug(u"Tautulli Monitor :: Session %s stopped." % stream['session_key'])
+ logger.debug("Tautulli Monitor :: Session %s stopped." % stream['session_key'])
if not stream['stopped']:
# Set the stream stop time
@@ -170,22 +170,22 @@ def check_active_sessions(ws_request=False):
if row_id:
# If session is written to the databaase successfully, remove the session from the session table
- logger.debug(u"Tautulli Monitor :: Removing sessionKey %s ratingKey %s from session queue"
+ logger.debug("Tautulli Monitor :: Removing sessionKey %s ratingKey %s from session queue"
% (stream['session_key'], stream['rating_key']))
monitor_process.delete_session(row_id=row_id)
else:
stream['write_attempts'] += 1
if stream['write_attempts'] < plexpy.CONFIG.SESSION_DB_WRITE_ATTEMPTS:
- logger.warn(u"Tautulli Monitor :: Failed to write sessionKey %s ratingKey %s to the database. " \
+ logger.warn("Tautulli Monitor :: Failed to write sessionKey %s ratingKey %s to the database. " \
"Will try again on the next pass. Write attempt %s."
% (stream['session_key'], stream['rating_key'], str(stream['write_attempts'])))
monitor_process.increment_write_attempts(session_key=stream['session_key'])
else:
- logger.warn(u"Tautulli Monitor :: Failed to write sessionKey %s ratingKey %s to the database. " \
+ logger.warn("Tautulli Monitor :: Failed to write sessionKey %s ratingKey %s to the database. " \
"Removing session from the database. Write attempt %s."
% (stream['session_key'], stream['rating_key'], str(stream['write_attempts'])))
- logger.debug(u"Tautulli Monitor :: Removing sessionKey %s ratingKey %s from session queue"
+ logger.debug("Tautulli Monitor :: Removing sessionKey %s ratingKey %s from session queue"
% (stream['session_key'], stream['rating_key']))
monitor_process.delete_session(session_key=stream['session_key'])
@@ -194,11 +194,11 @@ def check_active_sessions(ws_request=False):
new_session = monitor_process.write_session(session)
if new_session:
- logger.debug(u"Tautulli Monitor :: Session %s started by user %s with ratingKey %s."
+ logger.debug("Tautulli Monitor :: Session %s started by user %s with ratingKey %s."
% (session['session_key'], session['user_id'], session['rating_key']))
else:
- logger.debug(u"Tautulli Monitor :: Unable to read session list.")
+ logger.debug("Tautulli Monitor :: Unable to read session list.")
def check_recently_added():
@@ -230,13 +230,13 @@ def check_recently_added():
if metadata:
metadata = [metadata]
else:
- logger.error(u"Tautulli Monitor :: Unable to retrieve metadata for rating_key %s" \
+ logger.error("Tautulli Monitor :: Unable to retrieve metadata for rating_key %s" \
% str(item['rating_key']))
else:
metadata = pms_connect.get_metadata_children_details(item['rating_key'])
if not metadata:
- logger.error(u"Tautulli Monitor :: Unable to retrieve children metadata for rating_key %s" \
+ logger.error("Tautulli Monitor :: Unable to retrieve children metadata for rating_key %s" \
% str(item['rating_key']))
if metadata:
@@ -247,7 +247,7 @@ def check_recently_added():
library_details = library_data.get_details(section_id=item['section_id'])
if 0 < time_threshold - int(item['added_at']) <= time_interval:
- logger.debug(u"Tautulli Monitor :: Library item %s added to Plex." % str(item['rating_key']))
+ logger.debug("Tautulli Monitor :: Library item %s added to Plex." % str(item['rating_key']))
plexpy.NOTIFY_QUEUE.put({'timeline_data': item.copy(), 'notify_action': 'on_created'})
@@ -261,10 +261,10 @@ def check_recently_added():
if metadata:
item = metadata
else:
- logger.error(u"Tautulli Monitor :: Unable to retrieve grandparent metadata for grandparent_rating_key %s" \
+ logger.error("Tautulli Monitor :: Unable to retrieve grandparent metadata for grandparent_rating_key %s" \
% str(item['rating_key']))
- logger.debug(u"Tautulli Monitor :: Library item %s added to Plex." % str(item['rating_key']))
+ logger.debug("Tautulli Monitor :: Library item %s added to Plex." % str(item['rating_key']))
# Check if any notification agents have notifications enabled
plexpy.NOTIFY_QUEUE.put({'timeline_data': item.copy(), 'notify_action': 'on_created'})
@@ -273,19 +273,19 @@ def check_recently_added():
def connect_server(log=True, startup=False):
if plexpy.CONFIG.PMS_IS_CLOUD:
if log:
- logger.info(u"Tautulli Monitor :: Checking for Plex Cloud server status...")
+ logger.info("Tautulli Monitor :: Checking for Plex Cloud server status...")
plex_tv = plextv.PlexTV()
status = plex_tv.get_cloud_server_status()
if status is True:
- logger.info(u"Tautulli Monitor :: Plex Cloud server is active.")
+ logger.info("Tautulli Monitor :: Plex Cloud server is active.")
elif status is False:
if log:
- logger.info(u"Tautulli Monitor :: Plex Cloud server is sleeping.")
+ logger.info("Tautulli Monitor :: Plex Cloud server is sleeping.")
else:
if log:
- logger.error(u"Tautulli Monitor :: Failed to retrieve Plex Cloud server status.")
+ logger.error("Tautulli Monitor :: Failed to retrieve Plex Cloud server status.")
if not status and startup:
web_socket.on_disconnect()
@@ -295,12 +295,12 @@ def connect_server(log=True, startup=False):
if status:
if log and not startup:
- logger.info(u"Tautulli Monitor :: Attempting to reconnect Plex server...")
+ logger.info("Tautulli Monitor :: Attempting to reconnect Plex server...")
try:
web_socket.start_thread()
except Exception as e:
- logger.error(u"Websocket :: Unable to open connection: %s." % e)
+ logger.error("Websocket :: Unable to open connection: %s." % e)
def check_server_access():
@@ -319,17 +319,17 @@ def check_server_access():
# Check if the port is mapped
if not mapping_state == 'mapped':
ext_ping_count += 1
- logger.warn(u"Tautulli Monitor :: Plex remote access port not mapped, ping attempt %s." \
+ logger.warn("Tautulli Monitor :: Plex remote access port not mapped, ping attempt %s." \
% str(ext_ping_count))
# Check if the port is open
elif mapping_error == 'unreachable':
ext_ping_count += 1
- logger.warn(u"Tautulli Monitor :: Plex remote access port mapped, but mapping failed, ping attempt %s." \
+ logger.warn("Tautulli Monitor :: Plex remote access port mapped, but mapping failed, ping attempt %s." \
% str(ext_ping_count))
# Reset external ping counter
else:
if ext_ping_count >= plexpy.CONFIG.REMOTE_ACCESS_PING_THRESHOLD:
- logger.info(u"Tautulli Monitor :: Plex remote access is back up.")
+ logger.info("Tautulli Monitor :: Plex remote access is back up.")
plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_extup'})
@@ -342,18 +342,18 @@ def check_server_access():
def check_server_updates():
with monitor_lock:
- logger.info(u"Tautulli Monitor :: Checking for PMS updates...")
+ logger.info("Tautulli Monitor :: Checking for PMS updates...")
plex_tv = plextv.PlexTV()
download_info = plex_tv.get_plex_downloads()
if download_info:
- logger.info(u"Tautulli Monitor :: Current PMS version: %s", plexpy.CONFIG.PMS_VERSION)
+ logger.info("Tautulli Monitor :: Current PMS version: %s", plexpy.CONFIG.PMS_VERSION)
if download_info['update_available']:
- logger.info(u"Tautulli Monitor :: PMS update available version: %s", download_info['version'])
+ logger.info("Tautulli Monitor :: PMS update available version: %s", download_info['version'])
plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_pmsupdate', 'pms_download_info': download_info})
else:
- logger.info(u"Tautulli Monitor :: No PMS update available.")
+ logger.info("Tautulli Monitor :: No PMS update available.")
diff --git a/plexpy/activity_processor.py b/plexpy/activity_processor.py
index 7bccda02..935894e8 100644
--- a/plexpy/activity_processor.py
+++ b/plexpy/activity_processor.py
@@ -188,8 +188,8 @@ class ActivityProcessor(object):
if str(session['rating_key']).isdigit() and session['media_type'] in ('movie', 'episode', 'track'):
logging_enabled = True
else:
- logger.debug(u"Tautulli ActivityProcessor :: Session %s ratingKey %s not logged. "
- u"Does not meet logging criteria. Media type is '%s'" %
+ logger.debug("Tautulli ActivityProcessor :: Session %s ratingKey %s not logged. "
+ "Does not meet logging criteria. Media type is '%s'" %
(session['session_key'], session['rating_key'], session['media_type']))
return session['id']
@@ -202,36 +202,36 @@ class ActivityProcessor(object):
if (session['media_type'] == 'movie' or session['media_type'] == 'episode') and \
(real_play_time < int(plexpy.CONFIG.LOGGING_IGNORE_INTERVAL)):
logging_enabled = False
- logger.debug(u"Tautulli ActivityProcessor :: Play duration for session %s ratingKey %s is %s secs "
- u"which is less than %s seconds, so we're not logging it." %
+ logger.debug("Tautulli ActivityProcessor :: Play duration for session %s ratingKey %s is %s secs "
+ "which is less than %s seconds, so we're not logging it." %
(session['session_key'], session['rating_key'], str(real_play_time),
plexpy.CONFIG.LOGGING_IGNORE_INTERVAL))
if not is_import and session['media_type'] == 'track':
if real_play_time < 15 and session['duration'] >= 30:
logging_enabled = False
- logger.debug(u"Tautulli ActivityProcessor :: Play duration for session %s ratingKey %s is %s secs, "
- u"looks like it was skipped so we're not logging it" %
+ logger.debug("Tautulli ActivityProcessor :: Play duration for session %s ratingKey %s is %s secs, "
+ "looks like it was skipped so we're not logging it" %
(session['session_key'], session['rating_key'], str(real_play_time)))
elif is_import and import_ignore_interval:
if (session['media_type'] == 'movie' or session['media_type'] == 'episode') and \
(real_play_time < int(import_ignore_interval)):
logging_enabled = False
- logger.debug(u"Tautulli ActivityProcessor :: Play duration for ratingKey %s is %s secs which is less than %s "
- u"seconds, so we're not logging it." %
+ logger.debug("Tautulli ActivityProcessor :: Play duration for ratingKey %s is %s secs which is less than %s "
+ "seconds, so we're not logging it." %
(session['rating_key'], str(real_play_time), import_ignore_interval))
if not is_import and not user_details['keep_history']:
logging_enabled = False
- logger.debug(u"Tautulli ActivityProcessor :: History logging for user '%s' is disabled." % user_details['username'])
+ logger.debug("Tautulli ActivityProcessor :: History logging for user '%s' is disabled." % user_details['username'])
elif not is_import and not library_details['keep_history']:
logging_enabled = False
- logger.debug(u"Tautulli ActivityProcessor :: History logging for library '%s' is disabled." % library_details['section_name'])
+ logger.debug("Tautulli ActivityProcessor :: History logging for library '%s' is disabled." % library_details['section_name'])
if logging_enabled:
# Fetch metadata first so we can return false if it fails
if not is_import:
- logger.debug(u"Tautulli ActivityProcessor :: Fetching metadata for item ratingKey %s" % session['rating_key'])
+ logger.debug("Tautulli ActivityProcessor :: Fetching metadata for item ratingKey %s" % session['rating_key'])
pms_connect = pmsconnect.PmsConnect()
metadata = pms_connect.get_metadata_details(rating_key=str(session['rating_key']))
if not metadata:
@@ -245,7 +245,7 @@ class ActivityProcessor(object):
## TODO: Fix media info from imports. Temporary media info from import session.
media_info = session
- # logger.debug(u"Tautulli ActivityProcessor :: Attempting to write sessionKey %s to session_history table..."
+ # logger.debug("Tautulli ActivityProcessor :: Attempting to write sessionKey %s to session_history table..."
# % session['session_key'])
keys = {'id': None}
values = {'started': session['started'],
@@ -273,7 +273,7 @@ class ActivityProcessor(object):
'relayed': session['relayed']
}
- # logger.debug(u"Tautulli ActivityProcessor :: Writing sessionKey %s session_history transaction..."
+ # logger.debug("Tautulli ActivityProcessor :: Writing sessionKey %s session_history transaction..."
# % session['session_key'])
self.db.upsert(table_name='session_history', key_dict=keys, value_dict=values)
@@ -326,12 +326,12 @@ class ActivityProcessor(object):
self.db.action(query=query, args=args)
- # logger.debug(u"Tautulli ActivityProcessor :: Successfully written history item, last id for session_history is %s"
+ # logger.debug("Tautulli ActivityProcessor :: Successfully written history item, last id for session_history is %s"
# % last_id)
# Write the session_history_media_info table
- # logger.debug(u"Tautulli ActivityProcessor :: Attempting to write to sessionKey %s session_history_media_info table..."
+ # logger.debug("Tautulli ActivityProcessor :: Attempting to write to sessionKey %s session_history_media_info table..."
# % session['session_key'])
keys = {'id': last_id}
values = {'rating_key': session['rating_key'],
@@ -403,7 +403,7 @@ class ActivityProcessor(object):
'optimized_version_title': session['optimized_version_title']
}
- # logger.debug(u"Tautulli ActivityProcessor :: Writing sessionKey %s session_history_media_info transaction..."
+ # logger.debug("Tautulli ActivityProcessor :: Writing sessionKey %s session_history_media_info transaction..."
# % session['session_key'])
self.db.upsert(table_name='session_history_media_info', key_dict=keys, value_dict=values)
@@ -414,7 +414,7 @@ class ActivityProcessor(object):
genres = ";".join(metadata['genres'])
labels = ";".join(metadata['labels'])
- # logger.debug(u"Tautulli ActivityProcessor :: Attempting to write to sessionKey %s session_history_metadata table..."
+ # logger.debug("Tautulli ActivityProcessor :: Attempting to write to sessionKey %s session_history_metadata table..."
# % session['session_key'])
keys = {'id': last_id}
values = {'rating_key': session['rating_key'],
@@ -452,7 +452,7 @@ class ActivityProcessor(object):
'labels': labels
}
- # logger.debug(u"Tautulli ActivityProcessor :: Writing sessionKey %s session_history_metadata transaction..."
+ # logger.debug("Tautulli ActivityProcessor :: Writing sessionKey %s session_history_metadata transaction..."
# % session['session_key'])
self.db.upsert(table_name='session_history_metadata', key_dict=keys, value_dict=values)
diff --git a/plexpy/api2.py b/plexpy/api2.py
index 8d23982d..27843a85 100644
--- a/plexpy/api2.py
+++ b/plexpy/api2.py
@@ -142,9 +142,9 @@ class API2:
self._api_kwargs = kwargs
if self._api_msg:
- logger.api_debug(u'Tautulli APIv2 :: %s.' % self._api_msg)
+ logger.api_debug('Tautulli APIv2 :: %s.' % self._api_msg)
- logger.api_debug(u'Tautulli APIv2 :: Cleaned kwargs: %s' % self._api_kwargs)
+ logger.api_debug('Tautulli APIv2 :: Cleaned kwargs: %s' % self._api_kwargs)
return self._api_kwargs
@@ -182,7 +182,7 @@ class API2:
end = int(end)
if regex:
- logger.api_debug(u"Tautulli APIv2 :: Filtering log using regex '%s'" % regex)
+ logger.api_debug("Tautulli APIv2 :: Filtering log using regex '%s'" % regex)
reg = re.compile(regex, flags=re.I)
with open(logfile, 'r') as f:
@@ -218,15 +218,15 @@ class API2:
templog = templog[::-1]
if end > 0 or start > 0:
- logger.api_debug(u"Tautulli APIv2 :: Slicing the log from %s to %s" % (start, end))
+ logger.api_debug("Tautulli APIv2 :: Slicing the log from %s to %s" % (start, end))
templog = templog[start:end]
if sort:
- logger.api_debug(u"Tautulli APIv2 :: Sorting log based on '%s'" % sort)
+ logger.api_debug("Tautulli APIv2 :: Sorting log based on '%s'" % sort)
templog = sorted(templog, key=lambda k: k[sort])
if search:
- logger.api_debug(u"Tautulli APIv2 :: Searching log values for '%s'" % search)
+ logger.api_debug("Tautulli APIv2 :: Searching log values for '%s'" % search)
tt = [d for d in templog for k, v in d.items() if search.lower() in v.lower()]
if len(tt):
@@ -235,7 +235,7 @@ class API2:
if regex:
tt = []
for l in templog:
- stringdict = ' '.join(u'{}{}'.format(k, v) for k, v in l.items())
+ stringdict = ' '.join('{}{}'.format(k, v) for k, v in l.items())
if reg.search(stringdict):
tt.append(l)
@@ -440,7 +440,7 @@ class API2:
self._api_result_type = 'error'
return
- logger.api_debug(u'Tautulli APIv2 :: Sending notification.')
+ logger.api_debug('Tautulli APIv2 :: Sending notification.')
success = notification_handler.notify(notifier_id=notifier_id,
notify_action='api',
subject=subject,
@@ -484,7 +484,7 @@ class API2:
self._api_result_type = 'error'
return
- logger.api_debug(u'Tautulli APIv2 :: Sending newsletter.')
+ logger.api_debug('Tautulli APIv2 :: Sending newsletter.')
success = newsletter_handler.notify(newsletter_id=newsletter_id,
notify_action='api',
subject=subject,
@@ -628,7 +628,7 @@ General optional parameters:
out = self._api_callback + '(' + out + ');'
# if we fail to generate the output fake an error
except Exception as e:
- logger.api_exception(u'Tautulli APIv2 :: ' + traceback.format_exc())
+ logger.api_exception('Tautulli APIv2 :: ' + traceback.format_exc())
self._api_response_code = 500
out['message'] = traceback.format_exc()
out['result'] = 'error'
@@ -638,7 +638,7 @@ General optional parameters:
try:
out = xmltodict.unparse(out, pretty=True)
except Exception as e:
- logger.api_error(u'Tautulli APIv2 :: Failed to parse xml result')
+ logger.api_error('Tautulli APIv2 :: Failed to parse xml result')
self._api_response_code = 500
try:
out['message'] = e
@@ -646,7 +646,7 @@ General optional parameters:
out = xmltodict.unparse(out, pretty=True)
except Exception as e:
- logger.api_error(u'Tautulli APIv2 :: Failed to parse xml result error message %s' % e)
+ logger.api_error('Tautulli APIv2 :: Failed to parse xml result error message %s' % e)
out = '''
%s
@@ -661,7 +661,7 @@ General optional parameters:
""" handles the stuff from the handler """
result = {}
- logger.api_debug(u'Tautulli APIv2 :: API called with kwargs: %s' % kwargs)
+ logger.api_debug('Tautulli APIv2 :: API called with kwargs: %s' % kwargs)
self._api_validate(**kwargs)
@@ -679,7 +679,7 @@ General optional parameters:
result = call(**self._api_kwargs)
except Exception as e:
- logger.api_error(u'Tautulli APIv2 :: Failed to run %s with %s: %s' % (self._api_cmd, self._api_kwargs, e))
+ logger.api_error('Tautulli APIv2 :: Failed to run %s with %s: %s' % (self._api_cmd, self._api_kwargs, e))
self._api_response_code = 500
if self._api_debug:
cherrypy.request.show_tracebacks = True
diff --git a/plexpy/config.py b/plexpy/config.py
index 1b431e3c..11f57bae 100644
--- a/plexpy/config.py
+++ b/plexpy/config.py
@@ -661,13 +661,13 @@ def make_backup(cleanup=False, scheduler=False):
try:
os.remove(file_)
except OSError as e:
- logger.error(u"Tautulli Config :: Failed to delete %s from the backup folder: %s" % (file_, e))
+ logger.error("Tautulli Config :: Failed to delete %s from the backup folder: %s" % (file_, e))
if backup_file in os.listdir(backup_folder):
- logger.debug(u"Tautulli Config :: Successfully backed up %s to %s" % (plexpy.CONFIG_FILE, backup_file))
+ logger.debug("Tautulli Config :: Successfully backed up %s to %s" % (plexpy.CONFIG_FILE, backup_file))
return True
else:
- logger.error(u"Tautulli Config :: Failed to backup %s to %s" % (plexpy.CONFIG_FILE, backup_file))
+ logger.error("Tautulli Config :: Failed to backup %s to %s" % (plexpy.CONFIG_FILE, backup_file))
return False
@@ -748,12 +748,12 @@ class Config(object):
new_config[section][ini_key] = self._config[section][ini_key]
# Write it to file
- logger.info(u"Tautulli Config :: Writing configuration to file")
+ logger.info("Tautulli Config :: Writing configuration to file")
try:
new_config.write()
except IOError as e:
- logger.error(u"Tautulli Config :: Error writing configuration file: %s", e)
+ logger.error("Tautulli Config :: Error writing configuration file: %s", e)
self._blacklist()
diff --git a/plexpy/database.py b/plexpy/database.py
index a6a34bfe..1e1f23d5 100644
--- a/plexpy/database.py
+++ b/plexpy/database.py
@@ -39,7 +39,7 @@ def drop_session_db():
def clear_history_tables():
- logger.debug(u"Tautulli Database :: Deleting all session_history records... No turning back now bub.")
+ logger.debug("Tautulli Database :: Deleting all session_history records... No turning back now bub.")
monitor_db = MonitorDatabase()
monitor_db.action('DELETE FROM session_history')
monitor_db.action('DELETE FROM session_history_media_info')
@@ -48,7 +48,7 @@ def clear_history_tables():
def delete_sessions():
- logger.debug(u"Tautulli Database :: Clearing temporary sessions from database.")
+ logger.debug("Tautulli Database :: Clearing temporary sessions from database.")
monitor_db = MonitorDatabase()
try:
@@ -56,7 +56,7 @@ def delete_sessions():
monitor_db.action('VACUUM')
return True
except Exception as e:
- logger.warn(u"Tautulli Database :: Unable to clear temporary sessions from database: %s." % e)
+ logger.warn("Tautulli Database :: Unable to clear temporary sessions from database: %s." % e)
return False
@@ -103,13 +103,13 @@ def make_backup(cleanup=False, scheduler=False):
try:
os.remove(file_)
except OSError as e:
- logger.error(u"Tautulli Database :: Failed to delete %s from the backup folder: %s" % (file_, e))
+ logger.error("Tautulli Database :: Failed to delete %s from the backup folder: %s" % (file_, e))
if backup_file in os.listdir(backup_folder):
- logger.debug(u"Tautulli Database :: Successfully backed up %s to %s" % (db_filename(), backup_file))
+ logger.debug("Tautulli Database :: Successfully backed up %s to %s" % (db_filename(), backup_file))
return True
else:
- logger.error(u"Tautulli Database :: Failed to backup %s to %s" % (db_filename(), backup_file))
+ logger.error("Tautulli Database :: Failed to backup %s to %s" % (db_filename(), backup_file))
return False
@@ -162,15 +162,15 @@ class MonitorDatabase(object):
except sqlite3.OperationalError as e:
if "unable to open database file" in e or "database is locked" in e:
- logger.warn(u"Tautulli Database :: Database Error: %s", e)
+ logger.warn("Tautulli Database :: Database Error: %s", e)
attempts += 1
time.sleep(1)
else:
- logger.error(u"Tautulli Database :: Database error: %s", e)
+ logger.error("Tautulli Database :: Database error: %s", e)
raise
except sqlite3.DatabaseError as e:
- logger.error(u"Tautulli Database :: Fatal Error executing %s :: %s", query, e)
+ logger.error("Tautulli Database :: Fatal Error executing %s :: %s", query, e)
raise
return sql_result
@@ -214,7 +214,7 @@ class MonitorDatabase(object):
try:
self.action(insert_query, value_dict.values() + key_dict.values())
except sqlite3.IntegrityError:
- logger.info(u"Tautulli Database :: Queries failed: %s and %s", update_query, insert_query)
+ logger.info("Tautulli Database :: Queries failed: %s and %s", update_query, insert_query)
# We want to know if it was an update or insert
return trans_type
diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py
index ef925eb7..f847410b 100644
--- a/plexpy/datafactory.py
+++ b/plexpy/datafactory.py
@@ -176,7 +176,7 @@ class DataFactory(object):
['session_history.id', 'session_history_media_info.id']],
kwargs=kwargs)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_history: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_history: %s." % e)
return {'recordsFiltered': 0,
'recordsTotal': 0,
'draw': 0,
@@ -302,7 +302,7 @@ class DataFactory(object):
'LIMIT %s ' % (time_range, group_by, sort_type, stats_count)
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_home_stats: top_movies: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_home_stats: top_movies: %s." % e)
return None
for item in result:
@@ -353,7 +353,7 @@ class DataFactory(object):
'LIMIT %s ' % (time_range, group_by, sort_type, stats_count)
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_home_stats: popular_movies: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_home_stats: popular_movies: %s." % e)
return None
for item in result:
@@ -400,7 +400,7 @@ class DataFactory(object):
'LIMIT %s ' % (time_range, group_by, sort_type, stats_count)
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_home_stats: top_tv: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_home_stats: top_tv: %s." % e)
return None
for item in result:
@@ -450,7 +450,7 @@ class DataFactory(object):
'LIMIT %s ' % (time_range, group_by, sort_type, stats_count)
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_home_stats: popular_tv: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_home_stats: popular_tv: %s." % e)
return None
for item in result:
@@ -498,7 +498,7 @@ class DataFactory(object):
'LIMIT %s ' % (time_range, group_by, sort_type, stats_count)
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_home_stats: top_music: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_home_stats: top_music: %s." % e)
return None
for item in result:
@@ -549,7 +549,7 @@ class DataFactory(object):
'LIMIT %s ' % (time_range, group_by, sort_type, stats_count)
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_home_stats: popular_music: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_home_stats: popular_music: %s." % e)
return None
for item in result:
@@ -597,7 +597,7 @@ class DataFactory(object):
'LIMIT %s ' % (time_range, group_by, sort_type, stats_count)
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_home_stats: top_users: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_home_stats: top_users: %s." % e)
return None
for item in result:
@@ -649,7 +649,7 @@ class DataFactory(object):
'LIMIT %s ' % (time_range, group_by, sort_type, stats_count)
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_home_stats: top_platforms: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_home_stats: top_platforms: %s." % e)
return None
for item in result:
@@ -706,7 +706,7 @@ class DataFactory(object):
'LIMIT %s' % (time_range, group_by, movie_watched_percent, tv_watched_percent, stats_count)
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_home_stats: last_watched: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_home_stats: last_watched: %s." % e)
return None
for item in result:
@@ -812,7 +812,7 @@ class DataFactory(object):
if result:
most_concurrent.append(calc_most_concurrent(title, result))
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_home_stats: most_concurrent: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_home_stats: most_concurrent: %s." % e)
return None
home_stats.append({'stat_id': stat,
@@ -840,7 +840,7 @@ class DataFactory(object):
'ORDER BY section_type, count DESC, parent_count DESC, child_count DESC ' % ','.join(library_cards)
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_library_stats: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_library_stats: %s." % e)
return None
for item in result:
@@ -1103,7 +1103,7 @@ class DataFactory(object):
'%s ' % where
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_total_duration: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_total_duration: %s." % e)
return None
total_duration = 0
@@ -1126,7 +1126,7 @@ class DataFactory(object):
query = 'SELECT ip_address FROM sessions WHERE session_key = %d %s' % (int(session_key), user_cond)
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_session_ip: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_session_ip: %s." % e)
return ip_address
else:
return ip_address
@@ -1187,14 +1187,14 @@ class DataFactory(object):
'JOIN image_hash_lookup ON cloudinary_lookup.img_hash = image_hash_lookup.img_hash ' \
'%s %s' % (where, order_by)
else:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_img_info: "
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_img_info: "
"service not provided.")
return img_info
try:
img_info = monitor_db.select(query, args=args)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_img_info: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_img_info: %s." % e)
return img_info
@@ -1213,7 +1213,7 @@ class DataFactory(object):
values = {'cloudinary_title': img_title,
'cloudinary_url': img_url}
else:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for set_img_info: "
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for set_img_info: "
"service not provided.")
return
@@ -1226,7 +1226,7 @@ class DataFactory(object):
service = helpers.get_img_service()
if not rating_key and not delete_all:
- logger.error(u"Tautulli DataFactory :: Unable to delete hosted images: rating_key not provided.")
+ logger.error("Tautulli DataFactory :: Unable to delete hosted images: rating_key not provided.")
return False
where = ''
@@ -1249,7 +1249,7 @@ class DataFactory(object):
img_title=imgur_info['imgur_title'],
fallback=imgur_info['fallback'])
- logger.info(u"Tautulli DataFactory :: Deleting Imgur info%s from the database."
+ logger.info("Tautulli DataFactory :: Deleting Imgur info%s from the database."
% log_msg)
result = monitor_db.action('DELETE FROM imgur_lookup WHERE img_hash '
'IN (SELECT img_hash FROM image_hash_lookup %s)' % where,
@@ -1268,14 +1268,14 @@ class DataFactory(object):
for cloudinary_info in results:
helpers.delete_from_cloudinary(rating_key=cloudinary_info['rating_key'])
- logger.info(u"Tautulli DataFactory :: Deleting Cloudinary info%s from the database."
+ logger.info("Tautulli DataFactory :: Deleting Cloudinary info%s from the database."
% log_msg)
result = monitor_db.action('DELETE FROM cloudinary_lookup WHERE img_hash '
'IN (SELECT img_hash FROM image_hash_lookup %s)' % where,
args)
else:
- logger.error(u"Tautulli DataFactory :: Unable to delete hosted images: invalid service '%s' provided."
+ logger.error("Tautulli DataFactory :: Unable to delete hosted images: invalid service '%s' provided."
% service)
return service
@@ -1348,7 +1348,7 @@ class DataFactory(object):
lookup_info['musicbrainz_id'] = musicbrainz_info['musicbrainz_id']
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_lookup_info: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_lookup_info: %s." % e)
return lookup_info
@@ -1356,7 +1356,7 @@ class DataFactory(object):
monitor_db = database.MonitorDatabase()
if rating_key:
- logger.info(u"Tautulli DataFactory :: Deleting lookup info for '%s' (rating_key %s) from the database."
+ logger.info("Tautulli DataFactory :: Deleting lookup info for '%s' (rating_key %s) from the database."
% (title, rating_key))
result_tvmaze = monitor_db.action('DELETE FROM tvmaze_lookup WHERE rating_key = ?', [rating_key])
result_themoviedb = monitor_db.action('DELETE FROM themoviedb_lookup WHERE rating_key = ?', [rating_key])
@@ -1451,7 +1451,7 @@ class DataFactory(object):
grandparent_rating_key = result[0]['grandparent_rating_key']
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_rating_keys_list: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_rating_keys_list: %s." % e)
return {}
query = 'SELECT rating_key, parent_rating_key, grandparent_rating_key, title, parent_title, grandparent_title, ' \
@@ -1499,7 +1499,7 @@ class DataFactory(object):
monitor_db = database.MonitorDatabase()
if row_id.isdigit():
- logger.info(u"Tautulli DataFactory :: Deleting row id %s from the session history database." % row_id)
+ logger.info("Tautulli DataFactory :: Deleting row id %s from the session history database." % row_id)
session_history_del = \
monitor_db.action('DELETE FROM session_history WHERE id = ?', [row_id])
session_history_media_info_del = \
@@ -1532,7 +1532,7 @@ class DataFactory(object):
mapping = get_pairs(old_key_list, new_key_list)
if mapping:
- logger.info(u"Tautulli DataFactory :: Updating metadata in the database.")
+ logger.info("Tautulli DataFactory :: Updating metadata in the database.")
for old_key, new_key in mapping.iteritems():
metadata = pms_connect.get_metadata_details(new_key)
@@ -1581,7 +1581,7 @@ class DataFactory(object):
genres = ";".join(metadata['genres'])
labels = ";".join(metadata['labels'])
- #logger.info(u"Tautulli DataFactory :: Updating metadata in the database for rating key: %s." % new_rating_key)
+ #logger.info("Tautulli DataFactory :: Updating metadata in the database for rating key: %s." % new_rating_key)
monitor_db = database.MonitorDatabase()
# Update the session_history_metadata table
@@ -1635,7 +1635,7 @@ class DataFactory(object):
join_evals=[],
kwargs=kwargs)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_notification_log: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_notification_log: %s." % e)
return {'recordsFiltered': 0,
'recordsTotal': 0,
'draw': 0,
@@ -1680,12 +1680,12 @@ class DataFactory(object):
monitor_db = database.MonitorDatabase()
try:
- logger.info(u"Tautulli DataFactory :: Clearing notification logs from database.")
+ logger.info("Tautulli DataFactory :: Clearing notification logs from database.")
monitor_db.action('DELETE FROM notify_log')
monitor_db.action('VACUUM')
return True
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for delete_notification_log: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for delete_notification_log: %s." % e)
return False
def get_newsletter_log(self, kwargs=None):
@@ -1714,7 +1714,7 @@ class DataFactory(object):
join_evals=[],
kwargs=kwargs)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_newsletter_log: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_newsletter_log: %s." % e)
return {'recordsFiltered': 0,
'recordsTotal': 0,
'draw': 0,
@@ -1753,12 +1753,12 @@ class DataFactory(object):
monitor_db = database.MonitorDatabase()
try:
- logger.info(u"Tautulli DataFactory :: Clearing newsletter logs from database.")
+ logger.info("Tautulli DataFactory :: Clearing newsletter logs from database.")
monitor_db.action('DELETE FROM newsletter_log')
monitor_db.action('VACUUM')
return True
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for delete_newsletter_log: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for delete_newsletter_log: %s." % e)
return False
def get_user_devices(self, user_id=''):
@@ -1769,7 +1769,7 @@ class DataFactory(object):
query = 'SELECT machine_id FROM session_history WHERE user_id = ? GROUP BY machine_id'
result = monitor_db.select(query=query, args=[user_id])
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_user_devices: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_user_devices: %s." % e)
return []
else:
return []
@@ -1784,7 +1784,7 @@ class DataFactory(object):
query = 'SELECT * FROM recently_added WHERE rating_key = ?'
result = monitor_db.select(query=query, args=[rating_key])
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for get_recently_added_item: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for get_recently_added_item: %s." % e)
return []
else:
return []
@@ -1810,7 +1810,7 @@ class DataFactory(object):
try:
monitor_db.upsert(table_name='recently_added', key_dict=keys, value_dict=values)
except Exception as e:
- logger.warn(u"Tautulli DataFactory :: Unable to execute database query for set_recently_added_item: %s." % e)
+ logger.warn("Tautulli DataFactory :: Unable to execute database query for set_recently_added_item: %s." % e)
return False
return True
diff --git a/plexpy/datatables.py b/plexpy/datatables.py
index 47d02503..db1f9309 100644
--- a/plexpy/datatables.py
+++ b/plexpy/datatables.py
@@ -84,7 +84,7 @@ class DataTables(object):
query = 'SELECT * FROM (SELECT %s FROM %s %s %s %s %s) %s %s' \
% (extracted_columns['column_string'], table_name, join, c_where, group, union, where, order)
- # logger.debug(u"Query: %s" % query)
+ # logger.debug("Query: %s" % query)
# Execute the query
filtered = self.ssp_db.select(query, args=args)
diff --git a/plexpy/graphs.py b/plexpy/graphs.py
index 3abb5b70..8ac8a973 100644
--- a/plexpy/graphs.py
+++ b/plexpy/graphs.py
@@ -73,7 +73,7 @@ class Graphs(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Graphs :: Unable to execute database query for get_total_plays_per_day: %s." % e)
+ logger.warn("Tautulli Graphs :: Unable to execute database query for get_total_plays_per_day: %s." % e)
return None
# create our date range as some days may not have any data
@@ -180,7 +180,7 @@ class Graphs(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Graphs :: Unable to execute database query for get_total_plays_per_dayofweek: %s." % e)
+ logger.warn("Tautulli Graphs :: Unable to execute database query for get_total_plays_per_dayofweek: %s." % e)
return None
if plexpy.CONFIG.WEEK_START_MONDAY:
@@ -272,7 +272,7 @@ class Graphs(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Graphs :: Unable to execute database query for get_total_plays_per_hourofday: %s." % e)
+ logger.warn("Tautulli Graphs :: Unable to execute database query for get_total_plays_per_hourofday: %s." % e)
return None
hours_list = ['00','01','02','03','04','05',
@@ -364,7 +364,7 @@ class Graphs(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Graphs :: Unable to execute database query for get_total_plays_per_month: %s." % e)
+ logger.warn("Tautulli Graphs :: Unable to execute database query for get_total_plays_per_month: %s." % e)
return None
# create our date range as some months may not have any data
@@ -461,7 +461,7 @@ class Graphs(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Graphs :: Unable to execute database query for get_total_plays_by_top_10_platforms: %s." % e)
+ logger.warn("Tautulli Graphs :: Unable to execute database query for get_total_plays_by_top_10_platforms: %s." % e)
return None
categories = []
@@ -543,7 +543,7 @@ class Graphs(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Graphs :: Unable to execute database query for get_total_plays_by_top_10_users: %s." % e)
+ logger.warn("Tautulli Graphs :: Unable to execute database query for get_total_plays_by_top_10_users: %s." % e)
return None
categories = []
@@ -634,7 +634,7 @@ class Graphs(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Graphs :: Unable to execute database query for get_total_plays_per_stream_type: %s." % e)
+ logger.warn("Tautulli Graphs :: Unable to execute database query for get_total_plays_per_stream_type: %s." % e)
return None
# create our date range as some days may not have any data
@@ -740,7 +740,7 @@ class Graphs(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Graphs :: Unable to execute database query for get_total_plays_by_source_resolution: %s." % e)
+ logger.warn("Tautulli Graphs :: Unable to execute database query for get_total_plays_by_source_resolution: %s." % e)
return None
categories = []
@@ -850,7 +850,7 @@ class Graphs(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Graphs :: Unable to execute database query for get_total_plays_by_stream_resolution: %s." % e)
+ logger.warn("Tautulli Graphs :: Unable to execute database query for get_total_plays_by_stream_resolution: %s." % e)
return None
categories = []
@@ -939,7 +939,7 @@ class Graphs(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Graphs :: Unable to execute database query for get_stream_type_by_top_10_platforms: %s." % e)
+ logger.warn("Tautulli Graphs :: Unable to execute database query for get_stream_type_by_top_10_platforms: %s." % e)
return None
categories = []
@@ -1037,7 +1037,7 @@ class Graphs(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Graphs :: Unable to execute database query for get_stream_type_by_top_10_users: %s." % e)
+ logger.warn("Tautulli Graphs :: Unable to execute database query for get_stream_type_by_top_10_users: %s." % e)
return None
categories = []
diff --git a/plexpy/helpers.py b/plexpy/helpers.py
index f5ec2052..10cef9bd 100644
--- a/plexpy/helpers.py
+++ b/plexpy/helpers.py
@@ -429,7 +429,7 @@ def create_https_certificates(ssl_cert, ssl_key):
altNames = ','.join(domains + ips)
# Create the self-signed Tautulli certificate
- logger.debug(u"Generating self-signed SSL certificate.")
+ logger.debug("Generating self-signed SSL certificate.")
pkey = createKeyPair(TYPE_RSA, 2048)
cert = createSelfSignedCertificate(("Tautulli", pkey), serial, (0, 60 * 60 * 24 * 365 * 10), altNames) # ten years
@@ -568,9 +568,9 @@ def get_ip(host):
elif not re.fullmatch(r'[0-9]+(?:\.[0-9]+){3}(?!\d*-[a-z0-9]{6})', host):
try:
ip_address = socket.getaddrinfo(host, None)[0][4][0]
- logger.debug(u"IP Checker :: Resolved %s to %s." % (host, ip_address))
+ logger.debug("IP Checker :: Resolved %s to %s." % (host, ip_address))
except:
- logger.error(u"IP Checker :: Bad IP or hostname provided: %s." % host)
+ logger.error("IP Checker :: Bad IP or hostname provided: %s." % host)
return ip_address
@@ -594,27 +594,27 @@ def install_geoip_db():
geolite2_db = plexpy.CONFIG.GEOIP_DB or os.path.join(plexpy.DATA_DIR, geolite2_db)
# Retrieve the GeoLite2 gzip file
- logger.debug(u"Tautulli Helpers :: Downloading GeoLite2 gzip file from MaxMind...")
+ logger.debug("Tautulli Helpers :: Downloading GeoLite2 gzip file from MaxMind...")
try:
maxmind = urllib.URLopener()
maxmind.retrieve(maxmind_url + geolite2_gz, temp_gz)
md5_checksum = urllib2.urlopen(maxmind_url + geolite2_md5).read()
except Exception as e:
- logger.error(u"Tautulli Helpers :: Failed to download GeoLite2 gzip file from MaxMind: %s" % e)
+ logger.error("Tautulli Helpers :: Failed to download GeoLite2 gzip file from MaxMind: %s" % e)
return False
# Extract the GeoLite2 database file
- logger.debug(u"Tautulli Helpers :: Extracting GeoLite2 database...")
+ logger.debug("Tautulli Helpers :: Extracting GeoLite2 database...")
try:
with gzip.open(temp_gz, 'rb') as gz:
with open(geolite2_db, 'wb') as db:
db.write(gz.read())
except Exception as e:
- logger.error(u"Tautulli Helpers :: Failed to extract the GeoLite2 database: %s" % e)
+ logger.error("Tautulli Helpers :: Failed to extract the GeoLite2 database: %s" % e)
return False
# Check MD5 hash for GeoLite2 database file
- logger.debug(u"Tautulli Helpers :: Checking MD5 checksum for GeoLite2 database...")
+ logger.debug("Tautulli Helpers :: Checking MD5 checksum for GeoLite2 database...")
try:
hash_md5 = hashlib.md5()
with open(geolite2_db, 'rb') as f:
@@ -623,21 +623,21 @@ def install_geoip_db():
md5_hash = hash_md5.hexdigest()
if md5_hash != md5_checksum:
- logger.error(u"Tautulli Helpers :: MD5 checksum doesn't match for GeoLite2 database. "
+ logger.error("Tautulli Helpers :: MD5 checksum doesn't match for GeoLite2 database. "
"Checksum: %s, file hash: %s" % (md5_checksum, md5_hash))
return False
except Exception as e:
- logger.error(u"Tautulli Helpers :: Failed to generate MD5 checksum for GeoLite2 database: %s" % e)
+ logger.error("Tautulli Helpers :: Failed to generate MD5 checksum for GeoLite2 database: %s" % e)
return False
# Delete temportary GeoLite2 gzip file
- logger.debug(u"Tautulli Helpers :: Deleting temporary GeoLite2 gzip file...")
+ logger.debug("Tautulli Helpers :: Deleting temporary GeoLite2 gzip file...")
try:
os.remove(temp_gz)
except Exception as e:
- logger.warn(u"Tautulli Helpers :: Failed to remove temporary GeoLite2 gzip file: %s" % e)
+ logger.warn("Tautulli Helpers :: Failed to remove temporary GeoLite2 gzip file: %s" % e)
- logger.debug(u"Tautulli Helpers :: GeoLite2 database installed successfully.")
+ logger.debug("Tautulli Helpers :: GeoLite2 database installed successfully.")
plexpy.CONFIG.__setattr__('GEOIP_DB', geolite2_db)
plexpy.CONFIG.write()
@@ -645,16 +645,16 @@ def install_geoip_db():
def uninstall_geoip_db():
- logger.debug(u"Tautulli Helpers :: Uninstalling the GeoLite2 database...")
+ logger.debug("Tautulli Helpers :: Uninstalling the GeoLite2 database...")
try:
os.remove(plexpy.CONFIG.GEOIP_DB)
plexpy.CONFIG.__setattr__('GEOIP_DB', '')
plexpy.CONFIG.write()
except Exception as e:
- logger.error(u"Tautulli Helpers :: Failed to uninstall the GeoLite2 database: %s" % e)
+ logger.error("Tautulli Helpers :: Failed to uninstall the GeoLite2 database: %s" % e)
return False
- logger.debug(u"Tautulli Helpers :: GeoLite2 database uninstalled successfully.")
+ logger.debug("Tautulli Helpers :: GeoLite2 database uninstalled successfully.")
return True
@@ -758,7 +758,7 @@ def upload_to_imgur(img_data, img_title='', rating_key='', fallback=''):
img_url = delete_hash = ''
if not plexpy.CONFIG.IMGUR_CLIENT_ID:
- logger.error(u"Tautulli Helpers :: Cannot upload image to Imgur. No Imgur client id specified in the settings.")
+ logger.error("Tautulli Helpers :: Cannot upload image to Imgur. No Imgur client id specified in the settings.")
return img_url, delete_hash
headers = {'Authorization': 'Client-ID %s' % plexpy.CONFIG.IMGUR_CLIENT_ID}
@@ -771,18 +771,18 @@ def upload_to_imgur(img_data, img_title='', rating_key='', fallback=''):
headers=headers, data=data)
if response and not err_msg:
- logger.debug(u"Tautulli Helpers :: Image '{}' ({}) uploaded to Imgur.".format(img_title, fallback))
+ logger.debug("Tautulli Helpers :: Image '{}' ({}) uploaded to Imgur.".format(img_title, fallback))
imgur_response_data = response.json().get('data')
img_url = imgur_response_data.get('link', '').replace('http://', 'https://')
delete_hash = imgur_response_data.get('deletehash', '')
else:
if err_msg:
- logger.error(u"Tautulli Helpers :: Unable to upload image '{}' ({}) to Imgur: {}".format(img_title, fallback, err_msg))
+ logger.error("Tautulli Helpers :: Unable to upload image '{}' ({}) to Imgur: {}".format(img_title, fallback, err_msg))
else:
- logger.error(u"Tautulli Helpers :: Unable to upload image '{}' ({}) to Imgur.".format(img_title, fallback))
+ logger.error("Tautulli Helpers :: Unable to upload image '{}' ({}) to Imgur.".format(img_title, fallback))
if req_msg:
- logger.debug(u"Tautulli Helpers :: Request response: {}".format(req_msg))
+ logger.debug("Tautulli Helpers :: Request response: {}".format(req_msg))
return img_url, delete_hash
@@ -790,7 +790,7 @@ def upload_to_imgur(img_data, img_title='', rating_key='', fallback=''):
def delete_from_imgur(delete_hash, img_title='', fallback=''):
""" Deletes an image from Imgur """
if not plexpy.CONFIG.IMGUR_CLIENT_ID:
- logger.error(u"Tautulli Helpers :: Cannot delete image from Imgur. No Imgur client id specified in the settings.")
+ logger.error("Tautulli Helpers :: Cannot delete image from Imgur. No Imgur client id specified in the settings.")
return False
headers = {'Authorization': 'Client-ID %s' % plexpy.CONFIG.IMGUR_CLIENT_ID}
@@ -799,13 +799,13 @@ def delete_from_imgur(delete_hash, img_title='', fallback=''):
headers=headers)
if response and not err_msg:
- logger.debug(u"Tautulli Helpers :: Image '{}' ({}) deleted from Imgur.".format(img_title, fallback))
+ logger.debug("Tautulli Helpers :: Image '{}' ({}) deleted from Imgur.".format(img_title, fallback))
return True
else:
if err_msg:
- logger.error(u"Tautulli Helpers :: Unable to delete image '{}' ({}) from Imgur: {}".format(img_title, fallback, err_msg))
+ logger.error("Tautulli Helpers :: Unable to delete image '{}' ({}) from Imgur: {}".format(img_title, fallback, err_msg))
else:
- logger.error(u"Tautulli Helpers :: Unable to delete image '{}' ({}) from Imgur.".format(img_title, fallback))
+ logger.error("Tautulli Helpers :: Unable to delete image '{}' ({}) from Imgur.".format(img_title, fallback))
return False
@@ -814,7 +814,7 @@ def upload_to_cloudinary(img_data, img_title='', rating_key='', fallback=''):
img_url = ''
if not plexpy.CONFIG.CLOUDINARY_CLOUD_NAME or not plexpy.CONFIG.CLOUDINARY_API_KEY or not plexpy.CONFIG.CLOUDINARY_API_SECRET:
- logger.error(u"Tautulli Helpers :: Cannot upload image to Cloudinary. Cloudinary settings not specified in the settings.")
+ logger.error("Tautulli Helpers :: Cannot upload image to Cloudinary. Cloudinary settings not specified in the settings.")
return img_url
cloudinary.config(
@@ -828,10 +828,10 @@ def upload_to_cloudinary(img_data, img_title='', rating_key='', fallback=''):
public_id='{}_{}'.format(fallback, rating_key),
tags=['tautulli', fallback, str(rating_key)],
context={'title': img_title.encode('utf-8'), 'rating_key': str(rating_key), 'fallback': fallback})
- logger.debug(u"Tautulli Helpers :: Image '{}' ({}) uploaded to Cloudinary.".format(img_title, fallback))
+ logger.debug("Tautulli Helpers :: Image '{}' ({}) uploaded to Cloudinary.".format(img_title, fallback))
img_url = response.get('url', '')
except Exception as e:
- logger.error(u"Tautulli Helpers :: Unable to upload image '{}' ({}) to Cloudinary: {}".format(img_title, fallback, e))
+ logger.error("Tautulli Helpers :: Unable to upload image '{}' ({}) to Cloudinary: {}".format(img_title, fallback, e))
return img_url
@@ -839,7 +839,7 @@ def upload_to_cloudinary(img_data, img_title='', rating_key='', fallback=''):
def delete_from_cloudinary(rating_key=None, delete_all=False):
""" Deletes an image from Cloudinary """
if not plexpy.CONFIG.CLOUDINARY_CLOUD_NAME or not plexpy.CONFIG.CLOUDINARY_API_KEY or not plexpy.CONFIG.CLOUDINARY_API_SECRET:
- logger.error(u"Tautulli Helpers :: Cannot delete image from Cloudinary. Cloudinary settings not specified in the settings.")
+ logger.error("Tautulli Helpers :: Cannot delete image from Cloudinary. Cloudinary settings not specified in the settings.")
return False
cloudinary.config(
@@ -850,12 +850,12 @@ def delete_from_cloudinary(rating_key=None, delete_all=False):
if delete_all:
delete_resources_by_tag('tautulli')
- logger.debug(u"Tautulli Helpers :: Deleted all images from Cloudinary.")
+ logger.debug("Tautulli Helpers :: Deleted all images from Cloudinary.")
elif rating_key:
delete_resources_by_tag(str(rating_key))
- logger.debug(u"Tautulli Helpers :: Deleted images from Cloudinary with rating_key {}.".format(rating_key))
+ logger.debug("Tautulli Helpers :: Deleted images from Cloudinary with rating_key {}.".format(rating_key))
else:
- logger.debug(u"Tautulli Helpers :: Unable to delete images from Cloudinary: No rating_key provided.")
+ logger.debug("Tautulli Helpers :: Unable to delete images from Cloudinary: No rating_key provided.")
return True
@@ -865,7 +865,7 @@ def cloudinary_transform(rating_key=None, width=1000, height=1500, opacity=100,
url = ''
if not plexpy.CONFIG.CLOUDINARY_CLOUD_NAME or not plexpy.CONFIG.CLOUDINARY_API_KEY or not plexpy.CONFIG.CLOUDINARY_API_SECRET:
- logger.error(u"Tautulli Helpers :: Cannot transform image on Cloudinary. Cloudinary settings not specified in the settings.")
+ logger.error("Tautulli Helpers :: Cannot transform image on Cloudinary. Cloudinary settings not specified in the settings.")
return url
cloudinary.config(
@@ -895,9 +895,9 @@ def cloudinary_transform(rating_key=None, width=1000, height=1500, opacity=100,
try:
url, options = cloudinary_url('{}_{}'.format(fallback, rating_key), **img_options)
- logger.debug(u"Tautulli Helpers :: Image '{}' ({}) transformed on Cloudinary.".format(img_title, fallback))
+ logger.debug("Tautulli Helpers :: Image '{}' ({}) transformed on Cloudinary.".format(img_title, fallback))
except Exception as e:
- logger.error(u"Tautulli Helpers :: Unable to transform image '{}' ({}) on Cloudinary: {}".format(img_title, fallback, e))
+ logger.error("Tautulli Helpers :: Unable to transform image '{}' ({}) on Cloudinary: {}".format(img_title, fallback, e))
return url
@@ -910,7 +910,7 @@ def cache_image(url, image=None):
# Create image directory if it doesn't exist
imgdir = os.path.join(plexpy.CONFIG.CACHE_DIR, 'images/')
if not os.path.exists(imgdir):
- logger.debug(u"Tautulli Helpers :: Creating image cache directory at %s" % imgdir)
+ logger.debug("Tautulli Helpers :: Creating image cache directory at %s" % imgdir)
os.makedirs(imgdir)
# Create a hash of the url to use as the filename
@@ -923,7 +923,7 @@ def cache_image(url, image=None):
with open(imagefile, 'wb') as cache_file:
cache_file.write(image)
except IOError as e:
- logger.error(u"Tautulli Helpers :: Failed to cache image %s: %s" % (imagefile, e))
+ logger.error("Tautulli Helpers :: Failed to cache image %s: %s" % (imagefile, e))
# Try to return the image from the cache directory
if os.path.isfile(imagefile):
diff --git a/plexpy/http_handler.py b/plexpy/http_handler.py
index 487dc521..a1c8ba04 100644
--- a/plexpy/http_handler.py
+++ b/plexpy/http_handler.py
@@ -86,7 +86,7 @@ class HTTPHandler(object):
self.timeout = timeout or self.timeout
if self.request_type not in self.valid_request_types:
- logger.debug(u"HTTP request made but unsupported request type given.")
+ logger.debug("HTTP request made but unsupported request type given.")
return None
if uri:
@@ -104,7 +104,7 @@ class HTTPHandler(object):
return responses[0]
else:
- logger.debug(u"HTTP request made but no enpoint given.")
+ logger.debug("HTTP request made but no enpoint given.")
return None
def _http_requests_pool(self, urls, workers=10, chunk=None):
@@ -134,7 +134,7 @@ class HTTPHandler(object):
yield work
except Exception as e:
if not self._silent:
- logger.error(u"Failed to yield request: %s" % e)
+ logger.error("Failed to yield request: %s" % e)
finally:
pool.close()
pool.join()
@@ -145,15 +145,15 @@ class HTTPHandler(object):
r = session.request(self.request_type, url, headers=self.headers, timeout=self.timeout)
except IOError as e:
if not self._silent:
- logger.warn(u"Failed to access uri endpoint %s with error %s" % (self.uri, e))
+ logger.warn("Failed to access uri endpoint %s with error %s" % (self.uri, e))
return None
except Exception as e:
if not self._silent:
- logger.warn(u"Failed to access uri endpoint %s. Is your server maybe accepting SSL connections only? %s" % (self.uri, e))
+ logger.warn("Failed to access uri endpoint %s. Is your server maybe accepting SSL connections only? %s" % (self.uri, e))
return None
except:
if not self._silent:
- logger.warn(u"Failed to access uri endpoint %s with Uncaught exception." % self.uri)
+ logger.warn("Failed to access uri endpoint %s with Uncaught exception." % self.uri)
return None
response_status = r.status
@@ -164,7 +164,7 @@ class HTTPHandler(object):
return self._http_format_output(response_content, response_headers)
else:
if not self._silent:
- logger.warn(u"Failed to access uri endpoint %s. Status code %r" % (self.uri, response_status))
+ logger.warn("Failed to access uri endpoint %s. Status code %r" % (self.uri, response_status))
return None
def _http_format_output(self, response_content, response_headers):
@@ -191,5 +191,5 @@ class HTTPHandler(object):
except Exception as e:
if not self._silent:
- logger.warn(u"Failed format response from uri %s to %s error %s" % (self.uri, self.output_format, e))
+ logger.warn("Failed format response from uri %s to %s error %s" % (self.uri, self.output_format, e))
return None
diff --git a/plexpy/libraries.py b/plexpy/libraries.py
index 8dc7f037..fcb222bc 100644
--- a/plexpy/libraries.py
+++ b/plexpy/libraries.py
@@ -28,11 +28,11 @@ import session
def refresh_libraries():
- logger.info(u"Tautulli Libraries :: Requesting libraries list refresh...")
+ logger.info("Tautulli Libraries :: Requesting libraries list refresh...")
server_id = plexpy.CONFIG.PMS_IDENTIFIER
if not server_id:
- logger.error(u"Tautulli Libraries :: No PMS identifier, cannot refresh libraries. Verify server in settings.")
+ logger.error("Tautulli Libraries :: No PMS identifier, cannot refresh libraries. Verify server in settings.")
return
library_sections = pmsconnect.PmsConnect().get_library_details()
@@ -81,10 +81,10 @@ def refresh_libraries():
# # Start library labels update on it's own thread
# threading.Thread(target=libraries.update_labels).start()
- logger.info(u"Tautulli Libraries :: Libraries list refreshed.")
+ logger.info("Tautulli Libraries :: Libraries list refreshed.")
return True
else:
- logger.warn(u"Tautulli Libraries :: Unable to refresh libraries list.")
+ logger.warn("Tautulli Libraries :: Unable to refresh libraries list.")
return False
@@ -100,9 +100,9 @@ def update_section_ids():
query = 'SELECT section_id, section_type FROM library_sections'
library_results = monitor_db.select(query=query)
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for update_section_ids: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for update_section_ids: %s." % e)
- logger.warn(u"Tautulli Libraries :: Unable to update section_id's in database.")
+ logger.warn("Tautulli Libraries :: Unable to update section_id's in database.")
plexpy.CONFIG.UPDATE_SECTION_IDS = 1
plexpy.CONFIG.write()
return None
@@ -112,7 +112,7 @@ def update_section_ids():
plexpy.CONFIG.write()
return None
- logger.debug(u"Tautulli Libraries :: Updating section_id's in database.")
+ logger.debug("Tautulli Libraries :: Updating section_id's in database.")
# Get rating_key: section_id mapping pairs
key_mappings = {}
@@ -129,7 +129,7 @@ def update_section_ids():
children_list = library_children['children_list']
key_mappings.update({child['rating_key']: child['section_id'] for child in children_list})
else:
- logger.warn(u"Tautulli Libraries :: Unable to get a list of library items for section_id %s." % section_id)
+ logger.warn("Tautulli Libraries :: Unable to get a list of library items for section_id %s." % section_id)
error_keys = set()
for item in history_results:
@@ -147,10 +147,10 @@ def update_section_ids():
error_keys.add(item['rating_key'])
if error_keys:
- logger.info(u"Tautulli Libraries :: Updated all section_id's in database except for rating_keys: %s." %
+ logger.info("Tautulli Libraries :: Updated all section_id's in database except for rating_keys: %s." %
', '.join(str(key) for key in error_keys))
else:
- logger.info(u"Tautulli Libraries :: Updated all section_id's in database.")
+ logger.info("Tautulli Libraries :: Updated all section_id's in database.")
plexpy.CONFIG.UPDATE_SECTION_IDS = 0
plexpy.CONFIG.write()
@@ -166,9 +166,9 @@ def update_labels():
query = 'SELECT section_id, section_type FROM library_sections'
library_results = monitor_db.select(query=query)
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for update_labels: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for update_labels: %s." % e)
- logger.warn(u"Tautulli Libraries :: Unable to update labels in database.")
+ logger.warn("Tautulli Libraries :: Unable to update labels in database.")
plexpy.CONFIG.UPDATE_LABELS = 1
plexpy.CONFIG.write()
return None
@@ -178,7 +178,7 @@ def update_labels():
plexpy.CONFIG.write()
return None
- logger.debug(u"Tautulli Libraries :: Updating labels in database.")
+ logger.debug("Tautulli Libraries :: Updating labels in database.")
# Get rating_key: section_id mapping pairs
key_mappings = {}
@@ -209,7 +209,7 @@ def update_labels():
key_mappings[rating_key] = [label['label_title']]
else:
- logger.warn(u"Tautulli Libraries :: Unable to get a list of library items for section_id %s."
+ logger.warn("Tautulli Libraries :: Unable to get a list of library items for section_id %s."
% section_id)
error_keys = set()
@@ -223,10 +223,10 @@ def update_labels():
error_keys.add(rating_key)
if error_keys:
- logger.info(u"Tautulli Libraries :: Updated all labels in database except for rating_keys: %s." %
+ logger.info("Tautulli Libraries :: Updated all labels in database except for rating_keys: %s." %
', '.join(str(key) for key in error_keys))
else:
- logger.info(u"Tautulli Libraries :: Updated all labels in database.")
+ logger.info("Tautulli Libraries :: Updated all labels in database.")
plexpy.CONFIG.UPDATE_LABELS = 0
plexpy.CONFIG.write()
@@ -305,7 +305,7 @@ class Libraries(object):
['session_history_metadata.id', 'session_history_media_info.id']],
kwargs=kwargs)
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for get_list: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for get_list: %s." % e)
return default_return
result = query['result']
@@ -374,19 +374,19 @@ class Libraries(object):
return default_return
if section_id and not str(section_id).isdigit():
- logger.warn(u"Tautulli Libraries :: Datatable media info called but invalid section_id provided.")
+ logger.warn("Tautulli Libraries :: Datatable media info called but invalid section_id provided.")
return default_return
elif rating_key and not str(rating_key).isdigit():
- logger.warn(u"Tautulli Libraries :: Datatable media info called but invalid rating_key provided.")
+ logger.warn("Tautulli Libraries :: Datatable media info called but invalid rating_key provided.")
return default_return
elif not section_id and not rating_key:
- logger.warn(u"Tautulli Libraries :: Datatable media info called but no input provided.")
+ logger.warn("Tautulli Libraries :: Datatable media info called but no input provided.")
return default_return
# Get the library details
library_details = self.get_details(section_id=section_id)
if library_details['section_id'] == None:
- logger.debug(u"Tautulli Libraries :: Library section_id %s not found." % section_id)
+ logger.debug("Tautulli Libraries :: Library section_id %s not found." % section_id)
return default_return
if not section_type:
@@ -416,7 +416,7 @@ class Libraries(object):
'GROUP BY session_history.%s ' % (count_by, group_by)
result = monitor_db.select(query, args=[section_id])
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for get_datatables_media_info2: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for get_datatables_media_info2: %s." % e)
return default_return
watched_list = {}
@@ -433,8 +433,8 @@ class Libraries(object):
rows = json.load(inFile)
library_count = len(rows)
except IOError as e:
- #logger.debug(u"Tautulli Libraries :: No JSON file for rating_key %s." % rating_key)
- #logger.debug(u"Tautulli Libraries :: Refreshing data and creating new JSON file for rating_key %s." % rating_key)
+ #logger.debug("Tautulli Libraries :: No JSON file for rating_key %s." % rating_key)
+ #logger.debug("Tautulli Libraries :: Refreshing data and creating new JSON file for rating_key %s." % rating_key)
pass
elif section_id:
try:
@@ -443,8 +443,8 @@ class Libraries(object):
rows = json.load(inFile)
library_count = len(rows)
except IOError as e:
- #logger.debug(u"Tautulli Libraries :: No JSON file for library section_id %s." % section_id)
- #logger.debug(u"Tautulli Libraries :: Refreshing data and creating new JSON file for section_id %s." % section_id)
+ #logger.debug("Tautulli Libraries :: No JSON file for library section_id %s." % section_id)
+ #logger.debug("Tautulli Libraries :: Refreshing data and creating new JSON file for section_id %s." % section_id)
pass
# If no cache was imported, get all library children items
@@ -464,7 +464,7 @@ class Libraries(object):
library_count = library_children['library_count']
children_list = library_children['children_list']
else:
- logger.warn(u"Tautulli Libraries :: Unable to get a list of library items.")
+ logger.warn("Tautulli Libraries :: Unable to get a list of library items.")
return default_return
new_rows = []
@@ -509,14 +509,14 @@ class Libraries(object):
with open(outFilePath, 'w') as outFile:
json.dump(rows, outFile)
except IOError as e:
- logger.debug(u"Tautulli Libraries :: Unable to create cache file for rating_key %s." % rating_key)
+ logger.debug("Tautulli Libraries :: Unable to create cache file for rating_key %s." % rating_key)
elif section_id:
try:
outFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info_%s.json' % section_id)
with open(outFilePath, 'w') as outFile:
json.dump(rows, outFile)
except IOError as e:
- logger.debug(u"Tautulli Libraries :: Unable to create cache file for section_id %s." % section_id)
+ logger.debug("Tautulli Libraries :: Unable to create cache file for section_id %s." % section_id)
# Update the last_played and play_count
for item in rows:
@@ -586,16 +586,16 @@ class Libraries(object):
return False
if section_id and not str(section_id).isdigit():
- logger.warn(u"Tautulli Libraries :: Datatable media info file size called but invalid section_id provided.")
+ logger.warn("Tautulli Libraries :: Datatable media info file size called but invalid section_id provided.")
return False
elif rating_key and not str(rating_key).isdigit():
- logger.warn(u"Tautulli Libraries :: Datatable media info file size called but invalid rating_key provided.")
+ logger.warn("Tautulli Libraries :: Datatable media info file size called but invalid rating_key provided.")
return False
# Get the library details
library_details = self.get_details(section_id=section_id)
if library_details['section_id'] == None:
- logger.debug(u"Tautulli Libraries :: Library section_id %s not found." % section_id)
+ logger.debug("Tautulli Libraries :: Library section_id %s not found." % section_id)
return False
if library_details['section_type'] == 'photo':
return False
@@ -603,24 +603,24 @@ class Libraries(object):
rows = []
# Import media info cache from json file
if rating_key:
- #logger.debug(u"Tautulli Libraries :: Getting file sizes for rating_key %s." % rating_key)
+ #logger.debug("Tautulli Libraries :: Getting file sizes for rating_key %s." % rating_key)
try:
inFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info_%s-%s.json' % (section_id, rating_key))
with open(inFilePath, 'r') as inFile:
rows = json.load(inFile)
except IOError as e:
- #logger.debug(u"Tautulli Libraries :: No JSON file for rating_key %s." % rating_key)
- #logger.debug(u"Tautulli Libraries :: Refreshing data and creating new JSON file for rating_key %s." % rating_key)
+ #logger.debug("Tautulli Libraries :: No JSON file for rating_key %s." % rating_key)
+ #logger.debug("Tautulli Libraries :: Refreshing data and creating new JSON file for rating_key %s." % rating_key)
pass
elif section_id:
- logger.debug(u"Tautulli Libraries :: Getting file sizes for section_id %s." % section_id)
+ logger.debug("Tautulli Libraries :: Getting file sizes for section_id %s." % section_id)
try:
inFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info_%s.json' % section_id)
with open(inFilePath, 'r') as inFile:
rows = json.load(inFile)
except IOError as e:
- #logger.debug(u"Tautulli Libraries :: No JSON file for library section_id %s." % section_id)
- #logger.debug(u"Tautulli Libraries :: Refreshing data and creating new JSON file for section_id %s." % section_id)
+ #logger.debug("Tautulli Libraries :: No JSON file for library section_id %s." % section_id)
+ #logger.debug("Tautulli Libraries :: Refreshing data and creating new JSON file for section_id %s." % section_id)
pass
# Get the total file size for each item
@@ -653,20 +653,20 @@ class Libraries(object):
with open(outFilePath, 'w') as outFile:
json.dump(rows, outFile)
except IOError as e:
- logger.debug(u"Tautulli Libraries :: Unable to create cache file with file sizes for rating_key %s." % rating_key)
+ logger.debug("Tautulli Libraries :: Unable to create cache file with file sizes for rating_key %s." % rating_key)
elif section_id:
try:
outFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info_%s.json' % section_id)
with open(outFilePath, 'w') as outFile:
json.dump(rows, outFile)
except IOError as e:
- logger.debug(u"Tautulli Libraries :: Unable to create cache file with file sizes for section_id %s." % section_id)
+ logger.debug("Tautulli Libraries :: Unable to create cache file with file sizes for section_id %s." % section_id)
if rating_key:
- #logger.debug(u"Tautulli Libraries :: File sizes updated for rating_key %s." % rating_key)
+ #logger.debug("Tautulli Libraries :: File sizes updated for rating_key %s." % rating_key)
pass
elif section_id:
- logger.debug(u"Tautulli Libraries :: File sizes updated for section_id %s." % section_id)
+ logger.debug("Tautulli Libraries :: File sizes updated for section_id %s." % section_id)
return True
@@ -682,7 +682,7 @@ class Libraries(object):
try:
monitor_db.upsert('library_sections', value_dict, key_dict)
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for set_config: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for set_config: %s." % e)
def get_details(self, section_id=None):
default_return = {'section_id': 0,
@@ -716,7 +716,7 @@ class Libraries(object):
else:
result = []
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for get_details: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for get_details: %s." % e)
result = []
library_details = {}
@@ -750,7 +750,7 @@ class Libraries(object):
return library_details
else:
- logger.warn(u"Tautulli Libraries :: Unable to retrieve library %s from database. Requesting library list refresh."
+ logger.warn("Tautulli Libraries :: Unable to retrieve library %s from database. Requesting library list refresh."
% section_id)
# Let's first refresh the libraries list to make sure the library isn't newly added and not in the db yet
refresh_libraries()
@@ -761,7 +761,7 @@ class Libraries(object):
return library_details
else:
- logger.warn(u"Tautulli Users :: Unable to retrieve library %s from database. Returning 'Local' library."
+ logger.warn("Tautulli Users :: Unable to retrieve library %s from database. Returning 'Local' library."
% section_id)
# If there is no library data we must return something
return default_return
@@ -806,7 +806,7 @@ class Libraries(object):
else:
result = []
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for get_watch_time_stats: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for get_watch_time_stats: %s." % e)
result = []
for item in result:
@@ -854,7 +854,7 @@ class Libraries(object):
else:
result = []
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for get_user_stats: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for get_user_stats: %s." % e)
result = []
for item in result:
@@ -893,7 +893,7 @@ class Libraries(object):
else:
result = []
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for get_recently_watched: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for get_recently_watched: %s." % e)
result = []
for row in result:
@@ -935,7 +935,7 @@ class Libraries(object):
'FROM library_sections WHERE deleted_section = 0'
result = monitor_db.select(query=query)
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for get_sections: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for get_sections: %s." % e)
return None
libraries = []
@@ -954,7 +954,7 @@ class Libraries(object):
try:
if section_id.isdigit():
- logger.info(u"Tautulli Libraries :: Deleting all history for library id %s from database." % section_id)
+ logger.info("Tautulli Libraries :: Deleting all history for library id %s from database." % section_id)
session_history_media_info_del = \
monitor_db.action('DELETE FROM '
'session_history_media_info '
@@ -978,7 +978,7 @@ class Libraries(object):
else:
return 'Unable to delete items, section_id not valid.'
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for delete_all_history: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for delete_all_history: %s." % e)
def delete(self, section_id=None):
monitor_db = database.MonitorDatabase()
@@ -986,7 +986,7 @@ class Libraries(object):
try:
if section_id.isdigit():
self.delete_all_history(section_id)
- logger.info(u"Tautulli Libraries :: Deleting library with id %s from database." % section_id)
+ logger.info("Tautulli Libraries :: Deleting library with id %s from database." % section_id)
monitor_db.action('UPDATE library_sections SET deleted_section = 1 WHERE section_id = ?', [section_id])
monitor_db.action('UPDATE library_sections SET keep_history = 0 WHERE section_id = ?', [section_id])
monitor_db.action('UPDATE library_sections SET do_notify = 0 WHERE section_id = ?', [section_id])
@@ -1002,7 +1002,7 @@ class Libraries(object):
else:
return 'Unable to delete library, section_id not valid.'
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for delete: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for delete: %s." % e)
def undelete(self, section_id=None, section_name=None):
monitor_db = database.MonitorDatabase()
@@ -1012,7 +1012,7 @@ class Libraries(object):
query = 'SELECT * FROM library_sections WHERE section_id = ?'
result = monitor_db.select(query=query, args=[section_id])
if result:
- logger.info(u"Tautulli Libraries :: Re-adding library with id %s to database." % section_id)
+ logger.info("Tautulli Libraries :: Re-adding library with id %s to database." % section_id)
monitor_db.action('UPDATE library_sections SET deleted_section = 0 WHERE section_id = ?', [section_id])
monitor_db.action('UPDATE library_sections SET keep_history = 1 WHERE section_id = ?', [section_id])
monitor_db.action('UPDATE library_sections SET do_notify = 1 WHERE section_id = ?', [section_id])
@@ -1025,7 +1025,7 @@ class Libraries(object):
query = 'SELECT * FROM library_sections WHERE section_name = ?'
result = monitor_db.select(query=query, args=[section_name])
if result:
- logger.info(u"Tautulli Libraries :: Re-adding library with name %s to database." % section_name)
+ logger.info("Tautulli Libraries :: Re-adding library with name %s to database." % section_name)
monitor_db.action('UPDATE library_sections SET deleted_section = 0 WHERE section_name = ?', [section_name])
monitor_db.action('UPDATE library_sections SET keep_history = 1 WHERE section_name = ?', [section_name])
monitor_db.action('UPDATE library_sections SET do_notify = 1 WHERE section_name = ?', [section_name])
@@ -1035,7 +1035,7 @@ class Libraries(object):
return False
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to execute database query for undelete: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to execute database query for undelete: %s." % e)
def delete_media_info_cache(self, section_id=None):
import os
@@ -1045,12 +1045,12 @@ class Libraries(object):
[os.remove(os.path.join(plexpy.CONFIG.CACHE_DIR, f)) for f in os.listdir(plexpy.CONFIG.CACHE_DIR)
if f.startswith('media_info_%s' % section_id) and f.endswith('.json')]
- logger.debug(u"Tautulli Libraries :: Deleted media info table cache for section_id %s." % section_id)
+ logger.debug("Tautulli Libraries :: Deleted media info table cache for section_id %s." % section_id)
return 'Deleted media info table cache for library with id %s.' % section_id
else:
return 'Unable to delete media info table cache, section_id not valid.'
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to delete media info table cache: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to delete media info table cache: %s." % e)
def delete_duplicate_libraries(self):
monitor_db = database.MonitorDatabase()
@@ -1061,16 +1061,16 @@ class Libraries(object):
server_id = plexpy.CONFIG.PMS_IDENTIFIER
try:
- logger.debug(u"Tautulli Libraries :: Deleting libraries where server_id does not match %s." % server_id)
+ logger.debug("Tautulli Libraries :: Deleting libraries where server_id does not match %s." % server_id)
monitor_db.action('DELETE FROM library_sections WHERE server_id != ?', [server_id])
return 'Deleted duplicate libraries from the database.'
except Exception as e:
- logger.warn(u"Tautulli Libraries :: Unable to delete duplicate libraries: %s." % e)
+ logger.warn("Tautulli Libraries :: Unable to delete duplicate libraries: %s." % e)
def update_libraries_db_notify():
- logger.info(u"Tautulli Libraries :: Upgrading library notification toggles...")
+ logger.info("Tautulli Libraries :: Upgrading library notification toggles...")
# Set flag first in case something fails we don't want to keep re-adding the notifiers
plexpy.CONFIG.__setattr__('UPDATE_LIBRARIES_DB_NOTIFY', 0)
diff --git a/plexpy/mobile_app.py b/plexpy/mobile_app.py
index 45ef1a4d..de89a23d 100644
--- a/plexpy/mobile_app.py
+++ b/plexpy/mobile_app.py
@@ -64,13 +64,13 @@ def add_mobile_device(device_id=None, device_name=None, device_token=None, frien
try:
result = db.upsert(table_name='mobile_devices', key_dict=keys, value_dict=values)
except Exception as e:
- logger.warn(u"Tautulli MobileApp :: Failed to register mobile device in the database: %s." % e)
+ logger.warn("Tautulli MobileApp :: Failed to register mobile device in the database: %s." % e)
return
if result == 'insert':
- logger.info(u"Tautulli MobileApp :: Registered mobile device '%s' in the database." % device_name)
+ logger.info("Tautulli MobileApp :: Registered mobile device '%s' in the database." % device_name)
else:
- logger.debug(u"Tautulli MobileApp :: Re-registered mobile device '%s' in the database." % device_name)
+ logger.debug("Tautulli MobileApp :: Re-registered mobile device '%s' in the database." % device_name)
return True
@@ -79,7 +79,7 @@ def get_mobile_device_config(mobile_device_id=None):
if str(mobile_device_id).isdigit():
mobile_device_id = int(mobile_device_id)
else:
- logger.error(u"Tautulli MobileApp :: Unable to retrieve mobile device config: invalid mobile_device_id %s." % mobile_device_id)
+ logger.error("Tautulli MobileApp :: Unable to retrieve mobile device config: invalid mobile_device_id %s." % mobile_device_id)
return None
db = database.MonitorDatabase()
@@ -93,7 +93,7 @@ def set_mobile_device_config(mobile_device_id=None, **kwargs):
if str(mobile_device_id).isdigit():
mobile_device_id = int(mobile_device_id)
else:
- logger.error(u"Tautulli MobileApp :: Unable to set exisiting mobile device: invalid mobile_device_id %s." % mobile_device_id)
+ logger.error("Tautulli MobileApp :: Unable to set exisiting mobile device: invalid mobile_device_id %s." % mobile_device_id)
return False
keys = {'id': mobile_device_id}
@@ -105,10 +105,10 @@ def set_mobile_device_config(mobile_device_id=None, **kwargs):
db = database.MonitorDatabase()
try:
db.upsert(table_name='mobile_devices', key_dict=keys, value_dict=values)
- logger.info(u"Tautulli MobileApp :: Updated mobile device agent: mobile_device_id %s." % mobile_device_id)
+ logger.info("Tautulli MobileApp :: Updated mobile device agent: mobile_device_id %s." % mobile_device_id)
return True
except Exception as e:
- logger.warn(u"Tautulli MobileApp :: Unable to update mobile device: %s." % e)
+ logger.warn("Tautulli MobileApp :: Unable to update mobile device: %s." % e)
return False
@@ -116,7 +116,7 @@ def delete_mobile_device(mobile_device_id=None):
db = database.MonitorDatabase()
if mobile_device_id:
- logger.debug(u"Tautulli MobileApp :: Deleting device_id %s from the database." % mobile_device_id)
+ logger.debug("Tautulli MobileApp :: Deleting device_id %s from the database." % mobile_device_id)
result = db.action('DELETE FROM mobile_devices WHERE id = ?', args=[mobile_device_id])
return True
else:
@@ -132,7 +132,7 @@ def set_last_seen(device_token=None):
result = db.action('UPDATE mobile_devices SET last_seen = ? WHERE device_token = ?',
args=[last_seen, device_token])
except Exception as e:
- logger.warn(u"Tautulli MobileApp :: Failed to set last_seen time for device: %s." % e)
+ logger.warn("Tautulli MobileApp :: Failed to set last_seen time for device: %s." % e)
return
diff --git a/plexpy/newsletter_handler.py b/plexpy/newsletter_handler.py
index 24ec8224..8fcfa2a0 100644
--- a/plexpy/newsletter_handler.py
+++ b/plexpy/newsletter_handler.py
@@ -30,7 +30,7 @@ NEWSLETTER_SCHED = None
def add_newsletter_each(newsletter_id=None, notify_action=None, **kwargs):
if not notify_action:
- logger.debug(u"Tautulli NewsletterHandler :: Notify called but no action received.")
+ logger.debug("Tautulli NewsletterHandler :: Notify called but no action received.")
return
data = {'newsletter': True,
@@ -58,19 +58,19 @@ def schedule_newsletter_job(newsletter_job_id, name='', func=None, remove_job=Fa
if NEWSLETTER_SCHED.get_job(newsletter_job_id):
if remove_job:
NEWSLETTER_SCHED.remove_job(newsletter_job_id)
- logger.info(u"Tautulli NewsletterHandler :: Removed scheduled newsletter: %s" % name)
+ logger.info("Tautulli NewsletterHandler :: Removed scheduled newsletter: %s" % name)
else:
NEWSLETTER_SCHED.reschedule_job(
newsletter_job_id, args=args, trigger=CronTrigger.from_crontab(cron))
- logger.info(u"Tautulli NewsletterHandler :: Re-scheduled newsletter: %s" % name)
+ logger.info("Tautulli NewsletterHandler :: Re-scheduled newsletter: %s" % name)
elif not remove_job:
NEWSLETTER_SCHED.add_job(
func, args=args, id=newsletter_job_id, trigger=CronTrigger.from_crontab(cron))
- logger.info(u"Tautulli NewsletterHandler :: Scheduled newsletter: %s" % name)
+ logger.info("Tautulli NewsletterHandler :: Scheduled newsletter: %s" % name)
def notify(newsletter_id=None, notify_action=None, **kwargs):
- logger.info(u"Tautulli NewsletterHandler :: Preparing newsletter for newsletter_id %s." % newsletter_id)
+ logger.info("Tautulli NewsletterHandler :: Preparing newsletter for newsletter_id %s." % newsletter_id)
newsletter_config = newsletters.get_newsletter_config(newsletter_id=newsletter_id)
@@ -149,7 +149,7 @@ def set_notify_state(newsletter, notify_action, subject, body, message, filename
db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values)
return db.last_insert_id()
else:
- logger.error(u"Tautulli NewsletterHandler :: Unable to set notify state.")
+ logger.error("Tautulli NewsletterHandler :: Unable to set notify state.")
def set_notify_success(newsletter_log_id):
@@ -202,6 +202,6 @@ def get_newsletter(newsletter_uuid=None, newsletter_id_name=None):
newsletter = n_file.read()
return newsletter
except OSError as e:
- logger.error(u"Tautulli NewsletterHandler :: Failed to retrieve newsletter '%s': %s" % (newsletter_uuid, e))
+ logger.error("Tautulli NewsletterHandler :: Failed to retrieve newsletter '%s': %s" % (newsletter_uuid, e))
else:
- logger.warn(u"Tautulli NewsletterHandler :: Newsletter file '%s' is missing." % newsletter_file)
+ logger.warn("Tautulli NewsletterHandler :: Newsletter file '%s' is missing." % newsletter_file)
diff --git a/plexpy/newsletters.py b/plexpy/newsletters.py
index 69d62a2f..c38cda34 100644
--- a/plexpy/newsletters.py
+++ b/plexpy/newsletters.py
@@ -117,7 +117,7 @@ def delete_newsletter(newsletter_id=None):
db = database.MonitorDatabase()
if str(newsletter_id).isdigit():
- logger.debug(u"Tautulli Newsletters :: Deleting newsletter_id %s from the database."
+ logger.debug("Tautulli Newsletters :: Deleting newsletter_id %s from the database."
% newsletter_id)
result = db.action('DELETE FROM newsletters WHERE id = ?', args=[newsletter_id])
return True
@@ -129,7 +129,7 @@ def get_newsletter_config(newsletter_id=None, mask_passwords=False):
if str(newsletter_id).isdigit():
newsletter_id = int(newsletter_id)
else:
- logger.error(u"Tautulli Newsletters :: Unable to retrieve newsletter config: invalid newsletter_id %s."
+ logger.error("Tautulli Newsletters :: Unable to retrieve newsletter config: invalid newsletter_id %s."
% newsletter_id)
return None
@@ -150,7 +150,7 @@ def get_newsletter_config(newsletter_id=None, mask_passwords=False):
config=config, email_config=email_config,
subject=subject, body=body, message=message)
except Exception as e:
- logger.error(u"Tautulli Newsletters :: Failed to get newsletter config options: %s." % e)
+ logger.error("Tautulli Newsletters :: Failed to get newsletter config options: %s." % e)
return
if mask_passwords:
@@ -171,14 +171,14 @@ def add_newsletter_config(agent_id=None, **kwargs):
if str(agent_id).isdigit():
agent_id = int(agent_id)
else:
- logger.error(u"Tautulli Newsletters :: Unable to add new newsletter: invalid agent_id %s."
+ logger.error("Tautulli Newsletters :: Unable to add new newsletter: invalid agent_id %s."
% agent_id)
return False
agent = next((a for a in available_newsletter_agents() if a['id'] == agent_id), None)
if not agent:
- logger.error(u"Tautulli Newsletters :: Unable to retrieve new newsletter agent: invalid agent_id %s."
+ logger.error("Tautulli Newsletters :: Unable to retrieve new newsletter agent: invalid agent_id %s."
% agent_id)
return False
@@ -201,12 +201,12 @@ def add_newsletter_config(agent_id=None, **kwargs):
try:
db.upsert(table_name='newsletters', key_dict=keys, value_dict=values)
newsletter_id = db.last_insert_id()
- logger.info(u"Tautulli Newsletters :: Added new newsletter agent: %s (newsletter_id %s)."
+ logger.info("Tautulli Newsletters :: Added new newsletter agent: %s (newsletter_id %s)."
% (agent['label'], newsletter_id))
blacklist_logger()
return newsletter_id
except Exception as e:
- logger.warn(u"Tautulli Newsletters :: Unable to add newsletter agent: %s." % e)
+ logger.warn("Tautulli Newsletters :: Unable to add newsletter agent: %s." % e)
return False
@@ -214,14 +214,14 @@ def set_newsletter_config(newsletter_id=None, agent_id=None, **kwargs):
if str(agent_id).isdigit():
agent_id = int(agent_id)
else:
- logger.error(u"Tautulli Newsletters :: Unable to set existing newsletter: invalid agent_id %s."
+ logger.error("Tautulli Newsletters :: Unable to set existing newsletter: invalid agent_id %s."
% agent_id)
return False
agent = next((a for a in available_newsletter_agents() if a['id'] == agent_id), None)
if not agent:
- logger.error(u"Tautulli Newsletters :: Unable to retrieve existing newsletter agent: invalid agent_id %s."
+ logger.error("Tautulli Newsletters :: Unable to retrieve existing newsletter agent: invalid agent_id %s."
% agent_id)
return False
@@ -266,13 +266,13 @@ def set_newsletter_config(newsletter_id=None, agent_id=None, **kwargs):
db = database.MonitorDatabase()
try:
db.upsert(table_name='newsletters', key_dict=keys, value_dict=values)
- logger.info(u"Tautulli Newsletters :: Updated newsletter agent: %s (newsletter_id %s)."
+ logger.info("Tautulli Newsletters :: Updated newsletter agent: %s (newsletter_id %s)."
% (agent['label'], newsletter_id))
newsletter_handler.schedule_newsletters(newsletter_id=newsletter_id)
blacklist_logger()
return True
except Exception as e:
- logger.warn(u"Tautulli Newsletters :: Unable to update newsletter agent: %s." % e)
+ logger.warn("Tautulli Newsletters :: Unable to update newsletter agent: %s." % e)
return False
@@ -287,7 +287,7 @@ def send_newsletter(newsletter_id=None, subject=None, body=None, message=None, n
messsage=message)
return agent.send()
else:
- logger.debug(u"Tautulli Newsletters :: Notification requested but no newsletter_id received.")
+ logger.debug("Tautulli Newsletters :: Notification requested but no newsletter_id received.")
def blacklist_logger():
@@ -492,11 +492,11 @@ class Newsletter(object):
self.newsletter = self.generate_newsletter()
if self.template_error:
- logger.error(u"Tautulli Newsletters :: %s newsletter failed to render template. Newsletter not sent." % self.NAME)
+ logger.error("Tautulli Newsletters :: %s newsletter failed to render template. Newsletter not sent." % self.NAME)
return False
if not self._has_data():
- logger.warn(u"Tautulli Newsletters :: %s newsletter has no data. Newsletter not sent." % self.NAME)
+ logger.warn("Tautulli Newsletters :: %s newsletter has no data. Newsletter not sent." % self.NAME)
return False
self._save()
@@ -522,9 +522,9 @@ class Newsletter(object):
n_file.write(line + '\r\n')
#n_file.write(line.strip())
- logger.info(u"Tautulli Newsletters :: %s newsletter saved to '%s'" % (self.NAME, newsletter_file))
+ logger.info("Tautulli Newsletters :: %s newsletter saved to '%s'" % (self.NAME, newsletter_file))
except OSError as e:
- logger.error(u"Tautulli Newsletters :: Failed to save %s newsletter to '%s': %s"
+ logger.error("Tautulli Newsletters :: Failed to save %s newsletter to '%s': %s"
% (self.NAME, newsletter_file, e))
def _send(self):
@@ -608,34 +608,28 @@ class Newsletter(object):
try:
subject = custom_formatter.format(unicode(self.subject), **self.parameters)
except LookupError as e:
- logger.error(
- u"Tautulli Newsletter :: Unable to parse parameter %s in newsletter subject. Using fallback." % e)
+ logger.error("Tautulli Newsletter :: Unable to parse parameter %s in newsletter subject. Using fallback." % e)
subject = unicode(self._DEFAULT_SUBJECT).format(**self.parameters)
except Exception as e:
- logger.error(
- u"Tautulli Newsletter :: Unable to parse custom newsletter subject: %s. Using fallback." % e)
+ logger.error("Tautulli Newsletter :: Unable to parse custom newsletter subject: %s. Using fallback." % e)
subject = unicode(self._DEFAULT_SUBJECT).format(**self.parameters)
try:
body = custom_formatter.format(unicode(self.body), **self.parameters)
except LookupError as e:
- logger.error(
- u"Tautulli Newsletter :: Unable to parse parameter %s in newsletter body. Using fallback." % e)
+ logger.error("Tautulli Newsletter :: Unable to parse parameter %s in newsletter body. Using fallback." % e)
body = unicode(self._DEFAULT_BODY).format(**self.parameters)
except Exception as e:
- logger.error(
- u"Tautulli Newsletter :: Unable to parse custom newsletter body: %s. Using fallback." % e)
+ logger.error("Tautulli Newsletter :: Unable to parse custom newsletter body: %s. Using fallback." % e)
body = unicode(self._DEFAULT_BODY).format(**self.parameters)
try:
message = custom_formatter.format(unicode(self.message), **self.parameters)
except LookupError as e:
- logger.error(
- u"Tautulli Newsletter :: Unable to parse parameter %s in newsletter message. Using fallback." % e)
+ logger.error("Tautulli Newsletter :: Unable to parse parameter %s in newsletter message. Using fallback." % e)
message = unicode(self._DEFAULT_MESSAGE).format(**self.parameters)
except Exception as e:
- logger.error(
- u"Tautulli Newsletter :: Unable to parse custom newsletter message: %s. Using fallback." % e)
+ logger.error("Tautulli Newsletter :: Unable to parse custom newsletter message: %s. Using fallback." % e)
message = unicode(self._DEFAULT_MESSAGE).format(**self.parameters)
return subject, body, message
@@ -647,12 +641,10 @@ class Newsletter(object):
try:
filename = custom_formatter.format(unicode(self.filename), **self.parameters)
except LookupError as e:
- logger.error(
- u"Tautulli Newsletter :: Unable to parse parameter %s in newsletter filename. Using fallback." % e)
+ logger.error("Tautulli Newsletter :: Unable to parse parameter %s in newsletter filename. Using fallback." % e)
filename = unicode(self._DEFAULT_FILENAME).format(**self.parameters)
except Exception as e:
- logger.error(
- u"Tautulli Newsletter :: Unable to parse custom newsletter subject: %s. Using fallback." % e)
+ logger.error("Tautulli Newsletter :: Unable to parse custom newsletter subject: %s. Using fallback." % e)
filename = unicode(self._DEFAULT_FILENAME).format(**self.parameters)
return filename
@@ -809,7 +801,7 @@ class RecentlyAdded(Newsletter):
from notification_handler import get_img_info, set_hash_image_info
if not self.config['incl_libraries']:
- logger.warn(u"Tautulli Newsletters :: Failed to retrieve %s newsletter data: no libraries selected." % self.NAME)
+ logger.warn("Tautulli Newsletters :: Failed to retrieve %s newsletter data: no libraries selected." % self.NAME)
media_types = set()
for s in self._get_sections():
diff --git a/plexpy/notification_handler.py b/plexpy/notification_handler.py
index 5f99ce11..7ff43178 100644
--- a/plexpy/notification_handler.py
+++ b/plexpy/notification_handler.py
@@ -62,15 +62,15 @@ def process_queue():
else:
add_notifier_each(**params)
except Exception as e:
- logger.exception(u"Tautulli NotificationHandler :: Notification thread exception: %s" % e)
+ logger.exception("Tautulli NotificationHandler :: Notification thread exception: %s" % e)
queue.task_done()
- logger.info(u"Tautulli NotificationHandler :: Notification thread exiting...")
+ logger.info("Tautulli NotificationHandler :: Notification thread exiting...")
def start_threads(num_threads=1):
- logger.info(u"Tautulli NotificationHandler :: Starting background notification handler ({} threads).".format(num_threads))
+ logger.info("Tautulli NotificationHandler :: Starting background notification handler ({} threads).".format(num_threads))
for x in range(num_threads):
thread = threading.Thread(target=process_queue)
thread.daemon = True
@@ -79,7 +79,7 @@ def start_threads(num_threads=1):
def add_notifier_each(notifier_id=None, notify_action=None, stream_data=None, timeline_data=None, manual_trigger=False, **kwargs):
if not notify_action:
- logger.debug(u"Tautulli NotificationHandler :: Notify called but no action received.")
+ logger.debug("Tautulli NotificationHandler :: Notify called but no action received.")
return
if notifier_id:
@@ -111,7 +111,7 @@ def add_notifier_each(notifier_id=None, notify_action=None, stream_data=None, ti
**kwargs)
if not parameters:
- logger.error(u"Tautulli NotificationHandler :: Failed to build notification parameters.")
+ logger.error("Tautulli NotificationHandler :: Failed to build notification parameters.")
return
for notifier in notifiers_enabled:
@@ -127,7 +127,7 @@ def add_notifier_each(notifier_id=None, notify_action=None, stream_data=None, ti
data.update(kwargs)
plexpy.NOTIFY_QUEUE.put(data)
else:
- logger.debug(u"Tautulli NotificationHandler :: Custom notification conditions not satisfied, skipping notifier_id %s." % notifier['id'])
+ logger.debug("Tautulli NotificationHandler :: Custom notification conditions not satisfied, skipping notifier_id %s." % notifier['id'])
# Add on_concurrent and on_newdevice to queue if action is on_play
if notify_action == 'on_play':
@@ -147,11 +147,11 @@ def notify_conditions(notify_action=None, stream_data=None, timeline_data=None):
# library_details = library_data.get_details(section_id=stream_data['section_id'])
# if not user_details['do_notify']:
- # logger.debug(u"Tautulli NotificationHandler :: Notifications for user '%s' are disabled." % user_details['username'])
+ # logger.debug("Tautulli NotificationHandler :: Notifications for user '%s' are disabled." % user_details['username'])
# return False
#
# elif not library_details['do_notify'] and notify_action not in ('on_concurrent', 'on_newdevice'):
- # logger.debug(u"Tautulli NotificationHandler :: Notifications for library '%s' are disabled." % library_details['section_name'])
+ # logger.debug("Tautulli NotificationHandler :: Notifications for library '%s' are disabled." % library_details['section_name'])
# return False
if notify_action == 'on_concurrent':
@@ -201,7 +201,7 @@ def notify_conditions(notify_action=None, stream_data=None, timeline_data=None):
# library_details = library_data.get_details(section_id=timeline_data['section_id'])
#
# if not library_details['do_notify_created']:
- # # logger.debug(u"Tautulli NotificationHandler :: Notifications for library '%s' is disabled." % library_details['section_name'])
+ # # logger.debug("Tautulli NotificationHandler :: Notifications for library '%s' is disabled." % library_details['section_name'])
# return False
return True
@@ -218,7 +218,7 @@ def notify_custom_conditions(notifier_id=None, parameters=None):
custom_conditions = notifier_config['custom_conditions']
if custom_conditions_logic or any(c for c in custom_conditions if c['value']):
- logger.debug(u"Tautulli NotificationHandler :: Checking custom notification conditions for notifier_id %s."
+ logger.debug("Tautulli NotificationHandler :: Checking custom notification conditions for notifier_id %s."
% notifier_id)
logic_groups = None
@@ -227,7 +227,7 @@ def notify_custom_conditions(notifier_id=None, parameters=None):
# Parse and validate the custom conditions logic
logic_groups = helpers.parse_condition_logic_string(custom_conditions_logic, len(custom_conditions))
except ValueError as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to parse custom condition logic '%s': %s."
+ logger.error("Tautulli NotificationHandler :: Unable to parse custom condition logic '%s': %s."
% (custom_conditions_logic, e))
return False
@@ -244,7 +244,7 @@ def notify_custom_conditions(notifier_id=None, parameters=None):
if not parameter or not operator or not values:
evaluated = True
evaluated_conditions.append(evaluated)
- logger.debug(u"Tautulli NotificationHandler :: {%s} Blank condition > %s" % (i+1, evaluated))
+ logger.debug("Tautulli NotificationHandler :: {%s} Blank condition > %s" % (i+1, evaluated))
continue
# Make sure the condition values is in a list
@@ -263,7 +263,7 @@ def notify_custom_conditions(notifier_id=None, parameters=None):
values = [helpers.cast_to_float(v) for v in values]
except ValueError as e:
- logger.error(u"Tautulli NotificationHandler :: {%s} Unable to cast condition '%s', values '%s', to type '%s'."
+ logger.error("Tautulli NotificationHandler :: {%s} Unable to cast condition '%s', values '%s', to type '%s'."
% (i+1, parameter, values, parameter_type))
return False
@@ -279,7 +279,7 @@ def notify_custom_conditions(notifier_id=None, parameters=None):
parameter_value = helpers.cast_to_float(parameter_value)
except ValueError as e:
- logger.error(u"Tautulli NotificationHandler :: {%s} Unable to cast parameter '%s', value '%s', to type '%s'."
+ logger.error("Tautulli NotificationHandler :: {%s} Unable to cast parameter '%s', value '%s', to type '%s'."
% (i+1, parameter, parameter_value, parameter_type))
return False
@@ -310,28 +310,28 @@ def notify_custom_conditions(notifier_id=None, parameters=None):
else:
evaluated = None
- logger.warn(u"Tautulli NotificationHandler :: {%s} Invalid condition operator '%s' > %s."
+ logger.warn("Tautulli NotificationHandler :: {%s} Invalid condition operator '%s' > %s."
% (i+1, operator, evaluated))
evaluated_conditions.append(evaluated)
- logger.debug(u"Tautulli NotificationHandler :: {%s} %s | %s | %s > '%s' > %s"
+ logger.debug("Tautulli NotificationHandler :: {%s} %s | %s | %s > '%s' > %s"
% (i+1, parameter, operator, ' or '.join(["'%s'" % v for v in values]), parameter_value, evaluated))
if logic_groups:
# Format and evaluate the logic string
try:
evaluated_logic = helpers.eval_logic_groups_to_bool(logic_groups, evaluated_conditions)
- logger.debug(u"Tautulli NotificationHandler :: Condition logic: %s > %s"
+ logger.debug("Tautulli NotificationHandler :: Condition logic: %s > %s"
% (custom_conditions_logic, evaluated_logic))
except Exception as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to evaluate custom condition logic: %s." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to evaluate custom condition logic: %s." % e)
return False
else:
evaluated_logic = all(evaluated_conditions[1:])
- logger.debug(u"Tautulli NotificationHandler :: Condition logic [blank]: %s > %s"
+ logger.debug("Tautulli NotificationHandler :: Condition logic [blank]: %s > %s"
% (' and '.join(['{%s}' % (i+1) for i in range(len(custom_conditions))]), evaluated_logic))
- logger.debug(u"Tautulli NotificationHandler :: Custom conditions evaluated to '{}'. Conditions: {}.".format(
+ logger.debug("Tautulli NotificationHandler :: Custom conditions evaluated to '{}'. Conditions: {}.".format(
evaluated_logic, evaluated_conditions[1:]))
return evaluated_logic
@@ -340,7 +340,7 @@ def notify_custom_conditions(notifier_id=None, parameters=None):
def notify(notifier_id=None, notify_action=None, stream_data=None, timeline_data=None, parameters=None, **kwargs):
- logger.info(u"Tautulli NotificationHandler :: Preparing notification for notifier_id %s." % notifier_id)
+ logger.info("Tautulli NotificationHandler :: Preparing notification for notifier_id %s." % notifier_id)
notifier_config = notifiers.get_notifier_config(notifier_id=notifier_id)
@@ -456,7 +456,7 @@ def set_notify_state(notifier, notify_action, subject='', body='', script_args='
monitor_db.upsert(table_name='notify_log', key_dict=keys, value_dict=values)
return monitor_db.last_insert_id()
else:
- logger.error(u"Tautulli NotificationHandler :: Unable to set notify state.")
+ logger.error("Tautulli NotificationHandler :: Unable to set notify state.")
def set_notify_success(notification_id):
@@ -1049,10 +1049,10 @@ def build_notify_text(subject='', body='', notify_action=None, parameters=None,
# Make sure subject and body text are strings
if not isinstance(subject, basestring):
- logger.error(u"Tautulli NotificationHandler :: Invalid subject text. Using fallback.")
+ logger.error("Tautulli NotificationHandler :: Invalid subject text. Using fallback.")
subject = default_subject
if not isinstance(body, basestring):
- logger.error(u"Tautulli NotificationHandler :: Invalid body text. Using fallback.")
+ logger.error("Tautulli NotificationHandler :: Invalid body text. Using fallback.")
body = default_body
media_type = parameters.get('media_type')
@@ -1093,10 +1093,10 @@ def build_notify_text(subject='', body='', notify_action=None, parameters=None,
try:
script_args = [str_formatter(arg) for arg in helpers.split_args(subject)]
except LookupError as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to parse parameter %s in script argument. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse parameter %s in script argument. Using fallback." % e)
script_args = []
except Exception as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to parse custom script arguments: %s. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse custom script arguments: %s. Using fallback." % e)
script_args = []
elif agent_id == 25:
@@ -1104,53 +1104,51 @@ def build_notify_text(subject='', body='', notify_action=None, parameters=None,
try:
subject = json.loads(subject)
except ValueError as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to parse custom webhook json header data: %s. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse custom webhook json header data: %s. Using fallback." % e)
subject = ''
if subject:
try:
subject = json.dumps(helpers.traverse_map(subject, str_formatter))
except LookupError as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to parse parameter %s in webhook header data. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse parameter %s in webhook header data. Using fallback." % e)
subject = ''
except Exception as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to parse custom webhook header data: %s. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse custom webhook header data: %s. Using fallback." % e)
subject = ''
if body:
try:
body = json.loads(body)
except ValueError as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to parse custom webhook json body data: %s. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse custom webhook json body data: %s. Using fallback." % e)
body = ''
if body:
try:
body = json.dumps(helpers.traverse_map(body, str_formatter))
except LookupError as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to parse parameter %s in webhook body data. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse parameter %s in webhook body data. Using fallback." % e)
body = ''
except Exception as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to parse custom webhook body data: %s. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse custom webhook body data: %s. Using fallback." % e)
body = ''
else:
try:
subject = str_formatter(subject)
except LookupError as e:
- logger.error(
- u"Tautulli NotificationHandler :: Unable to parse parameter %s in notification subject. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse parameter %s in notification subject. Using fallback." % e)
subject = unicode(default_subject).format(**parameters)
except Exception as e:
- logger.error(
- u"Tautulli NotificationHandler :: Unable to parse custom notification subject: %s. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse custom notification subject: %s. Using fallback." % e)
subject = unicode(default_subject).format(**parameters)
try:
body = str_formatter(body)
except LookupError as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to parse parameter %s in notification body. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse parameter %s in notification body. Using fallback." % e)
body = unicode(default_body).format(**parameters)
except Exception as e:
- logger.error(u"Tautulli NotificationHandler :: Unable to parse custom notification body: %s. Using fallback." % e)
+ logger.error("Tautulli NotificationHandler :: Unable to parse custom notification body: %s. Using fallback." % e)
body = unicode(default_body).format(**parameters)
return subject, body, script_args
@@ -1364,16 +1362,16 @@ def lookup_tvmaze_by_id(rating_key=None, thetvdb_id=None, imdb_id=None):
'WHERE rating_key = ?'
tvmaze_info = db.select_single(query, args=[rating_key])
except Exception as e:
- logger.warn(u"Tautulli NotificationHandler :: Unable to execute database query for lookup_tvmaze_by_tvdb_id: %s." % e)
+ logger.warn("Tautulli NotificationHandler :: Unable to execute database query for lookup_tvmaze_by_tvdb_id: %s." % e)
return {}
if not tvmaze_info:
tvmaze_info = {}
if thetvdb_id:
- logger.debug(u"Tautulli NotificationHandler :: Looking up TVmaze info for thetvdb_id '{}'.".format(thetvdb_id))
+ logger.debug("Tautulli NotificationHandler :: Looking up TVmaze info for thetvdb_id '{}'.".format(thetvdb_id))
else:
- logger.debug(u"Tautulli NotificationHandler :: Looking up TVmaze info for imdb_id '{}'.".format(imdb_id))
+ logger.debug("Tautulli NotificationHandler :: Looking up TVmaze info for imdb_id '{}'.".format(imdb_id))
params = {'thetvdb': thetvdb_id} if thetvdb_id else {'imdb': imdb_id}
response, err_msg, req_msg = request.request_response2('http://api.tvmaze.com/lookup/shows', params=params)
@@ -1398,10 +1396,10 @@ def lookup_tvmaze_by_id(rating_key=None, thetvdb_id=None, imdb_id=None):
else:
if err_msg:
- logger.error(u"Tautulli NotificationHandler :: {}".format(err_msg))
+ logger.error("Tautulli NotificationHandler :: {}".format(err_msg))
if req_msg:
- logger.debug(u"Tautulli NotificationHandler :: Request response: {}".format(req_msg))
+ logger.debug("Tautulli NotificationHandler :: Request response: {}".format(req_msg))
return tvmaze_info
@@ -1414,16 +1412,16 @@ def lookup_themoviedb_by_id(rating_key=None, thetvdb_id=None, imdb_id=None):
'WHERE rating_key = ?'
themoviedb_info = db.select_single(query, args=[rating_key])
except Exception as e:
- logger.warn(u"Tautulli NotificationHandler :: Unable to execute database query for lookup_themoviedb_by_imdb_id: %s." % e)
+ logger.warn("Tautulli NotificationHandler :: Unable to execute database query for lookup_themoviedb_by_imdb_id: %s." % e)
return {}
if not themoviedb_info:
themoviedb_info = {}
if thetvdb_id:
- logger.debug(u"Tautulli NotificationHandler :: Looking up The Movie Database info for thetvdb_id '{}'.".format(thetvdb_id))
+ logger.debug("Tautulli NotificationHandler :: Looking up The Movie Database info for thetvdb_id '{}'.".format(thetvdb_id))
else:
- logger.debug(u"Tautulli NotificationHandler :: Looking up The Movie Database info for imdb_id '{}'.".format(imdb_id))
+ logger.debug("Tautulli NotificationHandler :: Looking up The Movie Database info for imdb_id '{}'.".format(imdb_id))
params = {'api_key': plexpy.CONFIG.THEMOVIEDB_APIKEY,
'external_source': 'tvdb_id' if thetvdb_id else 'imdb_id'
@@ -1461,10 +1459,10 @@ def lookup_themoviedb_by_id(rating_key=None, thetvdb_id=None, imdb_id=None):
else:
if err_msg:
- logger.error(u"Tautulli NotificationHandler :: {}".format(err_msg))
+ logger.error("Tautulli NotificationHandler :: {}".format(err_msg))
if req_msg:
- logger.debug(u"Tautulli NotificationHandler :: Request response: {}".format(req_msg))
+ logger.debug("Tautulli NotificationHandler :: Request response: {}".format(req_msg))
return themoviedb_info
@@ -1480,7 +1478,7 @@ def get_themoviedb_info(rating_key=None, media_type=None, themoviedb_id=None):
'WHERE rating_key = ?'
result = db.select_single(query, args=[rating_key])
except Exception as e:
- logger.warn(u"Tautulli NotificationHandler :: Unable to execute database query for get_themoviedb_info: %s." % e)
+ logger.warn("Tautulli NotificationHandler :: Unable to execute database query for get_themoviedb_info: %s." % e)
return {}
if result:
@@ -1491,7 +1489,7 @@ def get_themoviedb_info(rating_key=None, media_type=None, themoviedb_id=None):
themoviedb_json = {}
- logger.debug(u"Tautulli NotificationHandler :: Looking up The Movie Database info for themoviedb_id '{}'.".format(themoviedb_id))
+ logger.debug("Tautulli NotificationHandler :: Looking up The Movie Database info for themoviedb_id '{}'.".format(themoviedb_id))
params = {'api_key': plexpy.CONFIG.THEMOVIEDB_APIKEY}
response, err_msg, req_msg = request.request_response2('https://api.themoviedb.org/3/{}/{}'.format(media_type, themoviedb_id), params=params)
@@ -1514,10 +1512,10 @@ def get_themoviedb_info(rating_key=None, media_type=None, themoviedb_id=None):
else:
if err_msg:
- logger.error(u"Tautulli NotificationHandler :: {}".format(err_msg))
+ logger.error("Tautulli NotificationHandler :: {}".format(err_msg))
if req_msg:
- logger.debug(u"Tautulli NotificationHandler :: Request response: {}".format(req_msg))
+ logger.debug("Tautulli NotificationHandler :: Request response: {}".format(req_msg))
return themoviedb_json
@@ -1531,7 +1529,7 @@ def lookup_musicbrainz_info(musicbrainz_type=None, rating_key=None, artist=None,
'WHERE rating_key = ?'
musicbrainz_info = db.select_single(query, args=[rating_key])
except Exception as e:
- logger.warn(u"Tautulli NotificationHandler :: Unable to execute database query for lookup_musicbrainz: %s." % e)
+ logger.warn("Tautulli NotificationHandler :: Unable to execute database query for lookup_musicbrainz: %s." % e)
return {}
if not musicbrainz_info:
@@ -1542,23 +1540,23 @@ def lookup_musicbrainz_info(musicbrainz_type=None, rating_key=None, artist=None,
)
if musicbrainz_type == 'artist':
- logger.debug(u"Tautulli NotificationHandler :: Looking up MusicBrainz info for "
- u"{} '{}'.".format(musicbrainz_type, artist))
+ logger.debug("Tautulli NotificationHandler :: Looking up MusicBrainz info for "
+ "{} '{}'.".format(musicbrainz_type, artist))
result = musicbrainzngs.search_artists(artist=artist, strict=True, limit=1)
if result['artist-list']:
musicbrainz_info = result['artist-list'][0]
elif musicbrainz_type == 'release':
- logger.debug(u"Tautulli NotificationHandler :: Looking up MusicBrainz info for "
- u"{} '{} - {}'.".format(musicbrainz_type, artist, release))
+ logger.debug("Tautulli NotificationHandler :: Looking up MusicBrainz info for "
+ "{} '{} - {}'.".format(musicbrainz_type, artist, release))
result = musicbrainzngs.search_releases(artist=artist, release=release, tracks=tracks,
strict=True, limit=1)
if result['release-list']:
musicbrainz_info = result['release-list'][0]
elif musicbrainz_type == 'recording':
- logger.debug(u"Tautulli NotificationHandler :: Looking up MusicBrainz info for "
- u"{} '{} - {} - {}'.".format(musicbrainz_type, artist, release, recording))
+ logger.debug("Tautulli NotificationHandler :: Looking up MusicBrainz info for "
+ "{} '{} - {} - {}'.".format(musicbrainz_type, artist, release, recording))
result = musicbrainzngs.search_recordings(artist=artist, release=release, recording=recording,
tracks=tracks, tnum=tnum,
strict=True, limit=1)
@@ -1580,7 +1578,7 @@ def lookup_musicbrainz_info(musicbrainz_type=None, rating_key=None, artist=None,
musicbrainz_info.pop('musicbrainz_json')
else:
- logger.warning(u"Tautulli NotificationHandler :: No match found on MusicBrainz.")
+ logger.warn("Tautulli NotificationHandler :: No match found on MusicBrainz.")
return musicbrainz_info
diff --git a/plexpy/notifiers.py b/plexpy/notifiers.py
index e2dad604..9affc7ed 100644
--- a/plexpy/notifiers.py
+++ b/plexpy/notifiers.py
@@ -447,7 +447,7 @@ def delete_notifier(notifier_id=None):
db = database.MonitorDatabase()
if str(notifier_id).isdigit():
- logger.debug(u"Tautulli Notifiers :: Deleting notifier_id %s from the database."
+ logger.debug("Tautulli Notifiers :: Deleting notifier_id %s from the database."
% notifier_id)
result = db.action('DELETE FROM notifiers WHERE id = ?', args=[notifier_id])
return True
@@ -459,7 +459,7 @@ def get_notifier_config(notifier_id=None, mask_passwords=False):
if str(notifier_id).isdigit():
notifier_id = int(notifier_id)
else:
- logger.error(u"Tautulli Notifiers :: Unable to retrieve notifier config: invalid notifier_id %s."
+ logger.error("Tautulli Notifiers :: Unable to retrieve notifier config: invalid notifier_id %s."
% notifier_id)
return None
@@ -473,7 +473,7 @@ def get_notifier_config(notifier_id=None, mask_passwords=False):
config = json.loads(result.pop('notifier_config', '{}'))
notifier_agent = get_agent_class(agent_id=result['agent_id'], config=config)
except Exception as e:
- logger.error(u"Tautulli Notifiers :: Failed to get notifier config options: %s." % e)
+ logger.error("Tautulli Notifiers :: Failed to get notifier config options: %s." % e)
return
if mask_passwords:
@@ -517,14 +517,14 @@ def add_notifier_config(agent_id=None, **kwargs):
if str(agent_id).isdigit():
agent_id = int(agent_id)
else:
- logger.error(u"Tautulli Notifiers :: Unable to add new notifier: invalid agent_id %s."
+ logger.error("Tautulli Notifiers :: Unable to add new notifier: invalid agent_id %s."
% agent_id)
return False
agent = next((a for a in available_notification_agents() if a['id'] == agent_id), None)
if not agent:
- logger.error(u"Tautulli Notifiers :: Unable to retrieve new notification agent: invalid agent_id %s."
+ logger.error("Tautulli Notifiers :: Unable to retrieve new notification agent: invalid agent_id %s."
% agent_id)
return False
@@ -553,12 +553,12 @@ def add_notifier_config(agent_id=None, **kwargs):
try:
db.upsert(table_name='notifiers', key_dict=keys, value_dict=values)
notifier_id = db.last_insert_id()
- logger.info(u"Tautulli Notifiers :: Added new notification agent: %s (notifier_id %s)."
+ logger.info("Tautulli Notifiers :: Added new notification agent: %s (notifier_id %s)."
% (agent['label'], notifier_id))
blacklist_logger()
return notifier_id
except Exception as e:
- logger.warn(u"Tautulli Notifiers :: Unable to add notification agent: %s." % e)
+ logger.warn("Tautulli Notifiers :: Unable to add notification agent: %s." % e)
return False
@@ -566,14 +566,14 @@ def set_notifier_config(notifier_id=None, agent_id=None, **kwargs):
if str(agent_id).isdigit():
agent_id = int(agent_id)
else:
- logger.error(u"Tautulli Notifiers :: Unable to set existing notifier: invalid agent_id %s."
+ logger.error("Tautulli Notifiers :: Unable to set existing notifier: invalid agent_id %s."
% agent_id)
return False
agent = next((a for a in available_notification_agents() if a['id'] == agent_id), None)
if not agent:
- logger.error(u"Tautulli Notifiers :: Unable to retrieve existing notification agent: invalid agent_id %s."
+ logger.error("Tautulli Notifiers :: Unable to retrieve existing notification agent: invalid agent_id %s."
% agent_id)
return False
@@ -614,7 +614,7 @@ def set_notifier_config(notifier_id=None, agent_id=None, **kwargs):
db = database.MonitorDatabase()
try:
db.upsert(table_name='notifiers', key_dict=keys, value_dict=values)
- logger.info(u"Tautulli Notifiers :: Updated notification agent: %s (notifier_id %s)."
+ logger.info("Tautulli Notifiers :: Updated notification agent: %s (notifier_id %s)."
% (agent['label'], notifier_id))
blacklist_logger()
@@ -623,7 +623,7 @@ def set_notifier_config(notifier_id=None, agent_id=None, **kwargs):
return True
except Exception as e:
- logger.warn(u"Tautulli Notifiers :: Unable to update notification agent: %s." % e)
+ logger.warn("Tautulli Notifiers :: Unable to update notification agent: %s." % e)
return False
@@ -638,7 +638,7 @@ def send_notification(notifier_id=None, subject='', body='', notify_action='', n
notification_id=notification_id,
**kwargs)
else:
- logger.debug(u"Tautulli Notifiers :: Notification requested but no notifier_id received.")
+ logger.debug("Tautulli Notifiers :: Notification requested but no notifier_id received.")
def blacklist_logger():
@@ -813,10 +813,10 @@ class Notifier(object):
def notify(self, subject='', body='', action='', **kwargs):
if self.NAME not in ('Script', 'Webhook'):
if not subject and self.config.get('incl_subject', True):
- logger.error(u"Tautulli Notifiers :: %s notification subject cannot be blank." % self.NAME)
+ logger.error("Tautulli Notifiers :: %s notification subject cannot be blank." % self.NAME)
return
elif not body:
- logger.error(u"Tautulli Notifiers :: %s notification body cannot be blank." % self.NAME)
+ logger.error("Tautulli Notifiers :: %s notification body cannot be blank." % self.NAME)
return
return self.agent_notify(subject=subject, body=body, action=action, **kwargs)
@@ -825,11 +825,11 @@ class Notifier(object):
pass
def make_request(self, url, method='POST', **kwargs):
- logger.info(u"Tautulli Notifiers :: Sending {name} notification...".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: Sending {name} notification...".format(name=self.NAME))
response, err_msg, req_msg = request.request_response2(url, method, **kwargs)
if response and not err_msg:
- logger.info(u"Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
return True
else:
@@ -837,13 +837,13 @@ class Notifier(object):
if response is not None and response.status_code >= 400 and response.status_code < 500:
verify_msg = " Verify you notification agent settings are correct."
- logger.error(u"Tautulli Notifiers :: {name} notification failed.{msg}".format(msg=verify_msg, name=self.NAME))
+ logger.error("Tautulli Notifiers :: {name} notification failed.{msg}".format(msg=verify_msg, name=self.NAME))
if err_msg:
- logger.error(u"Tautulli Notifiers :: {}".format(err_msg))
+ logger.error("Tautulli Notifiers :: {}".format(err_msg))
if req_msg:
- logger.debug(u"Tautulli Notifiers :: Request response: {}".format(req_msg))
+ logger.debug("Tautulli Notifiers :: Request response: {}".format(req_msg))
return False
@@ -876,7 +876,7 @@ class ANDROIDAPP(Notifier):
# Check mobile device is still registered
device = mobile_app.get_mobile_devices(device_id=self.config['device_id'])
if not device:
- logger.warn(u"Tautulli Notifiers :: Unable to send Android app notification: device not registered.")
+ logger.warn("Tautulli Notifiers :: Unable to send Android app notification: device not registered.")
return
else:
device = device[0]
@@ -927,7 +927,7 @@ class ANDROIDAPP(Notifier):
'salt': base64.b64encode(salt)}
}
else:
- logger.warn(u"Tautulli Notifiers :: PyCryptodome library is missing. "
+ logger.warn("Tautulli Notifiers :: PyCryptodome library is missing. "
"Android app notifications will be sent unecrypted. "
"Install the library to encrypt the notifications.")
@@ -951,7 +951,7 @@ class ANDROIDAPP(Notifier):
query = 'SELECT * FROM mobile_devices'
result = db.select(query=query)
except Exception as e:
- logger.warn(u"Tautulli Notifiers :: Unable to retrieve Android app devices list: %s." % e)
+ logger.warn("Tautulli Notifiers :: Unable to retrieve Android app devices list: %s." % e)
return {'': ''}
devices = {}
@@ -1107,7 +1107,7 @@ class BROWSER(Notifier):
}
def agent_notify(self, subject='', body='', action='', **kwargs):
- logger.info(u"Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
return True
def _return_config_options(self):
@@ -1380,11 +1380,11 @@ class EMAIL(Notifier):
mailserver.login(str(self.config['smtp_user']), str(self.config['smtp_password']))
mailserver.sendmail(self.config['from'], recipients, msg.as_string())
- logger.info(u"Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
success = True
except Exception as e:
- logger.error(u"Tautulli Notifiers :: {name} notification failed: {e}".format(
+ logger.error("Tautulli Notifiers :: {name} notification failed: {e}".format(
name=self.NAME, e=str(e).decode('utf-8')))
finally:
@@ -1517,7 +1517,7 @@ class FACEBOOK(Notifier):
perms=['publish_to_groups'])
def _get_credentials(self, code=''):
- logger.info(u"Tautulli Notifiers :: Requesting access token from {name}.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: Requesting access token from {name}.".format(name=self.NAME))
app_id = plexpy.CONFIG.FACEBOOK_APP_ID
app_secret = plexpy.CONFIG.FACEBOOK_APP_SECRET
@@ -1539,7 +1539,7 @@ class FACEBOOK(Notifier):
plexpy.CONFIG.FACEBOOK_TOKEN = response['access_token']
except Exception as e:
- logger.error(u"Tautulli Notifiers :: Error requesting {name} access token: {e}".format(name=self.NAME, e=e))
+ logger.error("Tautulli Notifiers :: Error requesting {name} access token: {e}".format(name=self.NAME, e=e))
plexpy.CONFIG.FACEBOOK_TOKEN = ''
# Clear out temporary config values
@@ -1555,14 +1555,14 @@ class FACEBOOK(Notifier):
try:
api.put_object(parent_object=self.config['group_id'], connection_name='feed', **data)
- logger.info(u"Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
return True
except Exception as e:
- logger.error(u"Tautulli Notifiers :: Error sending {name} post: {e}".format(name=self.NAME, e=e))
+ logger.error("Tautulli Notifiers :: Error sending {name} post: {e}".format(name=self.NAME, e=e))
return False
else:
- logger.error(u"Tautulli Notifiers :: Error sending {name} post: No {name} Group ID provided.".format(name=self.NAME))
+ logger.error("Tautulli Notifiers :: Error sending {name} post: No {name} Group ID provided.".format(name=self.NAME))
return False
def agent_notify(self, subject='', body='', action='', **kwargs):
@@ -1700,7 +1700,7 @@ class GROUPME(Notifier):
poster_content = result[0]
else:
poster_content = ''
- logger.error(u"Tautulli Notifiers :: Unable to retrieve image for {name}.".format(name=self.NAME))
+ logger.error("Tautulli Notifiers :: Unable to retrieve image for {name}.".format(name=self.NAME))
if poster_content:
headers = {'X-Access-Token': self.config['access_token'],
@@ -1709,14 +1709,14 @@ class GROUPME(Notifier):
r = requests.post('https://image.groupme.com/pictures', headers=headers, data=poster_content)
if r.status_code == 200:
- logger.info(u"Tautulli Notifiers :: {name} poster sent.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: {name} poster sent.".format(name=self.NAME))
r_content = r.json()
data['attachments'] = [{'type': 'image',
'url': r_content['payload']['picture_url']}]
else:
- logger.error(u"Tautulli Notifiers :: {name} poster failed: "
- u"[{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
- logger.debug(u"Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
+ logger.error("Tautulli Notifiers :: {name} poster failed: "
+ "[{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
+ logger.debug("Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
return self.make_request('https://api.groupme.com/v3/bots/post', json=data)
@@ -1788,10 +1788,10 @@ class GROWL(Notifier):
try:
growl.register()
except gntp.notifier.errors.NetworkError:
- logger.error(u"Tautulli Notifiers :: {name} notification failed: network error".format(name=self.NAME))
+ logger.error("Tautulli Notifiers :: {name} notification failed: network error".format(name=self.NAME))
return False
except gntp.notifier.errors.AuthError:
- logger.error(u"Tautulli Notifiers :: {name} notification failed: authentication error".format(name=self.NAME))
+ logger.error("Tautulli Notifiers :: {name} notification failed: authentication error".format(name=self.NAME))
return False
# Fix message
@@ -1811,10 +1811,10 @@ class GROWL(Notifier):
description=body,
icon=image
)
- logger.info(u"Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
return True
except gntp.notifier.errors.NetworkError:
- logger.error(u"Tautulli Notifiers :: {name} notification failed: network error".format(name=self.NAME))
+ logger.error("Tautulli Notifiers :: {name} notification failed: network error".format(name=self.NAME))
return False
def _return_config_options(self):
@@ -2113,15 +2113,15 @@ class JOIN(Notifier):
if r.status_code == 200:
response_data = r.json()
if response_data.get('success'):
- logger.info(u"Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
return True
else:
error_msg = response_data.get('errorMessage')
- logger.error(u"Tautulli Notifiers :: {name} notification failed: {msg}".format(name=self.NAME, msg=error_msg))
+ logger.error("Tautulli Notifiers :: {name} notification failed: {msg}".format(name=self.NAME, msg=error_msg))
return False
else:
- logger.error(u"Tautulli Notifiers :: {name} notification failed: [{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
- logger.debug(u"Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
+ logger.error("Tautulli Notifiers :: {name} notification failed: [{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
+ logger.debug("Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
return False
def get_devices(self):
@@ -2141,14 +2141,14 @@ class JOIN(Notifier):
devices.update({d['deviceName']: d['deviceName'] for d in response_devices})
else:
error_msg = response_data.get('errorMessage')
- logger.error(u"Tautulli Notifiers :: Unable to retrieve {name} devices list: {msg}".format(name=self.NAME, msg=error_msg))
+ logger.error("Tautulli Notifiers :: Unable to retrieve {name} devices list: {msg}".format(name=self.NAME, msg=error_msg))
else:
- logger.error(u"Tautulli Notifiers :: Unable to retrieve {name} devices list: [{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
- logger.debug(u"Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
+ logger.error("Tautulli Notifiers :: Unable to retrieve {name} devices list: [{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
+ logger.debug("Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
except Exception as e:
- logger.error(u"Tautulli Notifiers :: Unable to retrieve {name} devices list: {msg}".format(name=self.NAME, msg=e))
+ logger.error("Tautulli Notifiers :: Unable to retrieve {name} devices list: {msg}".format(name=self.NAME, msg=e))
return devices
@@ -2235,7 +2235,7 @@ class MQTT(Notifier):
def agent_notify(self, subject='', body='', action='', **kwargs):
if not self.config['topic']:
- logger.error(u"Tautulli Notifiers :: MQTT topic not specified.")
+ logger.error("Tautulli Notifiers :: MQTT topic not specified.")
return
data = {'subject': subject.encode('utf-8'),
@@ -2349,11 +2349,11 @@ class NMA(Notifier):
response = p.push(title, subject, body, priority=self.config['priority'], batch_mode=batch)
- if response[self.config['api_key']][u'code'] == u'200':
- logger.info(u"Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
+ if response[self.config['api_key']]['code'] == '200':
+ logger.info("Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
return True
else:
- logger.error(u"Tautulli Notifiers :: {name} notification failed.".format(name=self.NAME))
+ logger.error("Tautulli Notifiers :: {name} notification failed.".format(name=self.NAME))
return False
def _return_config_options(self):
@@ -2390,7 +2390,7 @@ class OSX(Notifier):
self.objc = __import__("objc")
self.AppKit = __import__("AppKit")
except:
- # logger.error(u"Tautulli Notifiers :: Cannot load OSX Notifications agent.")
+ # logger.error("Tautulli Notifiers :: Cannot load OSX Notifications agent.")
pass
def validate(self):
@@ -2449,13 +2449,13 @@ class OSX(Notifier):
notification_center = NSUserNotificationCenter.defaultUserNotificationCenter()
notification_center.deliverNotification_(notification)
- logger.info(u"Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
del pool
return True
except Exception as e:
- logger.error(u"Tautulli Notifiers :: {name} failed: {e}".format(name=self.NAME, e=e))
+ logger.error("Tautulli Notifiers :: {name} failed: {e}".format(name=self.NAME, e=e))
return False
def _return_config_options(self):
@@ -2527,7 +2527,7 @@ class PLEX(Notifier):
image = os.path.join(plexpy.DATA_DIR, os.path.abspath("data/interfaces/default/images/logo-circle.png"))
for host in hosts:
- logger.info(u"Tautulli Notifiers :: Sending notification command to {name} @ {host}".format(name=self.NAME, host=host))
+ logger.info("Tautulli Notifiers :: Sending notification command to {name} @ {host}".format(name=self.NAME, host=host))
try:
version = self._sendjson(host, 'Application.GetProperties', {'properties': ['version']})['version']['major']
@@ -2543,10 +2543,10 @@ class PLEX(Notifier):
if not request:
raise Exception
else:
- logger.info(u"Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
except Exception as e:
- logger.error(u"Tautulli Notifiers :: {name} notification failed: {e}".format(name=self.NAME, e=e))
+ logger.error("Tautulli Notifiers :: {name} notification failed: {e}".format(name=self.NAME, e=e))
return False
return True
@@ -2694,7 +2694,7 @@ class PUSHBULLET(Notifier):
poster_content = result[0]
else:
poster_content = ''
- logger.error(u"Tautulli Notifiers :: Unable to retrieve image for {name}.".format(name=self.NAME))
+ logger.error("Tautulli Notifiers :: Unable to retrieve image for {name}.".format(name=self.NAME))
if poster_content:
poster_filename = 'poster_{}.png'.format(pretty_metadata.parameters['rating_key'])
@@ -2713,9 +2713,9 @@ class PUSHBULLET(Notifier):
file_response.pop('data', None)
data.update(file_response)
else:
- logger.error(u"Tautulli Notifiers :: Unable to upload image to {name}: "
- u"[{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
- logger.debug(u"Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
+ logger.error("Tautulli Notifiers :: Unable to upload image to {name}: "
+ "[{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
+ logger.debug("Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
return self.make_request('https://api.pushbullet.com/v2/pushes', headers=headers, json=data)
@@ -2734,12 +2734,12 @@ class PUSHBULLET(Notifier):
pushbullet_devices = response_data.get('devices', [])
devices.update({d['iden']: d['nickname'] for d in pushbullet_devices if d['active']})
else:
- logger.error(u"Tautulli Notifiers :: Unable to retrieve {name} devices list: "
- u"[{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
- logger.debug(u"Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
+ logger.error("Tautulli Notifiers :: Unable to retrieve {name} devices list: "
+ "[{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
+ logger.debug("Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
except Exception as e:
- logger.error(u"Tautulli Notifiers :: Unable to retrieve {name} devices list: {msg}".format(name=self.NAME, msg=e))
+ logger.error("Tautulli Notifiers :: Unable to retrieve {name} devices list: {msg}".format(name=self.NAME, msg=e))
return devices
@@ -2851,7 +2851,7 @@ class PUSHOVER(Notifier):
poster_content = result[0]
else:
poster_content = ''
- logger.error(u"Tautulli Notifiers :: Unable to retrieve image for {name}.".format(name=self.NAME))
+ logger.error("Tautulli Notifiers :: Unable to retrieve image for {name}.".format(name=self.NAME))
if poster_content:
poster_filename = 'poster_{}.png'.format(pretty_metadata.parameters['rating_key'])
@@ -2901,9 +2901,9 @@ class PUSHOVER(Notifier):
# print sounds
# return sounds
# else:
- # logger.error(u"Tautulli Notifiers :: Unable to retrieve {name} sounds list: "
- # u"[{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
- # logger.debug(u"Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
+ # logger.error("Tautulli Notifiers :: Unable to retrieve {name} sounds list: "
+ # "[{r.status_code}] {r.reason}".format(name=self.NAME, r=r))
+ # logger.debug("Tautulli Notifiers :: Request response: {}".format(request.server_message(r, True)))
# return {'': ''}
#
# else:
@@ -3089,13 +3089,13 @@ class SCRIPTS(Notifier):
timer.start()
output, error = process.communicate()
status = process.returncode
- logger.debug(u"Tautulli Notifiers :: Subprocess returned with status code %s." % status)
+ logger.debug("Tautulli Notifiers :: Subprocess returned with status code %s." % status)
finally:
if timer:
timer.cancel()
except OSError as e:
- logger.error(u"Tautulli Notifiers :: Failed to run script: %s" % e)
+ logger.error("Tautulli Notifiers :: Failed to run script: %s" % e)
return False
if error:
@@ -3107,13 +3107,13 @@ class SCRIPTS(Notifier):
logger.debug("Tautulli Notifiers :: Script returned: \n %s" % out)
if not self.script_killed:
- logger.info(u"Tautulli Notifiers :: Script notification sent.")
+ logger.info("Tautulli Notifiers :: Script notification sent.")
return True
def kill_script(self, process):
process.kill()
self.script_killed = True
- logger.warn(u"Tautulli Notifiers :: Script exceeded timeout limit of %d seconds. "
+ logger.warn("Tautulli Notifiers :: Script exceeded timeout limit of %d seconds. "
"Script killed." % self.config['timeout'])
def agent_notify(self, subject='', body='', action='', **kwargs):
@@ -3124,12 +3124,12 @@ class SCRIPTS(Notifier):
action(string): 'play'
"""
if not self.config['script_folder']:
- logger.error(u"Tautulli Notifiers :: No script folder specified.")
+ logger.error("Tautulli Notifiers :: No script folder specified.")
return
script_args = helpers.split_args(kwargs.get('script_args', subject))
- logger.debug(u"Tautulli Notifiers :: Trying to run notify script, action: %s, arguments: %s"
+ logger.debug("Tautulli Notifiers :: Trying to run notify script, action: %s, arguments: %s"
% (action, script_args))
script = kwargs.get('script', self.config.get('script', ''))
@@ -3137,10 +3137,10 @@ class SCRIPTS(Notifier):
# Don't try to run the script if the action does not have one
if action and not script:
- logger.debug(u"Tautulli Notifiers :: No script selected for action %s, exiting..." % action)
+ logger.debug("Tautulli Notifiers :: No script selected for action %s, exiting..." % action)
return
elif not script:
- logger.debug(u"Tautulli Notifiers :: No script selected, exiting...")
+ logger.debug("Tautulli Notifiers :: No script selected, exiting...")
return
name, ext = os.path.splitext(script)
@@ -3178,8 +3178,8 @@ class SCRIPTS(Notifier):
script.extend(script_args)
- logger.debug(u"Tautulli Notifiers :: Full script is: %s" % script)
- logger.debug(u"Tautulli Notifiers :: Executing script in a new thread.")
+ logger.debug("Tautulli Notifiers :: Full script is: %s" % script)
+ logger.debug("Tautulli Notifiers :: Executing script in a new thread.")
thread = threading.Thread(target=self.run_script, args=(script, user_id)).start()
return True
@@ -3433,7 +3433,7 @@ class TELEGRAM(Notifier):
poster_content = result[0]
else:
poster_content = ''
- logger.error(u"Tautulli Notifiers :: Unable to retrieve image for {name}.".format(name=self.NAME))
+ logger.error("Tautulli Notifiers :: Unable to retrieve image for {name}.".format(name=self.NAME))
if poster_content:
poster_filename = 'poster_{}.png'.format(pretty_metadata.parameters['rating_key'])
@@ -3531,16 +3531,16 @@ class TWITTER(Notifier):
access_token = self.config['access_token']
access_token_secret = self.config['access_token_secret']
- # logger.info(u"Tautulli Notifiers :: Sending tweet: " + message)
+ # logger.info("Tautulli Notifiers :: Sending tweet: " + message)
api = twitter.Api(consumer_key, consumer_secret, access_token, access_token_secret)
try:
api.PostUpdate(message, media=attachment)
- logger.info(u"Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
return True
except Exception as e:
- logger.error(u"Tautulli Notifiers :: {name} notification failed: {e}".format(name=self.NAME, e=e))
+ logger.error("Tautulli Notifiers :: {name} notification failed: {e}".format(name=self.NAME, e=e))
return False
def agent_notify(self, subject='', body='', action='', **kwargs):
@@ -3618,7 +3618,7 @@ class WEBHOOK(Notifier):
try:
webhook_headers = json.loads(subject)
except ValueError as e:
- logger.error(u"Tautulli Notifiers :: Invalid {name} json header data: {e}".format(name=self.NAME, e=e))
+ logger.error("Tautulli Notifiers :: Invalid {name} json header data: {e}".format(name=self.NAME, e=e))
return False
else:
webhook_headers = None
@@ -3627,7 +3627,7 @@ class WEBHOOK(Notifier):
try:
webhook_body = json.loads(body)
except ValueError as e:
- logger.error(u"Tautulli Notifiers :: Invalid {name} json body data: {e}".format(name=self.NAME, e=e))
+ logger.error("Tautulli Notifiers :: Invalid {name} json body data: {e}".format(name=self.NAME, e=e))
return False
else:
webhook_body = None
@@ -3711,7 +3711,7 @@ class XBMC(Notifier):
image = os.path.join(plexpy.DATA_DIR, os.path.abspath("data/interfaces/default/images/logo-circle.png"))
for host in hosts:
- logger.info(u"Tautulli Notifiers :: Sending notification command to XMBC @ " + host)
+ logger.info("Tautulli Notifiers :: Sending notification command to XMBC @ " + host)
try:
version = self._sendjson(host, 'Application.GetProperties', {'properties': ['version']})['version']['major']
@@ -3727,10 +3727,10 @@ class XBMC(Notifier):
if not request:
raise Exception
else:
- logger.info(u"Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
+ logger.info("Tautulli Notifiers :: {name} notification sent.".format(name=self.NAME))
except Exception as e:
- logger.error(u"Tautulli Notifiers :: {name} notification failed: {e}".format(name=self.NAME, e=e))
+ logger.error("Tautulli Notifiers :: {name} notification failed: {e}".format(name=self.NAME, e=e))
return False
return True
@@ -3870,7 +3870,7 @@ class ZAPIER(Notifier):
def upgrade_config_to_db():
- logger.info(u"Tautulli Notifiers :: Upgrading to new notification system...")
+ logger.info("Tautulli Notifiers :: Upgrading to new notification system...")
# Set flag first in case something fails we don't want to keep re-adding the notifiers
plexpy.CONFIG.__setattr__('UPDATE_NOTIFIERS_DB', 0)
diff --git a/plexpy/plexivity_import.py b/plexpy/plexivity_import.py
index 725f5620..df02ce84 100644
--- a/plexpy/plexivity_import.py
+++ b/plexpy/plexivity_import.py
@@ -32,13 +32,13 @@ def extract_plexivity_xml(xml=None):
try:
xml_parse = minidom.parseString(clean_xml)
except:
- logger.warn(u"Tautulli Importer :: Error parsing XML for Plexivity database.")
+ logger.warn("Tautulli Importer :: Error parsing XML for Plexivity database.")
return None
# I think Plexivity only tracked videos and not music?
xml_head = xml_parse.getElementsByTagName('Video')
if not xml_head:
- logger.warn(u"Tautulli Importer :: Error parsing XML for Plexivity database.")
+ logger.warn("Tautulli Importer :: Error parsing XML for Plexivity database.")
return None
for a in xml_head:
@@ -239,23 +239,23 @@ def validate_database(database=None, table_name=None):
try:
connection = sqlite3.connect(database, timeout=20)
except sqlite3.OperationalError:
- logger.error(u"Tautulli Importer :: Invalid database specified.")
+ logger.error("Tautulli Importer :: Invalid database specified.")
return 'Invalid database specified.'
except ValueError:
- logger.error(u"Tautulli Importer :: Invalid database specified.")
+ logger.error("Tautulli Importer :: Invalid database specified.")
return 'Invalid database specified.'
except:
- logger.error(u"Tautulli Importer :: Uncaught exception.")
+ logger.error("Tautulli Importer :: Uncaught exception.")
return 'Uncaught exception.'
try:
connection.execute('SELECT xml from %s' % table_name)
connection.close()
except sqlite3.OperationalError:
- logger.error(u"Tautulli Importer :: Invalid database specified.")
+ logger.error("Tautulli Importer :: Invalid database specified.")
return 'Invalid database specified.'
except:
- logger.error(u"Tautulli Importer :: Uncaught exception.")
+ logger.error("Tautulli Importer :: Uncaught exception.")
return 'Uncaught exception.'
return 'success'
@@ -266,19 +266,19 @@ def import_from_plexivity(database=None, table_name=None, import_ignore_interval
connection = sqlite3.connect(database, timeout=20)
connection.row_factory = sqlite3.Row
except sqlite3.OperationalError:
- logger.error(u"Tautulli Importer :: Invalid filename.")
+ logger.error("Tautulli Importer :: Invalid filename.")
return None
except ValueError:
- logger.error(u"Tautulli Importer :: Invalid filename.")
+ logger.error("Tautulli Importer :: Invalid filename.")
return None
try:
connection.execute('SELECT xml from %s' % table_name)
except sqlite3.OperationalError:
- logger.error(u"Tautulli Importer :: Database specified does not contain the required fields.")
+ logger.error("Tautulli Importer :: Database specified does not contain the required fields.")
return None
- logger.debug(u"Tautulli Importer :: Plexivity data import in progress...")
+ logger.debug("Tautulli Importer :: Plexivity data import in progress...")
ap = activity_processor.ActivityProcessor()
user_data = users.Users()
@@ -287,7 +287,7 @@ def import_from_plexivity(database=None, table_name=None, import_ignore_interval
try:
users.refresh_users()
except:
- logger.debug(u"Tautulli Importer :: Unable to refresh the users list. Aborting import.")
+ logger.debug("Tautulli Importer :: Unable to refresh the users list. Aborting import.")
return None
query = 'SELECT id AS id, ' \
@@ -320,13 +320,13 @@ def import_from_plexivity(database=None, table_name=None, import_ignore_interval
# If we get back None from our xml extractor skip over the record and log error.
if not extracted_xml:
- logger.error(u"Tautulli Importer :: Skipping record with id %s due to malformed xml."
+ logger.error("Tautulli Importer :: Skipping record with id %s due to malformed xml."
% str(row['id']))
continue
# Skip line if we don't have a ratingKey to work with
#if not row['rating_key']:
- # logger.error(u"Tautulli Importer :: Skipping record due to null ratingKey.")
+ # logger.error("Tautulli Importer :: Skipping record due to null ratingKey.")
# continue
# If the user_id no longer exists in the friends list, pull it from the xml.
@@ -430,13 +430,13 @@ def import_from_plexivity(database=None, table_name=None, import_ignore_interval
is_import=True,
import_ignore_interval=import_ignore_interval)
else:
- logger.debug(u"Tautulli Importer :: Item has bad rating_key: %s" % session_history_metadata['rating_key'])
+ logger.debug("Tautulli Importer :: Item has bad rating_key: %s" % session_history_metadata['rating_key'])
- logger.debug(u"Tautulli Importer :: Plexivity data import complete.")
+ logger.debug("Tautulli Importer :: Plexivity data import complete.")
import_users()
def import_users():
- logger.debug(u"Tautulli Importer :: Importing Plexivity Users...")
+ logger.debug("Tautulli Importer :: Importing Plexivity Users...")
monitor_db = database.MonitorDatabase()
query = 'INSERT OR IGNORE INTO users (user_id, username) ' \
@@ -445,6 +445,6 @@ def import_users():
try:
monitor_db.action(query)
- logger.debug(u"Tautulli Importer :: Users imported.")
+ logger.debug("Tautulli Importer :: Users imported.")
except:
- logger.debug(u"Tautulli Importer :: Failed to import users.")
+ logger.debug("Tautulli Importer :: Failed to import users.")
diff --git a/plexpy/plextv.py b/plexpy/plextv.py
index 1405a937..e6823b85 100644
--- a/plexpy/plextv.py
+++ b/plexpy/plextv.py
@@ -31,7 +31,7 @@ import session
def get_server_resources(return_presence=False, return_server=False, **kwargs):
if not return_presence:
- logger.info(u"Tautulli PlexTV :: Requesting resources for server...")
+ logger.info("Tautulli PlexTV :: Requesting resources for server...")
server = {'pms_name': plexpy.CONFIG.PMS_NAME,
'pms_version': plexpy.CONFIG.PMS_VERSION,
@@ -97,17 +97,17 @@ def get_server_resources(return_presence=False, return_server=False, **kwargs):
conn = next((c for c in conns if c['address'] == server['pms_ip']
and c['port'] == str(server['pms_port'])), conns[0])
server['pms_url'] = conn['uri']
- logger.info(u"Tautulli PlexTV :: Server URL retrieved.")
+ logger.info("Tautulli PlexTV :: Server URL retrieved.")
# get_server_urls() failed or PMS_URL not found, fallback url doesn't use SSL
if not server['pms_url']:
server['pms_url'] = fallback_url
- logger.warn(u"Tautulli PlexTV :: Unable to retrieve server URLs. Using user-defined value without SSL.")
+ logger.warn("Tautulli PlexTV :: Unable to retrieve server URLs. Using user-defined value without SSL.")
# Not using SSL, remote has no effect
else:
server['pms_url'] = fallback_url
- logger.info(u"Tautulli PlexTV :: Using user-defined URL.")
+ logger.info("Tautulli PlexTV :: Using user-defined URL.")
if return_server:
return server
@@ -141,7 +141,7 @@ class PlexTV(object):
self.token = plexpy.CONFIG.PMS_TOKEN
if not self.token:
- logger.error(u"Tautulli PlexTV :: PlexTV called, but no token provided.")
+ logger.error("Tautulli PlexTV :: PlexTV called, but no token provided.")
return
self.request_handler = http_handler.HTTPHandler(urls=self.urls,
@@ -175,9 +175,9 @@ class PlexTV(object):
'user_id': xml_head[0].getAttribute('id')
}
else:
- logger.warn(u"Tautulli PlexTV :: Could not get Plex authentication token.")
+ logger.warn("Tautulli PlexTV :: Could not get Plex authentication token.")
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse XML for get_token: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse XML for get_token: %s." % e)
return None
return user
@@ -186,27 +186,27 @@ class PlexTV(object):
def get_plexpy_pms_token(self, force=False):
if force:
- logger.debug(u"Tautulli PlexTV :: Forcing refresh of Plex.tv token.")
+ logger.debug("Tautulli PlexTV :: Forcing refresh of Plex.tv token.")
devices_list = self.get_devices_list()
device_id = next((d for d in devices_list if d['device_identifier'] == plexpy.CONFIG.PMS_UUID), {}).get('device_id', None)
if device_id:
- logger.debug(u"Tautulli PlexTV :: Removing Tautulli from Plex.tv devices.")
+ logger.debug("Tautulli PlexTV :: Removing Tautulli from Plex.tv devices.")
try:
self.delete_plextv_device(device_id=device_id)
except:
- logger.error(u"Tautulli PlexTV :: Failed to remove Tautulli from Plex.tv devices.")
+ logger.error("Tautulli PlexTV :: Failed to remove Tautulli from Plex.tv devices.")
return None
else:
- logger.warn(u"Tautulli PlexTV :: No existing Tautulli device found.")
+ logger.warn("Tautulli PlexTV :: No existing Tautulli device found.")
- logger.info(u"Tautulli PlexTV :: Fetching a new Plex.tv token for Tautulli.")
+ logger.info("Tautulli PlexTV :: Fetching a new Plex.tv token for Tautulli.")
user = self.get_token()
if user:
token = user['auth_token']
plexpy.CONFIG.__setattr__('PMS_TOKEN', token)
plexpy.CONFIG.write()
- logger.info(u"Tautulli PlexTV :: Updated Plex.tv token for Tautulli.")
+ logger.info("Tautulli PlexTV :: Updated Plex.tv token for Tautulli.")
return token
@@ -217,7 +217,7 @@ class PlexTV(object):
try:
xml_head = servers.getElementsByTagName('Device')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse XML for get_server_token: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse XML for get_server_token: %s." % e)
return None
for a in xml_head:
@@ -257,11 +257,11 @@ class PlexTV(object):
}
return pin
else:
- logger.warn(u"Tautulli PlexTV :: Could not get Plex authentication pin.")
+ logger.warn("Tautulli PlexTV :: Could not get Plex authentication pin.")
return None
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse XML for get_pin: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse XML for get_pin: %s." % e)
return None
else:
@@ -388,7 +388,7 @@ class PlexTV(object):
try:
xml_head = own_account.getElementsByTagName('user')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse own account XML for get_full_users_list: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse own account XML for get_full_users_list: %s." % e)
return []
for a in xml_head:
@@ -415,7 +415,7 @@ class PlexTV(object):
try:
xml_head = friends_list.getElementsByTagName('User')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse friends list XML for get_full_users_list: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse friends list XML for get_full_users_list: %s." % e)
return []
for a in xml_head:
@@ -439,7 +439,7 @@ class PlexTV(object):
try:
xml_head = shared_servers.getElementsByTagName('SharedServer')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse shared server list XML for get_full_users_list: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse shared server list XML for get_full_users_list: %s." % e)
return []
user_map = {}
@@ -484,7 +484,7 @@ class PlexTV(object):
try:
xml_head = sync_list.getElementsByTagName('SyncList')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse XML for get_synced_items: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse XML for get_synced_items: %s." % e)
return {}
for a in xml_head:
@@ -596,13 +596,13 @@ class PlexTV(object):
return session.filter_session_info(synced_items, filter_key='user_id')
def delete_sync(self, client_id, sync_id):
- logger.info(u"Tautulli PlexTV :: Deleting sync item '%s'." % sync_id)
+ logger.info("Tautulli PlexTV :: Deleting sync item '%s'." % sync_id)
self.delete_plextv_sync(client_id=client_id, sync_id=sync_id)
def get_server_connections(self, pms_identifier='', pms_ip='', pms_port=32400, include_https=True):
if not pms_identifier:
- logger.error(u"Tautulli PlexTV :: Unable to retrieve server connections: no pms_identifier provided.")
+ logger.error("Tautulli PlexTV :: Unable to retrieve server connections: no pms_identifier provided.")
return {}
plextv_resources = self.get_plextv_resources(include_https=include_https,
@@ -610,7 +610,7 @@ class PlexTV(object):
try:
xml_head = plextv_resources.getElementsByTagName('Device')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse XML for get_server_urls: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse XML for get_server_urls: %s." % e)
return {}
# Function to get all connections for a device
@@ -671,7 +671,7 @@ class PlexTV(object):
try:
xml_head = servers.getElementsByTagName('Server')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse XML for get_server_times: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse XML for get_server_times: %s." % e)
return {}
for a in xml_head:
@@ -713,7 +713,7 @@ class PlexTV(object):
try:
xml_head = servers.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Failed to get servers from plex: %s." % e)
+ logger.warn("Tautulli PlexTV :: Failed to get servers from plex: %s." % e)
return []
for a in xml_head:
@@ -773,20 +773,20 @@ class PlexTV(object):
return clean_servers
def get_plex_downloads(self):
- logger.debug(u"Tautulli PlexTV :: Retrieving current server version.")
+ logger.debug("Tautulli PlexTV :: Retrieving current server version.")
pms_connect = pmsconnect.PmsConnect()
pms_connect.set_server_version()
update_channel = pms_connect.get_server_update_channel()
- logger.debug(u"Tautulli PlexTV :: Plex update channel is %s." % update_channel)
+ logger.debug("Tautulli PlexTV :: Plex update channel is %s." % update_channel)
plex_downloads = self.get_plextv_downloads(plexpass=(update_channel == 'beta'))
try:
available_downloads = json.loads(plex_downloads)
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to load JSON for get_plex_updates.")
+ logger.warn("Tautulli PlexTV :: Unable to load JSON for get_plex_updates.")
return {}
# Get the updates for the platform
@@ -795,7 +795,7 @@ class PlexTV(object):
available_downloads.get('nas').get(pms_platform)
if not platform_downloads:
- logger.error(u"Tautulli PlexTV :: Unable to retrieve Plex updates: Could not match server platform: %s."
+ logger.error("Tautulli PlexTV :: Unable to retrieve Plex updates: Could not match server platform: %s."
% pms_platform)
return {}
@@ -803,11 +803,11 @@ class PlexTV(object):
v_new = helpers.cast_to_int("".join(v.zfill(4) for v in platform_downloads.get('version', '').split('-')[0].split('.')[:4]))
if not v_old:
- logger.error(u"Tautulli PlexTV :: Unable to retrieve Plex updates: Invalid current server version: %s."
+ logger.error("Tautulli PlexTV :: Unable to retrieve Plex updates: Invalid current server version: %s."
% plexpy.CONFIG.PMS_VERSION)
return {}
if not v_new:
- logger.error(u"Tautulli PlexTV :: Unable to retrieve Plex updates: Invalid new server version: %s."
+ logger.error("Tautulli PlexTV :: Unable to retrieve Plex updates: Invalid new server version: %s."
% platform_downloads.get('version'))
return {}
@@ -838,7 +838,7 @@ class PlexTV(object):
try:
subscription = account_data.getElementsByTagName('subscription')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse XML for get_plexpass_status: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse XML for get_plexpass_status: %s." % e)
return False
if subscription and helpers.get_xml_attr(subscription[0], 'active') == '1':
@@ -846,7 +846,7 @@ class PlexTV(object):
plexpy.CONFIG.write()
return True
else:
- logger.debug(u"Tautulli PlexTV :: Plex Pass subscription not found.")
+ logger.debug("Tautulli PlexTV :: Plex Pass subscription not found.")
plexpy.CONFIG.__setattr__('PMS_PLEXPASS', 0)
plexpy.CONFIG.write()
return False
@@ -857,7 +857,7 @@ class PlexTV(object):
try:
xml_head = devices.getElementsByTagName('Device')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse XML for get_devices_list: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse XML for get_devices_list: %s." % e)
return []
devices_list = []
@@ -885,7 +885,7 @@ class PlexTV(object):
try:
status_info = cloud_status.getElementsByTagName('info')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse XML for get_cloud_server_status: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse XML for get_cloud_server_status: %s." % e)
return False
for info in status_info:
@@ -903,7 +903,7 @@ class PlexTV(object):
try:
xml_head = account_data.getElementsByTagName('user')
except Exception as e:
- logger.warn(u"Tautulli PlexTV :: Unable to parse XML for get_plex_account_details: %s." % e)
+ logger.warn("Tautulli PlexTV :: Unable to parse XML for get_plex_account_details: %s." % e)
return None
for a in xml_head:
diff --git a/plexpy/plexwatch_import.py b/plexpy/plexwatch_import.py
index 10b2a680..b92f042e 100644
--- a/plexpy/plexwatch_import.py
+++ b/plexpy/plexwatch_import.py
@@ -31,12 +31,12 @@ def extract_plexwatch_xml(xml=None):
try:
xml_parse = minidom.parseString(clean_xml)
except:
- logger.warn(u"Tautulli Importer :: Error parsing XML for PlexWatch database.")
+ logger.warn("Tautulli Importer :: Error parsing XML for PlexWatch database.")
return None
xml_head = xml_parse.getElementsByTagName('opt')
if not xml_head:
- logger.warn(u"Tautulli Importer :: Error parsing XML for PlexWatch database.")
+ logger.warn("Tautulli Importer :: Error parsing XML for PlexWatch database.")
return None
for a in xml_head:
@@ -230,23 +230,23 @@ def validate_database(database=None, table_name=None):
try:
connection = sqlite3.connect(database, timeout=20)
except sqlite3.OperationalError:
- logger.error(u"Tautulli Importer :: Invalid database specified.")
+ logger.error("Tautulli Importer :: Invalid database specified.")
return 'Invalid database specified.'
except ValueError:
- logger.error(u"Tautulli Importer :: Invalid database specified.")
+ logger.error("Tautulli Importer :: Invalid database specified.")
return 'Invalid database specified.'
except:
- logger.error(u"Tautulli Importer :: Uncaught exception.")
+ logger.error("Tautulli Importer :: Uncaught exception.")
return 'Uncaught exception.'
try:
connection.execute('SELECT ratingKey from %s' % table_name)
connection.close()
except sqlite3.OperationalError:
- logger.error(u"Tautulli Importer :: Invalid database specified.")
+ logger.error("Tautulli Importer :: Invalid database specified.")
return 'Invalid database specified.'
except:
- logger.error(u"Tautulli Importer :: Uncaught exception.")
+ logger.error("Tautulli Importer :: Uncaught exception.")
return 'Uncaught exception.'
return 'success'
@@ -257,19 +257,19 @@ def import_from_plexwatch(database=None, table_name=None, import_ignore_interval
connection = sqlite3.connect(database, timeout=20)
connection.row_factory = sqlite3.Row
except sqlite3.OperationalError:
- logger.error(u"Tautulli Importer :: Invalid filename.")
+ logger.error("Tautulli Importer :: Invalid filename.")
return None
except ValueError:
- logger.error(u"Tautulli Importer :: Invalid filename.")
+ logger.error("Tautulli Importer :: Invalid filename.")
return None
try:
connection.execute('SELECT ratingKey from %s' % table_name)
except sqlite3.OperationalError:
- logger.error(u"Tautulli Importer :: Database specified does not contain the required fields.")
+ logger.error("Tautulli Importer :: Database specified does not contain the required fields.")
return None
- logger.debug(u"Tautulli Importer :: PlexWatch data import in progress...")
+ logger.debug("Tautulli Importer :: PlexWatch data import in progress...")
ap = activity_processor.ActivityProcessor()
user_data = users.Users()
@@ -278,7 +278,7 @@ def import_from_plexwatch(database=None, table_name=None, import_ignore_interval
try:
users.refresh_users()
except:
- logger.debug(u"Tautulli Importer :: Unable to refresh the users list. Aborting import.")
+ logger.debug("Tautulli Importer :: Unable to refresh the users list. Aborting import.")
return None
query = 'SELECT time AS started, ' \
@@ -313,13 +313,13 @@ def import_from_plexwatch(database=None, table_name=None, import_ignore_interval
# If we get back None from our xml extractor skip over the record and log error.
if not extracted_xml:
- logger.error(u"Tautulli Importer :: Skipping record with ratingKey %s due to malformed xml."
+ logger.error("Tautulli Importer :: Skipping record with ratingKey %s due to malformed xml."
% str(row['rating_key']))
continue
# Skip line if we don't have a ratingKey to work with
if not row['rating_key']:
- logger.error(u"Tautulli Importer :: Skipping record due to null ratingKey.")
+ logger.error("Tautulli Importer :: Skipping record due to null ratingKey.")
continue
# If the user_id no longer exists in the friends list, pull it from the xml.
@@ -423,13 +423,13 @@ def import_from_plexwatch(database=None, table_name=None, import_ignore_interval
is_import=True,
import_ignore_interval=import_ignore_interval)
else:
- logger.debug(u"Tautulli Importer :: Item has bad rating_key: %s" % session_history_metadata['rating_key'])
+ logger.debug("Tautulli Importer :: Item has bad rating_key: %s" % session_history_metadata['rating_key'])
- logger.debug(u"Tautulli Importer :: PlexWatch data import complete.")
+ logger.debug("Tautulli Importer :: PlexWatch data import complete.")
import_users()
def import_users():
- logger.debug(u"Tautulli Importer :: Importing PlexWatch Users...")
+ logger.debug("Tautulli Importer :: Importing PlexWatch Users...")
monitor_db = database.MonitorDatabase()
query = 'INSERT OR IGNORE INTO users (user_id, username) ' \
@@ -438,6 +438,6 @@ def import_users():
try:
monitor_db.action(query)
- logger.debug(u"Tautulli Importer :: Users imported.")
+ logger.debug("Tautulli Importer :: Users imported.")
except:
- logger.debug(u"Tautulli Importer :: Failed to import users.")
+ logger.debug("Tautulli Importer :: Failed to import users.")
diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py
index 485b378e..553ad312 100644
--- a/plexpy/pmsconnect.py
+++ b/plexpy/pmsconnect.py
@@ -30,7 +30,7 @@ import users
def get_server_friendly_name():
- logger.info(u"Tautulli Pmsconnect :: Requesting name from server...")
+ logger.info("Tautulli Pmsconnect :: Requesting name from server...")
server_name = PmsConnect().get_server_pref(pref='FriendlyName')
# If friendly name is blank
@@ -44,7 +44,7 @@ def get_server_friendly_name():
if server_name and server_name != plexpy.CONFIG.PMS_NAME:
plexpy.CONFIG.__setattr__('PMS_NAME', server_name)
plexpy.CONFIG.write()
- logger.info(u"Tautulli Pmsconnect :: Server name retrieved.")
+ logger.info("Tautulli Pmsconnect :: Server name retrieved.")
return server_name
@@ -474,7 +474,7 @@ class PmsConnect(object):
try:
xml_head = recent.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_recently_added: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_recently_added: %s." % e)
return []
for a in xml_head:
@@ -610,7 +610,7 @@ class PmsConnect(object):
try:
xml_head = metadata_xml.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_metadata_details: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_metadata_details: %s." % e)
return {}
for a in xml_head:
@@ -627,7 +627,7 @@ class PmsConnect(object):
elif a.getElementsByTagName('Photo'):
metadata_main_list = a.getElementsByTagName('Photo')
else:
- logger.debug(u"Tautulli Pmsconnect :: Metadata failed")
+ logger.debug("Tautulli Pmsconnect :: Metadata failed")
return {}
if sync_id and len(metadata_main_list) > 1:
@@ -819,7 +819,7 @@ class PmsConnect(object):
'genres': show_details['genres'],
'labels': show_details['labels'],
'collections': show_details['collections'],
- 'full_title': u'{} - {}'.format(helpers.get_xml_attr(metadata_main, 'parentTitle'),
+ 'full_title': '{} - {}'.format(helpers.get_xml_attr(metadata_main, 'parentTitle'),
helpers.get_xml_attr(metadata_main, 'title')),
'children_count': helpers.get_xml_attr(metadata_main, 'leafCount')
}
@@ -885,7 +885,7 @@ class PmsConnect(object):
'genres': show_details['genres'],
'labels': show_details['labels'],
'collections': show_details['collections'],
- 'full_title': u'{} - {}'.format(helpers.get_xml_attr(metadata_main, 'grandparentTitle'),
+ 'full_title': '{} - {}'.format(helpers.get_xml_attr(metadata_main, 'grandparentTitle'),
helpers.get_xml_attr(metadata_main, 'title')),
'children_count': helpers.get_xml_attr(metadata_main, 'leafCount')
}
@@ -982,7 +982,7 @@ class PmsConnect(object):
'genres': genres,
'labels': labels,
'collections': collections,
- 'full_title': u'{} - {}'.format(helpers.get_xml_attr(metadata_main, 'parentTitle'),
+ 'full_title': '{} - {}'.format(helpers.get_xml_attr(metadata_main, 'parentTitle'),
helpers.get_xml_attr(metadata_main, 'title')),
'children_count': helpers.get_xml_attr(metadata_main, 'leafCount')
}
@@ -1034,7 +1034,7 @@ class PmsConnect(object):
'genres': album_details['genres'],
'labels': album_details['labels'],
'collections': album_details['collections'],
- 'full_title': u'{} - {}'.format(helpers.get_xml_attr(metadata_main, 'title'),
+ 'full_title': '{} - {}'.format(helpers.get_xml_attr(metadata_main, 'title'),
track_artist),
'children_count': helpers.get_xml_attr(metadata_main, 'leafCount')
}
@@ -1131,7 +1131,7 @@ class PmsConnect(object):
'genres': photo_album_details.get('genres', ''),
'labels': photo_album_details.get('labels', ''),
'collections': photo_album_details.get('collections', ''),
- 'full_title': u'{} - {}'.format(helpers.get_xml_attr(metadata_main, 'parentTitle') or library_name,
+ 'full_title': '{} - {}'.format(helpers.get_xml_attr(metadata_main, 'parentTitle') or library_name,
helpers.get_xml_attr(metadata_main, 'title')),
'children_count': helpers.get_xml_attr(metadata_main, 'leafCount')
}
@@ -1355,7 +1355,7 @@ class PmsConnect(object):
with open(out_file_path, 'w') as outFile:
json.dump(metadata, outFile)
except (IOError, ValueError) as e:
- logger.error(u"Tautulli Pmsconnect :: Unable to create cache file for metadata (sessionKey %s): %s"
+ logger.error("Tautulli Pmsconnect :: Unable to create cache file for metadata (sessionKey %s): %s"
% (cache_key, e))
return metadata
@@ -1375,7 +1375,7 @@ class PmsConnect(object):
try:
xml_head = metadata.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_metadata_children: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_metadata_children: %s." % e)
return []
metadata_list = []
@@ -1425,7 +1425,7 @@ class PmsConnect(object):
try:
xml_head = libraries_data.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_library_metadata_details: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_library_metadata_details: %s." % e)
return []
metadata_list = []
@@ -1470,7 +1470,7 @@ class PmsConnect(object):
try:
xml_head = session_data.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_current_activity: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_current_activity: %s." % e)
return []
session_list = []
@@ -2070,7 +2070,7 @@ class PmsConnect(object):
plex_tv = plextv.PlexTV()
if not plex_tv.get_plexpass_status():
msg = 'No Plex Pass subscription'
- logger.warn(u"Tautulli Pmsconnect :: Failed to terminate session: %s." % msg)
+ logger.warn("Tautulli Pmsconnect :: Failed to terminate session: %s." % msg)
return msg
message = message.encode('utf-8') or 'The server owner has ended the stream.'
@@ -2092,16 +2092,16 @@ class PmsConnect(object):
if not session:
msg = 'Invalid session_key (%s) or session_id (%s)' % (session_key, session_id)
- logger.warn(u"Tautulli Pmsconnect :: Failed to terminate session: %s." % msg)
+ logger.warn("Tautulli Pmsconnect :: Failed to terminate session: %s." % msg)
return msg
if session_id:
- logger.info(u"Tautulli Pmsconnect :: Terminating session %s (session_id %s)." % (session_key, session_id))
+ logger.info("Tautulli Pmsconnect :: Terminating session %s (session_id %s)." % (session_key, session_id))
result = self.get_sessions_terminate(session_id=session_id, reason=message)
return True
else:
msg = 'Missing session_id'
- logger.warn(u"Tautulli Pmsconnect :: Failed to terminate session: %s." % msg)
+ logger.warn("Tautulli Pmsconnect :: Failed to terminate session: %s." % msg)
return msg
def get_item_children(self, rating_key='', get_grandchildren=False):
@@ -2118,7 +2118,7 @@ class PmsConnect(object):
try:
xml_head = children_data.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_item_children: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_item_children: %s." % e)
return []
children_list = []
@@ -2126,7 +2126,7 @@ class PmsConnect(object):
for a in xml_head:
if a.getAttribute('size'):
if a.getAttribute('size') == '0':
- logger.debug(u"Tautulli Pmsconnect :: No children data.")
+ logger.debug("Tautulli Pmsconnect :: No children data.")
children_list = {'children_count': '0',
'children_list': []
}
@@ -2231,7 +2231,7 @@ class PmsConnect(object):
try:
xml_head = children_data.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_item_children_related: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_item_children_related: %s." % e)
return []
children_results_list = {'movie': [],
@@ -2297,7 +2297,7 @@ class PmsConnect(object):
try:
xml_head = recent.getElementsByTagName('Server')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_server_list: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_server_list: %s." % e)
return []
server_info = []
@@ -2324,7 +2324,7 @@ class PmsConnect(object):
try:
xml_head = identity.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_local_server_identity: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_local_server_identity: %s." % e)
return {}
server_identity = {}
@@ -2349,7 +2349,7 @@ class PmsConnect(object):
try:
xml_head = prefs.getElementsByTagName('Setting')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_local_server_name: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_local_server_name: %s." % e)
return ''
pref_value = 'None'
@@ -2360,7 +2360,7 @@ class PmsConnect(object):
return pref_value
else:
- logger.debug(u"Tautulli Pmsconnect :: Server preferences queried but no parameter received.")
+ logger.debug("Tautulli Pmsconnect :: Server preferences queried but no parameter received.")
return None
def get_server_children(self):
@@ -2374,7 +2374,7 @@ class PmsConnect(object):
try:
xml_head = libraries_data.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_libraries_list: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_libraries_list: %s." % e)
return []
libraries_list = []
@@ -2382,7 +2382,7 @@ class PmsConnect(object):
for a in xml_head:
if a.getAttribute('size'):
if a.getAttribute('size') == '0':
- logger.debug(u"Tautulli Pmsconnect :: No libraries data.")
+ logger.debug("Tautulli Pmsconnect :: No libraries data.")
libraries_list = {'libraries_count': '0',
'libraries_list': []
}
@@ -2448,13 +2448,13 @@ class PmsConnect(object):
elif str(rating_key).isdigit():
library_data = self.get_metadata_children(str(rating_key), output_format='xml')
else:
- logger.warn(u"Tautulli Pmsconnect :: get_library_children called by invalid section_id or rating_key provided.")
+ logger.warn("Tautulli Pmsconnect :: get_library_children called by invalid section_id or rating_key provided.")
return []
try:
xml_head = library_data.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_library_children_details: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_library_children_details: %s." % e)
return []
children_list = []
@@ -2462,7 +2462,7 @@ class PmsConnect(object):
for a in xml_head:
if a.getAttribute('size'):
if a.getAttribute('size') == '0':
- logger.debug(u"Tautulli Pmsconnect :: No library data.")
+ logger.debug("Tautulli Pmsconnect :: No library data.")
children_list = {'library_count': '0',
'children_list': []
}
@@ -2604,7 +2604,7 @@ class PmsConnect(object):
try:
xml_head = labels_data.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_library_label_details: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_library_label_details: %s." % e)
return None
labels_list = []
@@ -2612,7 +2612,7 @@ class PmsConnect(object):
for a in xml_head:
if a.getAttribute('size'):
if a.getAttribute('size') == '0':
- logger.debug(u"Tautulli Pmsconnect :: No labels data.")
+ logger.debug("Tautulli Pmsconnect :: No labels data.")
return labels_list
if a.getElementsByTagName('Directory'):
@@ -2674,7 +2674,7 @@ class PmsConnect(object):
return result[0], result[1]
else:
- logger.error(u"Tautulli Pmsconnect :: Image proxy queried but no input received.")
+ logger.error("Tautulli Pmsconnect :: Image proxy queried but no input received.")
def get_search_results(self, query='', limit=''):
"""
@@ -2687,7 +2687,7 @@ class PmsConnect(object):
try:
xml_head = search_results.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_search_result: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_search_result: %s." % e)
return []
search_results_list = {'movie': [],
@@ -2770,7 +2770,7 @@ class PmsConnect(object):
section_id = metadata['section_id']
library_name = metadata['library_name']
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to get parent_rating_key for get_rating_keys_list: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to get parent_rating_key for get_rating_keys_list: %s." % e)
return {}
elif media_type == 'episode' or media_type == 'track':
@@ -2780,7 +2780,7 @@ class PmsConnect(object):
section_id = metadata['section_id']
library_name = metadata['library_name']
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to get grandparent_rating_key for get_rating_keys_list: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to get grandparent_rating_key for get_rating_keys_list: %s." % e)
return {}
# get parent_rating_keys
@@ -2789,7 +2789,7 @@ class PmsConnect(object):
try:
xml_head = metadata.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_rating_keys_list: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_rating_keys_list: %s." % e)
return {}
for a in xml_head:
@@ -2817,7 +2817,7 @@ class PmsConnect(object):
try:
xml_head = metadata.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_rating_keys_list: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_rating_keys_list: %s." % e)
return {}
for a in xml_head:
@@ -2865,7 +2865,7 @@ class PmsConnect(object):
try:
xml_head = account_data.getElementsByTagName('MyPlex')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_server_response: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_server_response: %s." % e)
return None
server_response = {}
@@ -2887,13 +2887,13 @@ class PmsConnect(object):
try:
xml_head = updater_status.getElementsByTagName('MediaContainer')
except Exception as e:
- logger.warn(u"Tautulli Pmsconnect :: Unable to parse XML for get_update_staus: %s." % e)
+ logger.warn("Tautulli Pmsconnect :: Unable to parse XML for get_update_staus: %s." % e)
# Catch the malformed XML on certain PMX version.
# XML parser helper returns empty list if there is an error parsing XML
if updater_status == []:
- logger.warn(u"Plex API updater XML is broken on the current PMS version. Please update your PMS manually.")
- logger.info(u"Tautulli is unable to check for Plex updates. Disabling check for Plex updates.")
+ logger.warn("Plex API updater XML is broken on the current PMS version. Please update your PMS manually.")
+ logger.info("Tautulli is unable to check for Plex updates. Disabling check for Plex updates.")
# Disable check for Plex updates
plexpy.CONFIG.MONITOR_PMS_UPDATES = 0
diff --git a/plexpy/users.py b/plexpy/users.py
index 1c627378..4df4dcd7 100644
--- a/plexpy/users.py
+++ b/plexpy/users.py
@@ -28,7 +28,7 @@ import session
def refresh_users():
- logger.info(u"Tautulli Users :: Requesting users list refresh...")
+ logger.info("Tautulli Users :: Requesting users list refresh...")
result = plextv.PlexTV().get_full_users_list()
if result:
@@ -58,10 +58,10 @@ def refresh_users():
monitor_db.upsert('users', item, keys_dict)
- logger.info(u"Tautulli Users :: Users list refreshed.")
+ logger.info("Tautulli Users :: Users list refreshed.")
return True
else:
- logger.warn(u"Tautulli Users :: Unable to refresh users list.")
+ logger.warn("Tautulli Users :: Unable to refresh users list.")
return False
@@ -137,7 +137,7 @@ class Users(object):
['session_history.id', 'session_history_media_info.id']],
kwargs=kwargs)
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for get_list: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for get_list: %s." % e)
return default_return
users = query['result']
@@ -248,7 +248,7 @@ class Users(object):
['session_history.id', 'session_history_media_info.id']],
kwargs=kwargs)
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for get_unique_ips: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for get_unique_ips: %s." % e)
return default_return
results = query['result']
@@ -308,7 +308,7 @@ class Users(object):
try:
monitor_db.upsert('users', value_dict, key_dict)
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for set_config: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for set_config: %s." % e)
def get_details(self, user_id=None, user=None, email=None):
default_return = {'user_id': 0,
@@ -358,7 +358,7 @@ class Users(object):
else:
result = []
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for get_details: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for get_details: %s." % e)
result = []
user_details = {}
@@ -403,7 +403,7 @@ class Users(object):
return user_details
else:
- logger.warn(u"Tautulli Users :: Unable to retrieve user %s from database. Requesting user list refresh."
+ logger.warn("Tautulli Users :: Unable to retrieve user %s from database. Requesting user list refresh."
% user_id if user_id else user)
# Let's first refresh the user list to make sure the user isn't newly added and not in the db yet
refresh_users()
@@ -414,7 +414,7 @@ class Users(object):
return user_details
else:
- logger.warn(u"Tautulli Users :: Unable to retrieve user %s from database. Returning 'Local' user."
+ logger.warn("Tautulli Users :: Unable to retrieve user %s from database. Returning 'Local' user."
% user_id if user_id else user)
# If there is no user data we must return something
# Use "Local" user to retain compatibility with PlexWatch database value
@@ -458,7 +458,7 @@ class Users(object):
else:
result = []
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for get_watch_time_stats: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for get_watch_time_stats: %s." % e)
result = []
for item in result:
@@ -503,7 +503,7 @@ class Users(object):
else:
result = []
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for get_player_stats: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for get_player_stats: %s." % e)
result = []
for item in result:
@@ -549,7 +549,7 @@ class Users(object):
else:
result = []
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for get_recently_watched: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for get_recently_watched: %s." % e)
result = []
for row in result:
@@ -591,7 +591,7 @@ class Users(object):
'FROM users WHERE deleted_user = 0'
result = monitor_db.select(query=query)
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for get_users: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for get_users: %s." % e)
return None
users = []
@@ -625,7 +625,7 @@ class Users(object):
try:
if str(user_id).isdigit():
- logger.info(u"Tautulli Users :: Deleting all history for user id %s from database." % user_id)
+ logger.info("Tautulli Users :: Deleting all history for user id %s from database." % user_id)
session_history_media_info_del = \
monitor_db.action('DELETE FROM '
'session_history_media_info '
@@ -649,7 +649,7 @@ class Users(object):
else:
return 'Unable to delete items. Input user_id not valid.'
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for delete_all_history: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for delete_all_history: %s." % e)
def delete(self, user_id=None):
monitor_db = database.MonitorDatabase()
@@ -657,7 +657,7 @@ class Users(object):
try:
if str(user_id).isdigit():
self.delete_all_history(user_id)
- logger.info(u"Tautulli Users :: Deleting user with id %s from database." % user_id)
+ logger.info("Tautulli Users :: Deleting user with id %s from database." % user_id)
monitor_db.action('UPDATE users SET deleted_user = 1 WHERE user_id = ?', [user_id])
monitor_db.action('UPDATE users SET keep_history = 0 WHERE user_id = ?', [user_id])
monitor_db.action('UPDATE users SET do_notify = 0 WHERE user_id = ?', [user_id])
@@ -666,7 +666,7 @@ class Users(object):
else:
return 'Unable to delete user, user_id not valid.'
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for delete: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for delete: %s." % e)
def undelete(self, user_id=None, username=None):
monitor_db = database.MonitorDatabase()
@@ -676,7 +676,7 @@ class Users(object):
query = 'SELECT * FROM users WHERE user_id = ?'
result = monitor_db.select(query=query, args=[user_id])
if result:
- logger.info(u"Tautulli Users :: Re-adding user with id %s to database." % user_id)
+ logger.info("Tautulli Users :: Re-adding user with id %s to database." % user_id)
monitor_db.action('UPDATE users SET deleted_user = 0 WHERE user_id = ?', [user_id])
monitor_db.action('UPDATE users SET keep_history = 1 WHERE user_id = ?', [user_id])
monitor_db.action('UPDATE users SET do_notify = 1 WHERE user_id = ?', [user_id])
@@ -688,7 +688,7 @@ class Users(object):
query = 'SELECT * FROM users WHERE username = ?'
result = monitor_db.select(query=query, args=[username])
if result:
- logger.info(u"Tautulli Users :: Re-adding user with username %s to database." % username)
+ logger.info("Tautulli Users :: Re-adding user with username %s to database." % username)
monitor_db.action('UPDATE users SET deleted_user = 0 WHERE username = ?', [username])
monitor_db.action('UPDATE users SET keep_history = 1 WHERE username = ?', [username])
monitor_db.action('UPDATE users SET do_notify = 1 WHERE username = ?', [username])
@@ -697,7 +697,7 @@ class Users(object):
return False
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for undelete: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for undelete: %s." % e)
# Keep method for PlexWatch/Plexivity import
def get_user_id(self, user=None):
@@ -731,7 +731,7 @@ class Users(object):
result = monitor_db.select(query)
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for get_user_names: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for get_user_names: %s." % e)
return None
return session.friendly_name_to_username(result)
@@ -768,7 +768,7 @@ class Users(object):
'WHERE user_id = ?'
result = monitor_db.select_single(query, args=[user_id])
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for get_filters: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for get_filters: %s." % e)
result = {}
filters_list = {}
@@ -804,7 +804,7 @@ class Users(object):
try:
monitor_db.upsert(table_name='user_login', key_dict=keys, value_dict=values)
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for set_login_log: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for set_login_log: %s." % e)
def get_datatables_user_login(self, user_id=None, kwargs=None):
default_return = {'recordsFiltered': 0,
@@ -845,7 +845,7 @@ class Users(object):
join_evals=[['user_login.user_id', 'users.user_id']],
kwargs=kwargs)
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for get_datatables_user_login: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for get_datatables_user_login: %s." % e)
return default_return
results = query['result']
@@ -880,10 +880,10 @@ class Users(object):
monitor_db = database.MonitorDatabase()
try:
- logger.info(u"Tautulli Users :: Clearing login logs from database.")
+ logger.info("Tautulli Users :: Clearing login logs from database.")
monitor_db.action('DELETE FROM user_login')
monitor_db.action('VACUUM')
return True
except Exception as e:
- logger.warn(u"Tautulli Users :: Unable to execute database query for delete_login_log: %s." % e)
+ logger.warn("Tautulli Users :: Unable to execute database query for delete_login_log: %s." % e)
return False
\ No newline at end of file
diff --git a/plexpy/web_socket.py b/plexpy/web_socket.py
index 2f8e237e..8a98078b 100644
--- a/plexpy/web_socket.py
+++ b/plexpy/web_socket.py
@@ -40,8 +40,8 @@ def start_thread():
# Check for any existing sessions on start up
activity_pinger.check_active_sessions(ws_request=True)
except Exception as e:
- logger.error(u"Tautulli WebSocket :: Failed to check for active sessions: %s." % e)
- logger.warn(u"Tautulli WebSocket :: Attempt to fix by flushing temporary sessions...")
+ logger.error("Tautulli WebSocket :: Failed to check for active sessions: %s." % e)
+ logger.warn("Tautulli WebSocket :: Attempt to fix by flushing temporary sessions...")
database.delete_sessions()
# Start the websocket listener on it's own thread
@@ -55,7 +55,7 @@ def on_connect():
plexpy.PLEX_SERVER_UP = True
if not plexpy.PLEX_SERVER_UP:
- logger.info(u"Tautulli WebSocket :: The Plex Media Server is back up.")
+ logger.info("Tautulli WebSocket :: The Plex Media Server is back up.")
plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_intup'})
plexpy.PLEX_SERVER_UP = True
@@ -69,7 +69,7 @@ def on_disconnect():
plexpy.PLEX_SERVER_UP = False
if plexpy.PLEX_SERVER_UP:
- logger.info(u"Tautulli WebSocket :: Unable to get a response from the server, Plex server is down.")
+ logger.info("Tautulli WebSocket :: Unable to get a response from the server, Plex server is down.")
plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_intdown'})
plexpy.PLEX_SERVER_UP = False
@@ -79,7 +79,7 @@ def on_disconnect():
def reconnect():
close()
- logger.info(u"Tautulli WebSocket :: Reconnecting websocket...")
+ logger.info("Tautulli WebSocket :: Reconnecting websocket...")
start_thread()
@@ -90,14 +90,14 @@ def shutdown():
def close():
- logger.info(u"Tautulli WebSocket :: Disconnecting websocket...")
+ logger.info("Tautulli WebSocket :: Disconnecting websocket...")
plexpy.WEBSOCKET.close()
plexpy.WS_CONNECTED = False
def send_ping():
if plexpy.WS_CONNECTED:
- # logger.debug(u"Tautulli WebSocket :: Sending ping.")
+ # logger.debug("Tautulli WebSocket :: Sending ping.")
plexpy.WEBSOCKET.ping("Hi?")
global pong_timer
@@ -110,7 +110,7 @@ def wait_pong():
global pong_count
pong_count += 1
- logger.warning(u"Tautulli WebSocket :: Failed to receive pong from websocket, ping attempt %s." % str(pong_count))
+ logger.warn("Tautulli WebSocket :: Failed to receive pong from websocket, ping attempt %s." % str(pong_count))
if pong_count >= plexpy.CONFIG.WEBSOCKET_CONNECTION_ATTEMPTS:
pong_count = 0
@@ -118,7 +118,7 @@ def wait_pong():
def receive_pong():
- # logger.debug(u"Tautulli WebSocket :: Received pong.")
+ # logger.debug("Tautulli WebSocket :: Received pong.")
global pong_timer
global pong_count
if pong_timer:
@@ -150,10 +150,10 @@ def run():
reconnects = 0
# Try an open the websocket connection
- logger.info(u"Tautulli WebSocket :: Opening %swebsocket." % secure)
+ logger.info("Tautulli WebSocket :: Opening %swebsocket." % secure)
try:
plexpy.WEBSOCKET = create_connection(uri, header=header)
- logger.info(u"Tautulli WebSocket :: Ready")
+ logger.info("Tautulli WebSocket :: Ready")
plexpy.WS_CONNECTED = True
except (websocket.WebSocketException, IOError, Exception) as e:
logger.error("Tautulli WebSocket :: %s." % e)
@@ -173,7 +173,7 @@ def run():
break
if reconnects == 0:
- logger.warn(u"Tautulli WebSocket :: Connection has closed.")
+ logger.warn("Tautulli WebSocket :: Connection has closed.")
if not plexpy.CONFIG.PMS_IS_CLOUD and reconnects < plexpy.CONFIG.WEBSOCKET_CONNECTION_ATTEMPTS:
reconnects += 1
@@ -182,11 +182,11 @@ def run():
if reconnects > 1:
time.sleep(plexpy.CONFIG.WEBSOCKET_CONNECTION_TIMEOUT)
- logger.warn(u"Tautulli WebSocket :: Reconnection attempt %s." % str(reconnects))
+ logger.warn("Tautulli WebSocket :: Reconnection attempt %s." % str(reconnects))
try:
plexpy.WEBSOCKET = create_connection(uri, header=header)
- logger.info(u"Tautulli WebSocket :: Ready")
+ logger.info("Tautulli WebSocket :: Ready")
plexpy.WS_CONNECTED = True
except (websocket.WebSocketException, IOError, Exception) as e:
logger.error("Tautulli WebSocket :: %s." % e)
@@ -206,7 +206,7 @@ def run():
if not plexpy.WS_CONNECTED and not ws_shutdown:
on_disconnect()
- logger.debug(u"Tautulli WebSocket :: Leaving thread.")
+ logger.debug("Tautulli WebSocket :: Leaving thread.")
def receive(ws):
@@ -220,7 +220,7 @@ def receive(ws):
ws.send_close()
return frame.opcode, None
elif frame.opcode == websocket.ABNF.OPCODE_PING:
- # logger.debug(u"Tautulli WebSocket :: Received ping, sending pong.")
+ # logger.debug("Tautulli WebSocket :: Received ping, sending pong.")
ws.pong("Hi!")
elif frame.opcode == websocket.ABNF.OPCODE_PONG:
receive_pong()
@@ -236,7 +236,7 @@ def process(opcode, data):
logger.websocket_debug(data)
info = json.loads(data)
except Exception as e:
- logger.warn(u"Tautulli WebSocket :: Error decoding message from websocket: %s" % e)
+ logger.warn("Tautulli WebSocket :: Error decoding message from websocket: %s" % e)
logger.websocket_error(data)
return False
@@ -250,26 +250,26 @@ def process(opcode, data):
time_line = info.get('PlaySessionStateNotification', info.get('_children', {}))
if not time_line:
- logger.debug(u"Tautulli WebSocket :: Session found but unable to get timeline data.")
+ logger.debug("Tautulli WebSocket :: Session found but unable to get timeline data.")
return False
try:
activity = activity_handler.ActivityHandler(timeline=time_line[0])
activity.process()
except Exception as e:
- logger.error(u"Tautulli WebSocket :: Failed to process session data: %s." % e)
+ logger.error("Tautulli WebSocket :: Failed to process session data: %s." % e)
if type == 'timeline':
time_line = info.get('TimelineEntry', info.get('_children', {}))
if not time_line:
- logger.debug(u"Tautulli WebSocket :: Timeline event found but unable to get timeline data.")
+ logger.debug("Tautulli WebSocket :: Timeline event found but unable to get timeline data.")
return False
try:
activity = activity_handler.TimelineHandler(timeline=time_line[0])
activity.process()
except Exception as e:
- logger.error(u"Tautulli WebSocket :: Failed to process timeline data: %s." % e)
+ logger.error("Tautulli WebSocket :: Failed to process timeline data: %s." % e)
return True
diff --git a/plexpy/webauth.py b/plexpy/webauth.py
index d3a89af7..d300516e 100644
--- a/plexpy/webauth.py
+++ b/plexpy/webauth.py
@@ -84,7 +84,7 @@ def plex_user_login(username=None, password=None, token=None, headers=None):
# Register the new user / update the access tokens.
monitor_db = MonitorDatabase()
try:
- logger.debug(u"Tautulli WebAuth :: Registering token for user '%s' in the database."
+ logger.debug("Tautulli WebAuth :: Registering token for user '%s' in the database."
% user_details['username'])
result = monitor_db.action('UPDATE users SET server_token = ? WHERE user_id = ?',
[server_token, user_details['user_id']])
@@ -95,23 +95,23 @@ def plex_user_login(username=None, password=None, token=None, headers=None):
# Successful login
return user_details, 'guest'
else:
- logger.warn(u"Tautulli WebAuth :: Unable to register user '%s' in database."
+ logger.warn("Tautulli WebAuth :: Unable to register user '%s' in database."
% user_details['username'])
return None
except Exception as e:
- logger.warn(u"Tautulli WebAuth :: Unable to register user '%s' in database: %s."
+ logger.warn("Tautulli WebAuth :: Unable to register user '%s' in database: %s."
% (user_details['username'], e))
return None
else:
- logger.warn(u"Tautulli WebAuth :: Unable to retrieve Plex.tv server token for user '%s'."
+ logger.warn("Tautulli WebAuth :: Unable to retrieve Plex.tv server token for user '%s'."
% user_details['username'])
return None
elif username:
- logger.warn(u"Tautulli WebAuth :: Unable to retrieve Plex.tv user token for user '%s'." % username)
+ logger.warn("Tautulli WebAuth :: Unable to retrieve Plex.tv user token for user '%s'." % username)
return None
elif token:
- logger.warn(u"Tautulli WebAuth :: Unable to retrieve Plex.tv user token for Plex OAuth.")
+ logger.warn("Tautulli WebAuth :: Unable to retrieve Plex.tv user token for Plex OAuth.")
return None
@@ -256,12 +256,12 @@ class AuthController(object):
if success:
use_oauth = 'Plex OAuth' if oauth else 'form'
- logger.debug(u"Tautulli WebAuth :: %s user '%s' logged into Tautulli using %s login."
+ logger.debug("Tautulli WebAuth :: %s user '%s' logged into Tautulli using %s login."
% (user_group.capitalize(), username, use_oauth))
def on_logout(self, username, user_group):
"""Called on logout"""
- logger.debug(u"Tautulli WebAuth :: %s user '%s' logged out of Tautulli." % (user_group.capitalize(), username))
+ logger.debug("Tautulli WebAuth :: %s user '%s' logged out of Tautulli." % (user_group.capitalize(), username))
def get_loginform(self, redirect_uri=''):
from plexpy.webserve import serve_template
@@ -342,18 +342,18 @@ class AuthController(object):
elif admin_login == '1' and username:
self.on_login(username=username)
- logger.debug(u"Tautulli WebAuth :: Invalid admin login attempt from '%s'." % username)
+ logger.debug("Tautulli WebAuth :: Invalid admin login attempt from '%s'." % username)
cherrypy.response.status = 401
return error_message
elif username:
self.on_login(username=username)
- logger.debug(u"Tautulli WebAuth :: Invalid user login attempt from '%s'." % username)
+ logger.debug("Tautulli WebAuth :: Invalid user login attempt from '%s'." % username)
cherrypy.response.status = 401
return error_message
elif token:
self.on_login(username='Plex OAuth', oauth=True)
- logger.debug(u"Tautulli WebAuth :: Invalid Plex OAuth login attempt.")
+ logger.debug("Tautulli WebAuth :: Invalid Plex OAuth login attempt.")
cherrypy.response.status = 401
return error_message
diff --git a/plexpy/webserve.py b/plexpy/webserve.py
index 27e4ed36..d6ea866b 100644
--- a/plexpy/webserve.py
+++ b/plexpy/webserve.py
@@ -226,7 +226,7 @@ class WebInterface(object):
if result:
return serve_template(templatename="current_activity.html", data=result)
else:
- logger.warn(u"Unable to retrieve data for get_current_activity.")
+ logger.warn("Unable to retrieve data for get_current_activity.")
return serve_template(templatename="current_activity.html", data=None)
@cherrypy.expose
@@ -324,7 +324,7 @@ class WebInterface(object):
if result:
return serve_template(templatename="recently_added.html", data=result['recently_added'])
else:
- logger.warn(u"Unable to retrieve data for get_recently_added.")
+ logger.warn("Unable to retrieve data for get_recently_added.")
return serve_template(templatename="recently_added.html", data=None)
@cherrypy.expose
@@ -459,14 +459,14 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_library_sections.")
+ logger.warn("Unable to retrieve data for get_library_sections.")
@cherrypy.expose
@cherrypy.tools.json_out()
@requireAuth(member_of("admin"))
def refresh_libraries_list(self, **kwargs):
""" Manually refresh the libraries list. """
- logger.info(u"Manual libraries list refresh requested.")
+ logger.info("Manual libraries list refresh requested.")
result = libraries.refresh_libraries()
if result:
@@ -490,10 +490,10 @@ class WebInterface(object):
library_data = libraries.Libraries()
library_details = library_data.get_details(section_id=section_id)
except:
- logger.warn(u"Unable to retrieve library details for section_id %s " % section_id)
+ logger.warn("Unable to retrieve library details for section_id %s " % section_id)
return serve_template(templatename="library.html", title="Library", data=None, config=config)
else:
- logger.debug(u"Library page requested but no section_id received.")
+ logger.debug("Library page requested but no section_id received.")
return serve_template(templatename="library.html", title="Library", data=None, config=config)
return serve_template(templatename="library.html", title="Library", data=library_details, config=config)
@@ -562,7 +562,7 @@ class WebInterface(object):
if result:
return serve_template(templatename="user_watch_time_stats.html", data=result, title="Watch Stats")
else:
- logger.warn(u"Unable to retrieve data for library_watch_time_stats.")
+ logger.warn("Unable to retrieve data for library_watch_time_stats.")
return serve_template(templatename="user_watch_time_stats.html", data=None, title="Watch Stats")
@cherrypy.expose
@@ -580,7 +580,7 @@ class WebInterface(object):
if result:
return serve_template(templatename="library_user_stats.html", data=result, title="Player Stats")
else:
- logger.warn(u"Unable to retrieve data for library_user_stats.")
+ logger.warn("Unable to retrieve data for library_user_stats.")
return serve_template(templatename="library_user_stats.html", data=None, title="Player Stats")
@cherrypy.expose
@@ -598,7 +598,7 @@ class WebInterface(object):
if result:
return serve_template(templatename="user_recently_watched.html", data=result, title="Recently Watched")
else:
- logger.warn(u"Unable to retrieve data for library_recently_watched.")
+ logger.warn("Unable to retrieve data for library_recently_watched.")
return serve_template(templatename="user_recently_watched.html", data=None, title="Recently Watched")
@cherrypy.expose
@@ -616,7 +616,7 @@ class WebInterface(object):
if result:
return serve_template(templatename="library_recently_added.html", data=result['recently_added'], title="Recently Added")
else:
- logger.warn(u"Unable to retrieve data for library_recently_added.")
+ logger.warn("Unable to retrieve data for library_recently_added.")
return serve_template(templatename="library_recently_added.html", data=None, title="Recently Added")
@cherrypy.expose
@@ -781,9 +781,9 @@ class WebInterface(object):
if library_details:
return library_details
else:
- logger.warn(u"Unable to retrieve data for get_library.")
+ logger.warn("Unable to retrieve data for get_library.")
else:
- logger.warn(u"Library details requested but no section_id received.")
+ logger.warn("Library details requested but no section_id received.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -828,9 +828,9 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_library_watch_time_stats.")
+ logger.warn("Unable to retrieve data for get_library_watch_time_stats.")
else:
- logger.warn(u"Library watch time stats requested but no section_id received.")
+ logger.warn("Library watch time stats requested but no section_id received.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -871,9 +871,9 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_library_user_stats.")
+ logger.warn("Unable to retrieve data for get_library_user_stats.")
else:
- logger.warn(u"Library user stats requested but no section_id received.")
+ logger.warn("Library user stats requested but no section_id received.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -1094,7 +1094,7 @@ class WebInterface(object):
@requireAuth(member_of("admin"))
def refresh_users_list(self, **kwargs):
""" Manually refresh the users list. """
- logger.info(u"Manual users list refresh requested.")
+ logger.info("Manual users list refresh requested.")
result = users.refresh_users()
if result:
@@ -1113,10 +1113,10 @@ class WebInterface(object):
user_data = users.Users()
user_details = user_data.get_details(user_id=user_id)
except:
- logger.warn(u"Unable to retrieve user details for user_id %s " % user_id)
+ logger.warn("Unable to retrieve user details for user_id %s " % user_id)
return serve_template(templatename="user.html", title="User", data=None)
else:
- logger.debug(u"User page requested but no user_id received.")
+ logger.debug("User page requested but no user_id received.")
return serve_template(templatename="user.html", title="User", data=None)
return serve_template(templatename="user.html", title="User", data=user_details)
@@ -1190,7 +1190,7 @@ class WebInterface(object):
if result:
return serve_template(templatename="user_watch_time_stats.html", data=result, title="Watch Stats")
else:
- logger.warn(u"Unable to retrieve data for user_watch_time_stats.")
+ logger.warn("Unable to retrieve data for user_watch_time_stats.")
return serve_template(templatename="user_watch_time_stats.html", data=None, title="Watch Stats")
@cherrypy.expose
@@ -1208,7 +1208,7 @@ class WebInterface(object):
if result:
return serve_template(templatename="user_player_stats.html", data=result, title="Player Stats")
else:
- logger.warn(u"Unable to retrieve data for user_player_stats.")
+ logger.warn("Unable to retrieve data for user_player_stats.")
return serve_template(templatename="user_player_stats.html", data=None, title="Player Stats")
@cherrypy.expose
@@ -1226,7 +1226,7 @@ class WebInterface(object):
if result:
return serve_template(templatename="user_recently_watched.html", data=result, title="Recently Watched")
else:
- logger.warn(u"Unable to retrieve data for get_user_recently_watched.")
+ logger.warn("Unable to retrieve data for get_user_recently_watched.")
return serve_template(templatename="user_recently_watched.html", data=None, title="Recently Watched")
@cherrypy.expose
@@ -1392,9 +1392,9 @@ class WebInterface(object):
if user_details:
return user_details
else:
- logger.warn(u"Unable to retrieve data for get_user.")
+ logger.warn("Unable to retrieve data for get_user.")
else:
- logger.warn(u"User details requested but no user_id received.")
+ logger.warn("User details requested but no user_id received.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -1439,9 +1439,9 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_user_watch_time_stats.")
+ logger.warn("Unable to retrieve data for get_user_watch_time_stats.")
else:
- logger.warn(u"User watch time stats requested but no user_id received.")
+ logger.warn("User watch time stats requested but no user_id received.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -1482,9 +1482,9 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_user_player_stats.")
+ logger.warn("Unable to retrieve data for get_user_player_stats.")
else:
- logger.warn(u"User watch time stats requested but no user_id received.")
+ logger.warn("User watch time stats requested but no user_id received.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -1890,7 +1890,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_plays_by_date.")
+ logger.warn("Unable to retrieve data for get_plays_by_date.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -1929,7 +1929,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_plays_by_dayofweek.")
+ logger.warn("Unable to retrieve data for get_plays_by_dayofweek.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -1968,7 +1968,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_plays_by_hourofday.")
+ logger.warn("Unable to retrieve data for get_plays_by_hourofday.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -2007,7 +2007,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_plays_per_month.")
+ logger.warn("Unable to retrieve data for get_plays_per_month.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -2046,7 +2046,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_plays_by_top_10_platforms.")
+ logger.warn("Unable to retrieve data for get_plays_by_top_10_platforms.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -2085,7 +2085,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_plays_by_top_10_users.")
+ logger.warn("Unable to retrieve data for get_plays_by_top_10_users.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -2124,7 +2124,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_plays_by_stream_type.")
+ logger.warn("Unable to retrieve data for get_plays_by_stream_type.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -2163,7 +2163,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_plays_by_source_resolution.")
+ logger.warn("Unable to retrieve data for get_plays_by_source_resolution.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -2202,7 +2202,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_plays_by_stream_resolution.")
+ logger.warn("Unable to retrieve data for get_plays_by_stream_resolution.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -2241,7 +2241,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_stream_type_by_top_10_users.")
+ logger.warn("Unable to retrieve data for get_stream_type_by_top_10_users.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -2280,7 +2280,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_stream_type_by_top_10_platforms.")
+ logger.warn("Unable to retrieve data for get_stream_type_by_top_10_platforms.")
@cherrypy.expose
@requireAuth()
@@ -2312,7 +2312,7 @@ class WebInterface(object):
if result:
output = {"data": result}
else:
- logger.warn(u"Unable to retrieve data for get_sync.")
+ logger.warn("Unable to retrieve data for get_sync.")
output = {"data": []}
return output
@@ -2435,7 +2435,7 @@ class WebInterface(object):
try:
log_lines = {'data': log_reader.get_log_tail(window=window, parsed=True, log_type=log_type)}
except:
- logger.warn(u"Unable to retrieve Plex Logs.")
+ logger.warn("Unable to retrieve Plex Logs.")
return log_lines
@@ -2659,7 +2659,7 @@ class WebInterface(object):
except Exception as e:
result = 'error'
msg = 'Failed to clear the %s file.' % filename
- logger.exception(u'Failed to clear the %s file: %s.' % (filename, e))
+ logger.exception('Failed to clear the %s file: %s.' % (filename, e))
return {'result': result, 'message': msg}
@@ -2669,15 +2669,15 @@ class WebInterface(object):
plexpy.VERBOSE = not plexpy.VERBOSE
logger.initLogger(console=not plexpy.QUIET,
log_dir=plexpy.CONFIG.LOG_DIR, verbose=plexpy.VERBOSE)
- logger.info(u"Verbose toggled, set to %s", plexpy.VERBOSE)
- logger.debug(u"If you read this message, debug logging is available")
+ logger.info("Verbose toggled, set to %s", plexpy.VERBOSE)
+ logger.debug("If you read this message, debug logging is available")
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT + "logs")
@cherrypy.expose
@requireAuth()
def log_js_errors(self, page, message, file, line, **kwargs):
""" Logs javascript errors from the web interface. """
- logger.error(u"WebUI :: /%s : %s. (%s:%s)" % (page.rpartition('/')[-1],
+ logger.error("WebUI :: /%s : %s. (%s:%s)" % (page.rpartition('/')[-1],
message,
file.rpartition('/')[-1].partition('?')[0],
line))
@@ -3336,7 +3336,7 @@ class WebInterface(object):
notifier = notifiers.get_notifier_config(notifier_id=notifier_id)
if notifier:
- logger.debug(u"Sending %s%s notification." % (test, notifier['agent_label']))
+ logger.debug("Sending %s%s notification." % (test, notifier['agent_label']))
notification_handler.add_notifier_each(notifier_id=notifier_id,
notify_action=notify_action,
subject=subject,
@@ -3345,10 +3345,10 @@ class WebInterface(object):
**kwargs)
return {'result': 'success', 'message': 'Notification queued.'}
else:
- logger.debug(u"Unable to send %snotification, invalid notifier_id %s." % (test, notifier_id))
+ logger.debug("Unable to send %snotification, invalid notifier_id %s." % (test, notifier_id))
return {'result': 'error', 'message': 'Invalid notifier id %s.' % notifier_id}
else:
- logger.debug(u"Unable to send %snotification, no notifier_id received." % test)
+ logger.debug("Unable to send %snotification, no notifier_id received." % test)
return {'result': 'error', 'message': 'No notifier id received.'}
@cherrypy.expose
@@ -3421,7 +3421,7 @@ class WebInterface(object):
if result:
osx_notify = notifiers.OSX()
osx_notify.notify(subject='Registered', body='Success :-)', subtitle=result)
- # logger.info(u"Registered %s, to re-register a different app, delete this app first" % result)
+ # logger.info("Registered %s, to re-register a different app, delete this app first" % result)
else:
logger.warn(msg)
return msg
@@ -3585,7 +3585,7 @@ class WebInterface(object):
elif app == 'plexivity':
return serve_template(templatename="app_import.html", title="Import Plexivity Database", app="Plexivity")
- logger.warn(u"No app specified for import.")
+ logger.warn("No app specified for import.")
return
@cherrypy.expose
@@ -3616,7 +3616,7 @@ class WebInterface(object):
if result:
return result['auth_token']
else:
- logger.warn(u"Unable to retrieve Plex.tv token.")
+ logger.warn("Unable to retrieve Plex.tv token.")
return None
@cherrypy.expose
@@ -3741,7 +3741,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_server_pref.")
+ logger.warn("Unable to retrieve data for get_server_pref.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -3751,7 +3751,7 @@ class WebInterface(object):
while not apikey or apikey == plexpy.CONFIG.API_KEY or mobile_app.get_mobile_device_by_token(device_token=apikey):
apikey = plexpy.generate_uuid()
- logger.info(u"New API key generated.")
+ logger.info("New API key generated.")
logger._BLACKLIST_WORDS.add(apikey)
if device == 'true':
@@ -3862,7 +3862,7 @@ class WebInterface(object):
@requireAuth(member_of("admin"))
def checkout_git_branch(self, git_remote=None, git_branch=None, **kwargs):
if git_branch == plexpy.CONFIG.GIT_BRANCH:
- logger.error(u"Already on the %s branch" % git_branch)
+ logger.error("Already on the %s branch" % git_branch)
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT + "home")
# Set the new git remote and branch
@@ -3942,7 +3942,7 @@ class WebInterface(object):
if result:
return serve_template(templatename="info_children_list.html", data=result, title="Children List")
else:
- logger.warn(u"Unable to retrieve data for get_item_children.")
+ logger.warn("Unable to retrieve data for get_item_children.")
return serve_template(templatename="info_children_list.html", data=None, title="Children List")
@cherrypy.expose
@@ -4098,10 +4098,10 @@ class WebInterface(object):
return result[0]
else:
- raise Exception(u'PMS image request failed')
+ raise Exception('PMS image request failed')
except Exception as e:
- logger.warn(u'Failed to get image %s, falling back to %s.' % (img, fallback))
+ logger.warn('Failed to get image %s, falling back to %s.' % (img, fallback))
fbi = None
if fallback == 'poster':
fbi = common.DEFAULT_POSTER_THUMB
@@ -4246,7 +4246,7 @@ class WebInterface(object):
except OSError as e:
result = 'error'
msg = 'Failed to delete %s.' % cache_dir
- logger.exception(u'Failed to delete %s: %s.' % (cache_dir, e))
+ logger.exception('Failed to delete %s: %s.' % (cache_dir, e))
return {'result': result, 'message': msg}
try:
@@ -4254,7 +4254,7 @@ class WebInterface(object):
except OSError as e:
result = 'error'
msg = 'Failed to make %s.' % cache_dir
- logger.exception(u'Failed to create %s: %s.' % (cache_dir, e))
+ logger.exception('Failed to create %s: %s.' % (cache_dir, e))
return {'result': result, 'message': msg}
logger.info(msg)
@@ -4369,7 +4369,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for search_results.")
+ logger.warn("Unable to retrieve data for search_results.")
@cherrypy.expose
@requireAuth()
@@ -4387,7 +4387,7 @@ class WebInterface(object):
if result:
return serve_template(templatename="info_search_results_list.html", data=result, title="Search Result List")
else:
- logger.warn(u"Unable to retrieve data for get_search_results_children.")
+ logger.warn("Unable to retrieve data for get_search_results_children.")
return serve_template(templatename="info_search_results_list.html", data=None, title="Search Result List")
@@ -4407,7 +4407,7 @@ class WebInterface(object):
if query:
return serve_template(templatename="update_metadata.html", query=query, update=update, title="Info")
else:
- logger.warn(u"Unable to retrieve data for update_metadata.")
+ logger.warn("Unable to retrieve data for update_metadata.")
return serve_template(templatename="update_metadata.html", query=query, update=update, title="Info")
@cherrypy.expose
@@ -4476,7 +4476,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_new_rating_keys.")
+ logger.warn("Unable to retrieve data for get_new_rating_keys.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -4505,7 +4505,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_old_rating_keys.")
+ logger.warn("Unable to retrieve data for get_old_rating_keys.")
@cherrypy.expose
@@ -4519,7 +4519,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_pms_sessions_json.")
+ logger.warn("Unable to retrieve data for get_pms_sessions_json.")
return False
@cherrypy.expose
@@ -4678,7 +4678,7 @@ class WebInterface(object):
if metadata:
return metadata
else:
- logger.warn(u"Unable to retrieve data for get_metadata_details.")
+ logger.warn("Unable to retrieve data for get_metadata_details.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -4733,7 +4733,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_recently_added_details.")
+ logger.warn("Unable to retrieve data for get_recently_added_details.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -4747,7 +4747,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_friends_list.")
+ logger.warn("Unable to retrieve data for get_friends_list.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -4761,7 +4761,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_user_details.")
+ logger.warn("Unable to retrieve data for get_user_details.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -4775,7 +4775,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_server_list.")
+ logger.warn("Unable to retrieve data for get_server_list.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -4788,7 +4788,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_sync_lists.")
+ logger.warn("Unable to retrieve data for get_sync_lists.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -4800,7 +4800,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_servers.")
+ logger.warn("Unable to retrieve data for get_servers.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -4833,7 +4833,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_servers_info.")
+ logger.warn("Unable to retrieve data for get_servers_info.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -4863,7 +4863,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_server_identity.")
+ logger.warn("Unable to retrieve data for get_server_identity.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -4888,7 +4888,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_server_friendly_name.")
+ logger.warn("Unable to retrieve data for get_server_friendly_name.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -5168,9 +5168,9 @@ class WebInterface(object):
return result
else:
- logger.warn(u"Unable to retrieve data for get_activity.")
+ logger.warn("Unable to retrieve data for get_activity.")
except Exception as e:
- logger.exception(u"Unable to retrieve data for get_activity: %s" % e)
+ logger.exception("Unable to retrieve data for get_activity: %s" % e)
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -5208,7 +5208,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_full_libraries_list.")
+ logger.warn("Unable to retrieve data for get_full_libraries_list.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -5256,7 +5256,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_full_users_list.")
+ logger.warn("Unable to retrieve data for get_full_users_list.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -5310,7 +5310,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_synced_items.")
+ logger.warn("Unable to retrieve data for get_synced_items.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -5323,7 +5323,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_sync_transcode_queue.")
+ logger.warn("Unable to retrieve data for get_sync_transcode_queue.")
@cherrypy.expose
@cherrypy.tools.json_out()
@@ -5418,7 +5418,7 @@ class WebInterface(object):
if result:
return result
else:
- logger.warn(u"Unable to retrieve data for get_home_stats.")
+ logger.warn("Unable to retrieve data for get_home_stats.")
@cherrypy.expose
@requireAuth(member_of("admin"))
@@ -5778,7 +5778,7 @@ class WebInterface(object):
newsletter = newsletters.get_newsletter_config(newsletter_id=newsletter_id)
if newsletter:
- logger.debug(u"Sending %s%s newsletter." % (test, newsletter['agent_label']))
+ logger.debug("Sending %s%s newsletter." % (test, newsletter['agent_label']))
newsletter_handler.add_newsletter_each(newsletter_id=newsletter_id,
notify_action=notify_action,
subject=subject,
@@ -5787,10 +5787,10 @@ class WebInterface(object):
**kwargs)
return {'result': 'success', 'message': 'Newsletter queued.'}
else:
- logger.debug(u"Unable to send %snewsletter, invalid newsletter_id %s." % (test, newsletter_id))
+ logger.debug("Unable to send %snewsletter, invalid newsletter_id %s." % (test, newsletter_id))
return {'result': 'error', 'message': 'Invalid newsletter id %s.' % newsletter_id}
else:
- logger.debug(u"Unable to send %snotification, no newsletter_id received." % test)
+ logger.debug("Unable to send %snotification, no newsletter_id received." % test)
return {'result': 'error', 'message': 'No newsletter id received.'}
@cherrypy.expose
@@ -5873,10 +5873,10 @@ class WebInterface(object):
return newsletter_agent.generate_newsletter(preview=preview)
- logger.error(u"Failed to retrieve newsletter: Invalid newsletter_id %s" % newsletter_id)
+ logger.error("Failed to retrieve newsletter: Invalid newsletter_id %s" % newsletter_id)
return "Failed to retrieve newsletter: invalid newsletter_id parameter"
- logger.error(u"Failed to retrieve newsletter: Missing newsletter_id parameter.")
+ logger.error("Failed to retrieve newsletter: Missing newsletter_id parameter.")
return "Failed to retrieve newsletter: missing newsletter_id parameter"
@cherrypy.expose
diff --git a/plexpy/webstart.py b/plexpy/webstart.py
index 3f8b87bb..9390e4b9 100644
--- a/plexpy/webstart.py
+++ b/plexpy/webstart.py
@@ -26,7 +26,7 @@ from plexpy.webserve import WebInterface
def start():
- logger.info(u"Tautulli WebStart :: Initializing Tautulli web server...")
+ logger.info("Tautulli WebStart :: Initializing Tautulli web server...")
web_config = {
'http_port': plexpy.HTTP_PORT,
'http_host': plexpy.CONFIG.HTTP_HOST,
@@ -45,12 +45,12 @@ def start():
def stop():
- logger.info(u"Tautulli WebStart :: Stopping Tautulli web server...")
+ logger.info("Tautulli WebStart :: Stopping Tautulli web server...")
cherrypy.engine.exit()
def restart():
- logger.info(u"Tautulli WebStart :: Restarting Tautulli web server...")
+ logger.info("Tautulli WebStart :: Restarting Tautulli web server...")
stop()
start()
@@ -69,11 +69,11 @@ def initialize(options):
(not (https_cert and os.path.exists(https_cert)) or
not (https_key and os.path.exists(https_key))):
if not create_https_certificates(https_cert, https_key):
- logger.warn(u"Tautulli WebStart :: Unable to create certificate and key. Disabling HTTPS")
+ logger.warn("Tautulli WebStart :: Unable to create certificate and key. Disabling HTTPS")
enable_https = False
if not (os.path.exists(https_cert) and os.path.exists(https_key)):
- logger.warn(u"Tautulli WebStart :: Disabled HTTPS because of missing certificate and key.")
+ logger.warn("Tautulli WebStart :: Disabled HTTPS because of missing certificate and key.")
enable_https = False
options_dict = {
@@ -107,7 +107,7 @@ def initialize(options):
if plexpy.CONFIG.HTTP_PLEX_ADMIN:
login_allowed.append("Plex admin")
- logger.info(u"Tautulli WebStart :: Web server authentication is enabled: %s.", ' and '.join(login_allowed))
+ logger.info("Tautulli WebStart :: Web server authentication is enabled: %s.", ' and '.join(login_allowed))
if options['http_basic_auth']:
plexpy.AUTH_ENABLED = False
@@ -245,7 +245,7 @@ def initialize(options):
cherrypy.tree.mount(BaseRedirect(), '/')
try:
- logger.info(u"Tautulli WebStart :: Starting Tautulli web server on %s://%s:%d%s", protocol,
+ logger.info("Tautulli WebStart :: Starting Tautulli web server on %s://%s:%d%s", protocol,
options['http_host'], options['http_port'], options['http_root'])
cherrypy.process.servers.check_port(str(options['http_host']), options['http_port'])
if not plexpy.DEV:
@@ -274,7 +274,7 @@ class BaseRedirect(object):
def proxy():
- # logger.debug(u"REQUEST URI: %s, HEADER [X-Forwarded-Host]: %s, [X-Host]: %s, [Origin]: %s, [Host]: %s",
+ # logger.debug("REQUEST URI: %s, HEADER [X-Forwarded-Host]: %s, [X-Host]: %s, [Origin]: %s, [Host]: %s",
# cherrypy.request.wsgi_environ['REQUEST_URI'],
# cherrypy.request.headers.get('X-Forwarded-Host'),
# cherrypy.request.headers.get('X-Host'),
@@ -290,7 +290,7 @@ def proxy():
local = 'Origin'
elif cherrypy.request.headers.get('Host'): # nginx
local = 'Host'
- # logger.debug(u"cherrypy.tools.proxy.local set to [%s]", local)
+ # logger.debug("cherrypy.tools.proxy.local set to [%s]", local)
# Call original cherrypy proxy tool with the new local
cherrypy.lib.cptools.proxy(local=local)