diff --git a/fun/playlist_manager.py b/fun/playlist_manager.py index d90fce8..456f624 100644 --- a/fun/playlist_manager.py +++ b/fun/playlist_manager.py @@ -105,7 +105,9 @@ optional arguments: - Create Aired Today Playlist from every library by Movies for admin user """ +from __future__ import unicode_literals +from builtins import str import sys import os import random diff --git a/fun/plexapi_haiku.py b/fun/plexapi_haiku.py index 4097b71..106ef11 100644 --- a/fun/plexapi_haiku.py +++ b/fun/plexapi_haiku.py @@ -4,6 +4,8 @@ """ https://gist.github.com/blacktwin/4ccb79c7d01a95176b8e88bf4890cd2b """ +from __future__ import print_function +from __future__ import unicode_literals from plexapi.server import PlexServer import random diff --git a/killstream/kill_else_if_buffering.py b/killstream/kill_else_if_buffering.py index b469c38..bb2a206 100644 --- a/killstream/kill_else_if_buffering.py +++ b/killstream/kill_else_if_buffering.py @@ -15,7 +15,12 @@ Tautulli > Settings > Notification Agents > Scripts > Gear icon: Buffer Warnings: kill_else_if_buffering.py """ +from __future__ import print_function +from __future__ import division +from __future__ import unicode_literals +from builtins import str +from past.utils import old_div import requests from operator import itemgetter import unicodedata @@ -43,7 +48,7 @@ def kill_session(sess_key, message): # Check for users stream username = session.usernames[0] if session.sessionKey == sess_key: - title = unicode(session.grandparentTitle + ' - ' if session.type == 'episode' else '') + session.title + title = str(session.grandparentTitle + ' - ' if session.type == 'episode' else '') + session.title title = unicodedata.normalize('NFKD', title).encode('ascii', 'ignore').translate(None, "'") session.stop(reason=message) print('Terminated {user}\'s stream of {title} to prioritize admin stream.'.format(user=username, @@ -67,8 +72,8 @@ def main(): if trans_dec == 'transcode' and username not in ADMIN_USER: sess_key = session.sessionKey percent_comp = int((float(session.viewOffset) / float(session.duration)) * 100) - time_to_comp = int(int(session.duration) - int(session.viewOffset)) / 1000 / 60 - title = unicode(session.grandparentTitle + ' - ' if session.type == 'episode' else '') + session.title + time_to_comp = old_div(old_div(int(int(session.duration) - int(session.viewOffset)), 1000), 60) + title = str(session.grandparentTitle + ' - ' if session.type == 'episode' else '') + session.title title = unicodedata.normalize('NFKD', title).encode('ascii', 'ignore').translate(None, "'") add_to_dictlist(user_dict, username, [sess_key, percent_comp, title, username, time_to_comp]) diff --git a/killstream/kill_stream.py b/killstream/kill_stream.py index 0f6f56f..4d3875c 100644 --- a/killstream/kill_stream.py +++ b/killstream/kill_stream.py @@ -45,8 +45,12 @@ Tautulli > Settings > Notification Agents > New Script > Script Arguments: Save Close """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import object +from builtins import str import os import sys import json @@ -102,7 +106,10 @@ def hex_to_int(value): def arg_decoding(arg): """Decode args, encode UTF-8""" - return arg.decode(TAUTULLI_ENCODING).encode('UTF-8') + if sys.version_info[0] < 3: + return arg.decode(TAUTULLI_ENCODING).encode('UTF-8') + else: + return arg def debug_dump_vars(): @@ -232,7 +239,7 @@ def basic_notify(notifier_id, session_id, username=None, message=None, stream=No notification.send(SUBJECT_TEXT, body) -class Tautulli: +class Tautulli(object): def __init__(self, url, apikey, verify_ssl=False, debug=None): self.url = url self.apikey = apikey @@ -316,7 +323,7 @@ class Tautulli: return self._call_api('terminate_session', payload) -class Stream: +class Stream(object): def __init__(self, session_id=None, user_id=None, username=None, tautulli=None, session=None): self.state = None self.ip_address = None @@ -402,7 +409,7 @@ class Stream: return False -class Notification: +class Notification(object): def __init__(self, notifier_id, subject, body, tautulli, stream): self.notifier_id = notifier_id self.subject = subject diff --git a/killstream/limiterr.py b/killstream/limiterr.py index c3fdc76..7f431cd 100644 --- a/killstream/limiterr.py +++ b/killstream/limiterr.py @@ -45,7 +45,10 @@ Taultulli > Settings > Notification Agents > New Script > Script Arguments: Save Close """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import range import requests import argparse from datetime import datetime, timedelta diff --git a/maps/ips_to_maps.py b/maps/ips_to_maps.py index a78d160..3b9f898 100644 --- a/maps/ips_to_maps.py +++ b/maps/ips_to_maps.py @@ -26,7 +26,13 @@ optional arguments: """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import zip +from builtins import str +from builtins import range +from builtins import object import requests import sys import json @@ -212,7 +218,7 @@ def get_geo_dict(length, users): def get_geojson_dict(user_locations): locs = [] - for username, locations in user_locations.iteritems(): + for username, locations in user_locations.items(): for location in locations: try: locs.append({ @@ -348,9 +354,9 @@ def draw_map(map_type, geo_dict, filename, headless, leg_choice): 0)) labels = labels[idx:] + labels[:idx] handles = handles[idx:] + handles[:idx] - by_label = OrderedDict(zip(labels, handles)) + by_label = OrderedDict(list(zip(labels, handles))) - leg = plt.legend(by_label.values(), by_label.keys(), fancybox=True, fontsize='x-small', + leg = plt.legend(list(by_label.values()), list(by_label.keys()), fancybox=True, fontsize='x-small', numpoints=1, title="Legend", labelspacing=1., borderpad=1.5, handletextpad=2.) if leg: lleng = len(leg.legendHandles) diff --git a/notify/find_unwatched_notify.py b/notify/find_unwatched_notify.py index d21cb81..c2dd019 100644 --- a/notify/find_unwatched_notify.py +++ b/notify/find_unwatched_notify.py @@ -6,7 +6,11 @@ Find what was added TFRAME ago and not watched and notify admin using Tautulli. TAUTULLI_URL + delete_media_info_cache?section_id={section_id} """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import object +from builtins import str import requests import sys import time diff --git a/notify/notify_delay.py b/notify/notify_delay.py index b2bbecb..787802d 100644 --- a/notify/notify_delay.py +++ b/notify/notify_delay.py @@ -16,7 +16,11 @@ Tautulli > Settings > Notification Agents > Scripts > Gear icon: Tautulli Settings > Notification Agents > Scripts (Gear) > Script Timeout: 0 to disable or set to > 180 """ +from __future__ import print_function +from __future__ import division +from __future__ import unicode_literals +from past.utils import old_div import requests import sys import argparse @@ -66,7 +70,7 @@ def send_notification(subject_text, body_text): """Format notification text.""" try: subject = subject_text.format(p=p, total=cc_total) - body = body_text.format(p=p, total=cc_total, time=TIMEOUT / 60) + body = body_text.format(p=p, total=cc_total, time=old_div(TIMEOUT, 60)) except LookupError as e: sys.stderr.write("Unable to substitute '{0}' in the notification subject or body".format(e)) diff --git a/notify/notify_fav_tv_all_movie.py b/notify/notify_fav_tv_all_movie.py index 5e96732..ae1338f 100644 --- a/notify/notify_fav_tv_all_movie.py +++ b/notify/notify_fav_tv_all_movie.py @@ -17,7 +17,10 @@ Tautulli > Settings > Notification Agents > Scripts > Bell icon: Tautulli > Settings > Notification Agents > Scripts > Gear icon: Recently Added: notify_fav_tv_all_movie.py """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import object import requests from email.mime.text import MIMEText import email.utils @@ -243,7 +246,7 @@ if __name__ == '__main__': if p.media_type == 'movie': email_subject = MOVIE_SUBJECT.format(p=p) - to = filter(None, [x['email'] for x in get_users() if x['user_id'] not in IGNORE_LST]) + to = [_f for _f in [x['email'] for x in get_users() if x['user_id'] not in IGNORE_LST] if _f] body_html = MOVIE_BODY.format(p=p) send_email(to, email_subject, body_html) diff --git a/notify/notify_newip.py b/notify/notify_newip.py index bea3121..04d68de 100644 --- a/notify/notify_newip.py +++ b/notify/notify_newip.py @@ -17,6 +17,8 @@ Arguments passed from Tautulli """ +from __future__ import unicode_literals +from builtins import object import argparse import requests import sys diff --git a/notify/notify_recently_aired.py b/notify/notify_recently_aired.py index 821eff6..2b5bcb5 100644 --- a/notify/notify_recently_aired.py +++ b/notify/notify_recently_aired.py @@ -43,6 +43,8 @@ Note: The notifier_id in the edit section will need to be this other notification agent you intend to use. It does not have to be an active notification agent, just setup. """ +from __future__ import print_function +from __future__ import unicode_literals import os import sys import requests diff --git a/notify/notify_user_favorites.py b/notify/notify_user_favorites.py index 165fcc6..59ffb69 100644 --- a/notify/notify_user_favorites.py +++ b/notify/notify_user_favorites.py @@ -16,7 +16,10 @@ Tautulli > Settings > Notification Agents > Scripts > Bell icon: Tautulli > Settings > Notification Agents > Scripts > Gear icon: Recently Added: notify_user_favorite.py """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import object import requests from email.mime.text import MIMEText import email.utils diff --git a/notify/notify_user_newip.py b/notify/notify_user_newip.py index c88a90d..182941d 100644 --- a/notify/notify_user_newip.py +++ b/notify/notify_user_newip.py @@ -9,6 +9,9 @@ Set api_sql = 1 in the config file. Restart Tautulli. Place in Playback Start """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import object import argparse import requests import sys diff --git a/notify/top_concurrent_notify.py b/notify/top_concurrent_notify.py index d994c90..e00dcdd 100644 --- a/notify/top_concurrent_notify.py +++ b/notify/top_concurrent_notify.py @@ -47,6 +47,7 @@ Tautulli > Settings > Notification Agents > New Script > Script Arguments: """ +from __future__ import unicode_literals import os import sys diff --git a/notify/twitter_notify.py b/notify/twitter_notify.py index d0004df..3feb729 100644 --- a/notify/twitter_notify.py +++ b/notify/twitter_notify.py @@ -16,6 +16,7 @@ Tautulli > Settings > Notifications > Script > Script Arguments: https://gist.github.com/blacktwin/261c416dbed08291e6d12f6987d9bafa """ +from __future__ import unicode_literals from twitter import Twitter, OAuth import argparse diff --git a/reporting/added_to_plex.py b/reporting/added_to_plex.py index 822067a..1aae1e8 100644 --- a/reporting/added_to_plex.py +++ b/reporting/added_to_plex.py @@ -7,7 +7,11 @@ Find when media was added between STARTFRAME and ENDFRAME to Plex through Tautul Some Exceptions have been commented out to supress what is printed. Uncomment Exceptions if you run into problem and need to investigate. """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import str +from builtins import object import requests import sys import time @@ -164,10 +168,10 @@ for i in glt: # Find movie rating_key. show_lst += [int(x.rating_key)] except Exception as e: - print("Rating_key failed: {e}").format(e=e) + print(("Rating_key failed: {e}").format(e=e)) except Exception as e: - print("Library media info failed: {e}").format(e=e) + print(("Library media info failed: {e}").format(e=e)) # All rating_keys for episodes and movies. # Reserving order will put newest rating_keys first diff --git a/reporting/check_play.py b/reporting/check_play.py index 459e7d7..6b8afaa 100644 --- a/reporting/check_play.py +++ b/reporting/check_play.py @@ -7,6 +7,8 @@ # {user} {title} # Add to Playback Resume +from __future__ import unicode_literals +from builtins import object import requests import sys diff --git a/reporting/check_plex_log.py b/reporting/check_plex_log.py index de8f168..41b069d 100644 --- a/reporting/check_plex_log.py +++ b/reporting/check_plex_log.py @@ -6,7 +6,10 @@ Run script by itself. Will look for WARN code followed by /library/metadata/ str This is find files that are corrupt or having playback issues. I corrupted a file to test. """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import object import requests import sys diff --git a/reporting/drive_check.py b/reporting/drive_check.py index f4ff713..b64bca1 100644 --- a/reporting/drive_check.py +++ b/reporting/drive_check.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from __future__ import unicode_literals import psutil import requests diff --git a/reporting/library_play_days.py b/reporting/library_play_days.py index c3fc4f3..216ab12 100644 --- a/reporting/library_play_days.py +++ b/reporting/library_play_days.py @@ -24,7 +24,10 @@ Usage: Plays: 56 : 754 : 2899 """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import str import requests import sys import argparse diff --git a/reporting/plays_by_library.py b/reporting/plays_by_library.py index fba72d9..d9b5de8 100644 --- a/reporting/plays_by_library.py +++ b/reporting/plays_by_library.py @@ -17,6 +17,8 @@ Usage: Movies - Plays: 379 """ +from __future__ import print_function +from __future__ import unicode_literals import requests import sys diff --git a/reporting/plex_netflix_check.py b/reporting/plex_netflix_check.py index d5bd0df..c55e5fb 100644 --- a/reporting/plex_netflix_check.py +++ b/reporting/plex_netflix_check.py @@ -26,7 +26,10 @@ optional arguments: If title is matched in both, Amazon is first then Netflix. """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import str import requests import argparse from xmljson import badgerfish as bf diff --git a/reporting/server_compare.py b/reporting/server_compare.py index d31d3fd..b112567 100644 --- a/reporting/server_compare.py +++ b/reporting/server_compare.py @@ -17,6 +17,8 @@ Requires: requests, plexapi python find_diff_other_servers.py --server "My Plex Server" --server PlexServer2 --server "Steven Plex" """ +from __future__ import print_function +from __future__ import unicode_literals import argparse import requests diff --git a/reporting/userplays_weekly_reporting.py b/reporting/userplays_weekly_reporting.py index 9ae7ac0..7eef340 100644 --- a/reporting/userplays_weekly_reporting.py +++ b/reporting/userplays_weekly_reporting.py @@ -5,7 +5,9 @@ Use Tautulli to count how many plays per user occurred this week. Notify via Tautulli Notification """ +from __future__ import unicode_literals +from builtins import object import requests import sys import time diff --git a/reporting/watched_percentages.py b/reporting/watched_percentages.py index f9507eb..1a4d40d 100644 --- a/reporting/watched_percentages.py +++ b/reporting/watched_percentages.py @@ -1,6 +1,9 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from __future__ import print_function +from __future__ import unicode_literals +from builtins import object import time import argparse from plexapi.myplex import MyPlexAccount @@ -39,7 +42,7 @@ VERIFY_SSL = False timestr = time.strftime("%Y%m%d-%H%M%S") -class Connection: +class Connection(object): def __init__(self, url=None, apikey=None, verify_ssl=False): self.url = url self.apikey = apikey @@ -74,7 +77,7 @@ class Library(object): pass -class Tautulli: +class Tautulli(object): def __init__(self, connection): self.connection = connection @@ -127,7 +130,7 @@ class Tautulli: return self._call_api('get_libraries', payload) -class Plex: +class Plex(object): def __init__(self, token, url=None): if token and not url: self.account = MyPlexAccount(token) @@ -292,7 +295,7 @@ if __name__ == '__main__': else: user_dict[user] = {library: section_watched_total} except Exception as e: - print(user, e) + print((user, e)) if user_dict.get(user): user_dict[user].update({library: 0}) else: @@ -341,7 +344,7 @@ if __name__ == '__main__': start += count except Exception as e: - print(user, e) + print((user, e)) section_watched_total = len(list(set(section_watched_lst))) percent_watched = 100 * (float(section_watched_total) / float(section_total)) diff --git a/reporting/weekly_stats_reporting.py b/reporting/weekly_stats_reporting.py index f007417..46278b4 100644 --- a/reporting/weekly_stats_reporting.py +++ b/reporting/weekly_stats_reporting.py @@ -11,6 +11,10 @@ User stats display username and hour, minutes, and seconds of view time Tautulli Settings > Extra Settings > Check - Calculate Total File Sizes [experimental] ...... wait """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import range +from builtins import object from plexapi.server import CONFIG from datetime import datetime, timedelta, date from requests import Session @@ -219,7 +223,7 @@ def get_library_stats(libraries, tautulli, rich, notify=None): return sections_stats_lst -class Tautulli: +class Tautulli(object): def __init__(self, url, apikey, verify_ssl=False, debug=None): self.url = url self.apikey = apikey @@ -316,7 +320,7 @@ class Tautulli: return -class Notification: +class Notification(object): def __init__(self, notifier_id, subject, body, tautulli, stats=None): self.notifier_id = notifier_id self.subject = subject diff --git a/utility/add_label_recently_added.py b/utility/add_label_recently_added.py index e3bfad7..a8dd36c 100644 --- a/utility/add_label_recently_added.py +++ b/utility/add_label_recently_added.py @@ -17,6 +17,8 @@ # * Recently Added: # --title {title} --section_id {section_id} --media_type {media_type} --rating_key {rating_key} --parent_rating_key {parent_rating_key} --grandparent_rating_key {grandparent_rating_key} --label "Label" +from __future__ import print_function +from __future__ import unicode_literals import argparse import os import requests diff --git a/utility/bypass_auth_name.py b/utility/bypass_auth_name.py index 5c0c4af..b9d95db 100644 --- a/utility/bypass_auth_name.py +++ b/utility/bypass_auth_name.py @@ -16,6 +16,8 @@ optional arguments: List of IP addresses is cleared before adding new IPs """ +from __future__ import print_function +from __future__ import unicode_literals import requests import argparse diff --git a/utility/delete_watched_TV.py b/utility/delete_watched_TV.py index b5f5c09..9bb8208 100644 --- a/utility/delete_watched_TV.py +++ b/utility/delete_watched_TV.py @@ -7,7 +7,10 @@ If all users in list have watched an episode of listed show, then delete episode Add deletion via Plex. """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import object import requests import sys import os diff --git a/utility/enable_disable_all_guest_access.py b/utility/enable_disable_all_guest_access.py index 42c4511..b6f4268 100644 --- a/utility/enable_disable_all_guest_access.py +++ b/utility/enable_disable_all_guest_access.py @@ -6,6 +6,8 @@ Author: DirtyCajunRice Requires: requests, python3.6+ """ +from __future__ import print_function +from __future__ import unicode_literals from requests import Session from json.decoder import JSONDecodeError diff --git a/utility/find_plex_meta.py b/utility/find_plex_meta.py index de7dba1..418c7ff 100644 --- a/utility/find_plex_meta.py +++ b/utility/find_plex_meta.py @@ -10,6 +10,8 @@ or find_plex_meta.py -s adventure -m movie pulls all movie titles with adventure in the title ''' +from __future__ import print_function +from __future__ import unicode_literals from plexapi.server import PlexServer, CONFIG diff --git a/utility/find_unwatched.py b/utility/find_unwatched.py index 9cb9743..39dc510 100644 --- a/utility/find_unwatched.py +++ b/utility/find_unwatched.py @@ -4,7 +4,12 @@ """ Find what was added TFRAME ago and not watched using Tautulli. """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import input +from builtins import str +from builtins import object import requests import sys import time @@ -122,7 +127,7 @@ def get_libraries_table(): def delete_files(tmp_lst): - del_file = raw_input('Delete all unwatched files? (yes/no)').lower() + del_file = input('Delete all unwatched files? (yes/no)').lower() if del_file.startswith('y'): for x in tmp_lst: print("Removing {}".format(x)) @@ -148,10 +153,10 @@ for i in glt: # Find movie rating_key. show_lst += [int(x.rating_key)] except Exception as e: - print("Rating_key failed: {e}").format(e=e) + print(("Rating_key failed: {e}").format(e=e)) except Exception as e: - print("Library media info failed: {e}").format(e=e) + print(("Library media info failed: {e}").format(e=e)) # Remove reverse sort if you want the oldest keys first. for i in sorted(show_lst, reverse=True): @@ -169,7 +174,7 @@ for i in sorted(show_lst, reverse=True): path_lst += [x.file] except Exception as e: - print("Metadata failed. Likely end of range: {e}").format(e=e) + print(("Metadata failed. Likely end of range: {e}").format(e=e)) delete_files(path_lst) diff --git a/utility/get_serial_transcoders.py b/utility/get_serial_transcoders.py index da4baba..4c5f331 100644 --- a/utility/get_serial_transcoders.py +++ b/utility/get_serial_transcoders.py @@ -6,6 +6,10 @@ Author: DirtyCajunRice Requires: requests, plexapi, python3.6+ """ +from __future__ import print_function +from __future__ import division +from __future__ import unicode_literals +from past.utils import old_div from requests import Session from plexapi.server import CONFIG from datetime import date, timedelta @@ -56,7 +60,7 @@ for play in HISTORY: PARAMS = {'cmd': 'get_user', 'user_id': 0} for user, counts in USERS.items(): TOTAL_PLAYS = counts['transcode'] + counts['direct play'] + counts['copy'] - TRANSCODE_PERCENT = round(counts['transcode'] * 100 / TOTAL_PLAYS, 2) + TRANSCODE_PERCENT = round(old_div(counts['transcode'] * 100, TOTAL_PLAYS), 2) if TRANSCODE_PERCENT >= THRESHOLD_PERCENT: PARAMS['user_id'] = user NAUGHTY = SESSION.get(FORMATTED_URL, params=PARAMS).json()['response']['data'] diff --git a/utility/grab_gdrive_media.py b/utility/grab_gdrive_media.py index 612c32c..2a0623e 100644 --- a/utility/grab_gdrive_media.py +++ b/utility/grab_gdrive_media.py @@ -4,7 +4,10 @@ """ https://gist.github.com/blacktwin/f435aa0ccd498b0840d2407d599bf31d """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import input import os import httplib2 @@ -34,7 +37,7 @@ if credentials is None: flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI) authorize_url = flow.step1_get_authorize_url() print('Go to the following link in your browser: ' + authorize_url) - code = raw_input('Enter verification code: ').strip() + code = input('Enter verification code: ').strip() credentials = flow.step2_exchange(code) storage.put(credentials) diff --git a/utility/hide_episode_spoilers.py b/utility/hide_episode_spoilers.py index a477704..4dbf383 100644 --- a/utility/hide_episode_spoilers.py +++ b/utility/hide_episode_spoilers.py @@ -22,6 +22,7 @@ # * Watched (optional): # --rating_key {rating_key} --file {file} --remove +from __future__ import unicode_literals import argparse import os import requests diff --git a/utility/mark_multiepisode_watched.py b/utility/mark_multiepisode_watched.py index 8878a8d..3b10eb8 100644 --- a/utility/mark_multiepisode_watched.py +++ b/utility/mark_multiepisode_watched.py @@ -15,6 +15,9 @@ # * Watched: # --rating_key {rating_key} --filename {filename} +from __future__ import print_function +from __future__ import unicode_literals +from builtins import str import argparse import os from plexapi.server import PlexServer diff --git a/utility/media_manager.py b/utility/media_manager.py index c759090..785fb7c 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -23,6 +23,9 @@ Enabling Scripts in Tautulli: python media_manager.py --libraries "TV Shows" --select watched --users User1 User2 """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import object import argparse import datetime import time @@ -70,7 +73,7 @@ OPTIMIZE_DEFAULT = {'targetTagID': 'Mobile', 'policyUnwatched': 0, 'videoQuality': None} -class Connection: +class Connection(object): def __init__(self, url=None, apikey=None, verify_ssl=False): self.url = url self.apikey = apikey @@ -159,7 +162,7 @@ class User(object): self.direct = {} -class Tautulli: +class Tautulli(object): def __init__(self, connection): self.connection = connection @@ -594,7 +597,7 @@ if __name__ == '__main__': if opts.select == "watched": if libraries: for user in user_lst: - print("Finding watched items from user: {}",format(user.name)) + print(("Finding watched items from user: {}",format(user.name))) for _library in libraries: print("Checking library: '{}' watch statuses...".format(_library.title)) watched_work(user=user, sectionID=_library.key) diff --git a/utility/off_deck.py b/utility/off_deck.py index fa08715..c525558 100644 --- a/utility/off_deck.py +++ b/utility/off_deck.py @@ -44,7 +44,10 @@ original. * For episodes of show not watched the view count will be set to 1. """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import range import requests import argparse import datetime diff --git a/utility/plex_api_invite.py b/utility/plex_api_invite.py index c30d8db..46b2977 100644 --- a/utility/plex_api_invite.py +++ b/utility/plex_api_invite.py @@ -36,6 +36,8 @@ Usage: - Share Movie library with USER but restrict them to only G and PG-13 titles. """ +from __future__ import print_function +from __future__ import unicode_literals from plexapi.server import PlexServer, CONFIG import argparse diff --git a/utility/plex_api_parental_control.py b/utility/plex_api_parental_control.py index b460510..32fbb51 100644 --- a/utility/plex_api_parental_control.py +++ b/utility/plex_api_parental_control.py @@ -36,6 +36,8 @@ Usage: - USER is still exists as a Friend or Home User """ +from __future__ import print_function +from __future__ import unicode_literals import argparse diff --git a/utility/plex_api_poster_pull.py b/utility/plex_api_poster_pull.py index 82bef61..22ced6e 100644 --- a/utility/plex_api_poster_pull.py +++ b/utility/plex_api_poster_pull.py @@ -13,12 +13,16 @@ Requires: plexapi python plex_api_poster_pull.py """ +from __future__ import print_function +from __future__ import unicode_literals +from future import standard_library +standard_library.install_aliases() from plexapi.server import PlexServer, CONFIG import requests import re import os -import urllib +import urllib.request, urllib.parse, urllib.error library_name = ['Movies', 'TV Shows'] # Your library names @@ -70,4 +74,4 @@ for library in library_name: print("ERROR, %s already exist" % image_path) else: # Save to directory - urllib.urlretrieve(thumb_url, image_path) + urllib.request.urlretrieve(thumb_url, image_path) diff --git a/utility/plex_api_share.py b/utility/plex_api_share.py index f040b3c..f1b3deb 100644 --- a/utility/plex_api_share.py +++ b/utility/plex_api_share.py @@ -98,6 +98,8 @@ Usage: - Shared [all libraries but Movies] with USER. """ +from __future__ import print_function +from __future__ import unicode_literals from plexapi.server import PlexServer, CONFIG import time diff --git a/utility/plex_api_show_settings.py b/utility/plex_api_show_settings.py index 513398e..b4d8706 100644 --- a/utility/plex_api_show_settings.py +++ b/utility/plex_api_show_settings.py @@ -24,6 +24,8 @@ python plex_api_show_settings.py --libraries "TV Shows" --watched 7 python plex_api_show_settings.py --libraries "TV Shows" --unwatched -7 - Keep Episodesfrom the past 7 days """ +from __future__ import print_function +from __future__ import unicode_literals import argparse import requests from plexapi.server import PlexServer, CONFIG diff --git a/utility/plex_dance.py b/utility/plex_dance.py index 720afe8..4925cea 100644 --- a/utility/plex_dance.py +++ b/utility/plex_dance.py @@ -45,6 +45,8 @@ Script Dance moves Please use this script to update your Tautulli database with the new rating key https://gist.github.com/JonnyWong16/f554f407832076919dc6864a78432db2 """ +from __future__ import print_function +from __future__ import unicode_literals from plexapi.server import PlexServer from plexapi.server import CONFIG diff --git a/utility/plex_imgur_dl.py b/utility/plex_imgur_dl.py index 47f4a94..98166cc 100644 --- a/utility/plex_imgur_dl.py +++ b/utility/plex_imgur_dl.py @@ -8,9 +8,14 @@ Pull poster images from Imgur and places them inside Shows root folder. Skips download if showname.jpg exists or if show does not exist. """ +from __future__ import print_function +from __future__ import unicode_literals +from future import standard_library +standard_library.install_aliases() +from builtins import object import requests -import urllib +import urllib.request, urllib.parse, urllib.error import os @@ -49,6 +54,6 @@ for x in get_imgur(): print("Poster for {} was already downloaded or filename already exists, skipping.".format(x.description)) else: print("Downloading poster for {}.".format(x.description)) - urllib.urlretrieve(x.link, '{}.jpg'.format((os.path.join(SHOW_PATH, x.description, x.description)))) + urllib.request.urlretrieve(x.link, '{}.jpg'.format((os.path.join(SHOW_PATH, x.description, x.description)))) else: print("{} - {} did not match your library.".format(x.description, x.link)) diff --git a/utility/plex_popular_playlist.py b/utility/plex_popular_playlist.py index a2132b5..0f225bd 100644 --- a/utility/plex_popular_playlist.py +++ b/utility/plex_popular_playlist.py @@ -16,6 +16,8 @@ optional arguments: * LIBRARY_EXCLUDE are excluded from libraries choice. """ +from __future__ import print_function +from __future__ import unicode_literals import requests diff --git a/utility/plex_theme_songs.py b/utility/plex_theme_songs.py index 97f17ff..f0f831a 100644 --- a/utility/plex_theme_songs.py +++ b/utility/plex_theme_songs.py @@ -7,13 +7,16 @@ Theme songs are mp3 and named by shows as displayed by Plex. Songs are saved in a 'Theme Songs' directory located in script's path. """ +from __future__ import unicode_literals +from future import standard_library +standard_library.install_aliases() from plexapi.server import PlexServer, CONFIG # pip install plexapi import os import re -import urllib +import urllib.request, urllib.parse, urllib.error import requests # ## Edit ## @@ -56,4 +59,4 @@ for show in plex.library.section(TV_LIBRARY).all(): # Get tvdb_if from first episode, no need to go through all episodes tvdb_id = show.episodes()[0].guid.split('/')[2] # Download theme song to output path - urllib.urlretrieve(themes_url.format(tvdb_id), theme_path) + urllib.request.urlretrieve(themes_url.format(tvdb_id), theme_path) diff --git a/utility/plexapi_delete_playlists.py b/utility/plexapi_delete_playlists.py index 89611ae..853af6e 100644 --- a/utility/plexapi_delete_playlists.py +++ b/utility/plexapi_delete_playlists.py @@ -5,6 +5,7 @@ """ +from __future__ import unicode_literals from plexapi.server import PlexServer diff --git a/utility/purge_removed_plex_friends.py b/utility/purge_removed_plex_friends.py index 23ab4e5..19c202f 100644 --- a/utility/purge_removed_plex_friends.py +++ b/utility/purge_removed_plex_friends.py @@ -6,6 +6,8 @@ Author: DirtyCajunRice Requires: requests, plexapi, python3.6+ """ +from __future__ import print_function +from __future__ import unicode_literals from requests import Session from plexapi.server import CONFIG diff --git a/utility/recently_added_collection.py b/utility/recently_added_collection.py index 5b429e7..9aba202 100644 --- a/utility/recently_added_collection.py +++ b/utility/recently_added_collection.py @@ -14,6 +14,8 @@ # * Recently Added: # --rating_key {rating_key} --collection "New Releases" --days 180 +from __future__ import print_function +from __future__ import unicode_literals import argparse import os from datetime import datetime, timedelta diff --git a/utility/refresh_next_episode.py b/utility/refresh_next_episode.py index db169e8..fe03868 100644 --- a/utility/refresh_next_episode.py +++ b/utility/refresh_next_episode.py @@ -15,6 +15,8 @@ Check Tautulli's Watched Percent in Tautulli > Settings > General {show_name} {episode_num00} {season_num00} """ +from __future__ import print_function +from __future__ import unicode_literals import requests import sys diff --git a/utility/remove_inactive_users.py b/utility/remove_inactive_users.py index 7576acb..7538385 100644 --- a/utility/remove_inactive_users.py +++ b/utility/remove_inactive_users.py @@ -7,6 +7,8 @@ Just run. Comment out `remove_friend(username)` and `unshare(username)` to test. """ +from __future__ import print_function +from __future__ import unicode_literals from sys import exit from requests import Session from datetime import datetime diff --git a/utility/remove_movie_collections.py b/utility/remove_movie_collections.py index 891de13..ca4d2d8 100644 --- a/utility/remove_movie_collections.py +++ b/utility/remove_movie_collections.py @@ -5,6 +5,7 @@ # Author: /u/SwiftPanda16 # Requires: plexapi +from __future__ import unicode_literals from plexapi.server import PlexServer ### EDIT SETTINGS ### diff --git a/utility/remove_watched_movies.py b/utility/remove_watched_movies.py index fd99190..8cf63fe 100644 --- a/utility/remove_watched_movies.py +++ b/utility/remove_watched_movies.py @@ -5,7 +5,11 @@ Deletion is prompted """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import input +from builtins import object import requests import sys import os @@ -75,7 +79,7 @@ def get_history(user, start, length): def delete_files(tmp_lst): - del_file = raw_input('Delete all watched files? (yes/no)').lower() + del_file = input('Delete all watched files? (yes/no)').lower() if del_file.startswith('y'): for x in tmp_lst: print("Removing {}".format(os.path.dirname(x))) diff --git a/utility/rename_seasons.py b/utility/rename_seasons.py index 7747044..00cd3a2 100644 --- a/utility/rename_seasons.py +++ b/utility/rename_seasons.py @@ -5,6 +5,8 @@ # Author: /u/SwiftPanda16 # Requires: plexapi +from __future__ import print_function +from __future__ import unicode_literals from plexapi.server import PlexServer diff --git a/utility/stream_limiter_ban_email.py b/utility/stream_limiter_ban_email.py index 1eccc2d..34561e4 100644 --- a/utility/stream_limiter_ban_email.py +++ b/utility/stream_limiter_ban_email.py @@ -49,8 +49,12 @@ Clear user history for banned video to remove violation counts and run manually Concurrent stream count is the trigger. Trigger can be anything you want. """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import str +from builtins import object import requests import sys from xml.dom import minidom diff --git a/utility/sync_watch_status.py b/utility/sync_watch_status.py index bdeee41..fea029a 100644 --- a/utility/sync_watch_status.py +++ b/utility/sync_watch_status.py @@ -55,6 +55,9 @@ Taultulli > Settings > Notification Agents > New Script > Script Arguments: on selected servers. **Rating key must be a movie or episode. Shows and Seasons not support.... yet. """ +from __future__ import print_function +from __future__ import unicode_literals +from builtins import object import argparse from plexapi.myplex import MyPlexAccount from plexapi.server import PlexServer @@ -78,7 +81,7 @@ if not TAUTULLI_APIKEY: VERIFY_SSL = False -class Connection: +class Connection(object): def __init__(self, url=None, apikey=None, verify_ssl=False): self.url = url self.apikey = apikey @@ -132,7 +135,7 @@ class Metadata(object): pass -class Tautulli: +class Tautulli(object): def __init__(self, connection): self.connection = connection @@ -189,7 +192,7 @@ class Tautulli: return self._call_api('get_libraries', payload) -class Plex: +class Plex(object): def __init__(self, token, url=None): if token and not url: self.account = MyPlexAccount(token) diff --git a/utility/tautulli_friendly_name_to_ombi_alias_sync.py b/utility/tautulli_friendly_name_to_ombi_alias_sync.py index b5c3de7..77db756 100644 --- a/utility/tautulli_friendly_name_to_ombi_alias_sync.py +++ b/utility/tautulli_friendly_name_to_ombi_alias_sync.py @@ -6,6 +6,8 @@ Author: DirtyCajunRice Requires: requests, python3.6+ """ +from __future__ import print_function +from __future__ import unicode_literals from requests import Session from plexapi.server import CONFIG from urllib3 import disable_warnings