diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index 03b93a06..c546352e 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -20,7 +20,6 @@ from __future__ import unicode_literals from future.builtins import next from future.builtins import str from future.builtins import object -from past.utils import old_div import json from itertools import groupby @@ -237,7 +236,7 @@ class DataFactory(object): if item['percent_complete'] >= watched_percent[item['media_type']]: watched_status = 1 - elif item['percent_complete'] >= old_div(watched_percent[item['media_type']],2): + elif item['percent_complete'] >= watched_percent[item['media_type']] / 2.0: watched_status = 0.5 else: watched_status = 0 diff --git a/plexpy/helpers.py b/plexpy/helpers.py index 2fe805c7..17e88c75 100644 --- a/plexpy/helpers.py +++ b/plexpy/helpers.py @@ -17,11 +17,9 @@ from __future__ import division from __future__ import unicode_literals -from past.builtins import cmp from future.builtins import zip from future.builtins import str -from past.utils import old_div import arrow import base64 @@ -104,20 +102,6 @@ def addtoapi(*dargs, **dkwargs): return rd -def multikeysort(items, columns): - comparers = [((itemgetter(col[1:].strip()), -1) if col.startswith('-') else (itemgetter(col.strip()), 1)) for col in columns] - - def comparer(left, right): - for fn, mult in comparers: - result = cmp(fn(left), fn(right)) - if result: - return mult * result - else: - return 0 - - return sorted(items, cmp=comparer) - - def checked(variable): if variable: return 'Checked' @@ -180,7 +164,7 @@ def latinToAscii(unicrap): def convert_milliseconds(ms): - seconds = old_div(ms, 1000) + seconds = ms // 1000 gmtime = time.gmtime(seconds) if seconds > 3600: minutes = time.strftime("%H:%M:%S", gmtime) @@ -194,7 +178,7 @@ def convert_milliseconds_to_minutes(ms): if str(ms).isdigit(): seconds = float(ms) / 1000 - minutes = round(old_div(seconds, 60), 0) + minutes = round(seconds / 60, 0) return math.trunc(minutes) @@ -266,10 +250,9 @@ def human_duration(s, sig='dhms'): hd = '' if str(s).isdigit() and s > 0: - d = int(old_div(s, 86400)) - h = int(old_div((s % 86400), 3600)) - m = int(old_div(((s % 86400) % 3600), 60)) - s = int(((s % 86400) % 3600) % 60) + d, h = divmod(s, 86400) + h, m = divmod(h, 3600) + m, s = divmod(m, 60) hd_list = [] if sig >= 'd' and d > 0: @@ -319,7 +302,7 @@ def get_age(date): def bytes_to_mb(bytes): - mb = old_div(int(bytes), 1048576) + mb = float(bytes) / 1048576 size = '%.1f MB' % mb return size @@ -522,7 +505,7 @@ def get_percent(value1, value2): value2 = cast_to_float(value2) if value1 != 0 and value2 != 0: - percent = (old_div(value1, value2)) * 100 + percent = (value1 / value2) * 100 else: percent = 0 diff --git a/plexpy/logger.py b/plexpy/logger.py index 33c929d0..c18195ff 100644 --- a/plexpy/logger.py +++ b/plexpy/logger.py @@ -17,7 +17,6 @@ from __future__ import unicode_literals from future.builtins import str -from past.builtins import basestring from logutils.queue import QueueHandler, QueueListener from logging import handlers @@ -66,7 +65,7 @@ def blacklist_config(config): blacklist_keys = ['HOOK', 'APIKEY', 'KEY', 'PASSWORD', 'TOKEN'] for key, value in config.items(): - if isinstance(value, basestring) and len(value.strip()) > 5 and \ + if isinstance(value, str) and len(value.strip()) > 5 and \ key.upper() not in _WHITELIST_KEYS and (key.upper() in blacklist_keys or any(bk in key.upper() for bk in _BLACKLIST_KEYS)): blacklist.add(value.strip()) @@ -102,7 +101,7 @@ class BlacklistFilter(logging.Filter): if item in record.msg: record.msg = record.msg.replace(item, 8 * '*' + item[-2:]) if any(item in str(arg) for arg in record.args): - record.args = tuple(arg.replace(item, 8 * '*' + item[-2:]) if isinstance(arg, basestring) else arg + record.args = tuple(arg.replace(item, 8 * '*' + item[-2:]) if isinstance(arg, str) else arg for arg in record.args) except: pass @@ -129,7 +128,7 @@ class RegexFilter(logging.Filter): args = [] for arg in record.args: - matches = self.regex.findall(arg) if isinstance(arg, basestring) else [] + matches = self.regex.findall(arg) if isinstance(arg, str) else [] for match in matches: arg = self.replace(arg, match) args.append(arg) diff --git a/plexpy/notification_handler.py b/plexpy/notification_handler.py index bc176e44..f6f467c3 100644 --- a/plexpy/notification_handler.py +++ b/plexpy/notification_handler.py @@ -22,8 +22,6 @@ from future.builtins import next from future.builtins import map from future.builtins import str from future.builtins import range -from past.builtins import basestring -from past.utils import old_div import arrow import bleach @@ -277,7 +275,7 @@ def notify_custom_conditions(notifier_id=None, parameters=None): continue # Make sure the condition values is in a list - if isinstance(values, basestring): + if isinstance(values, str): values = [values] # Cast the condition values to the correct type @@ -578,9 +576,9 @@ def build_media_notify_params(notify_action=None, session=None, timeline=None, m user_transcode_decision_count = Counter(s['transcode_decision'] for s in user_sessions) if notify_action != 'on_play': - stream_duration = int(old_div((time.time() - - helpers.cast_to_int(session.get('started', 0)) - - helpers.cast_to_int(session.get('paused_counter', 0))), 60)) + stream_duration = int((time.time() - + helpers.cast_to_int(session.get('started', 0)) - + helpers.cast_to_int(session.get('paused_counter', 0))) / 60) else: stream_duration = 0 @@ -1116,10 +1114,10 @@ def build_notify_text(subject='', body='', notify_action=None, parameters=None, default_body = default_action.get('body', '') # Make sure subject and body text are strings - if not isinstance(subject, basestring): + if not isinstance(subject, str): logger.error("Tautulli NotificationHandler :: Invalid subject text. Using fallback.") subject = default_subject - if not isinstance(body, basestring): + if not isinstance(body, str): logger.error("Tautulli NotificationHandler :: Invalid body text. Using fallback.") body = default_body @@ -1659,7 +1657,7 @@ def lookup_musicbrainz_info(musicbrainz_type=None, rating_key=None, artist=None, def str_format(s, parameters): custom_formatter = CustomFormatter() - if isinstance(s, basestring): + if isinstance(s, str): return custom_formatter.format(str(s), **parameters) return s @@ -1708,7 +1706,7 @@ class CustomFormatter(Formatter): return value def get_value(self, key, args, kwargs): - if isinstance(key, basestring): + if isinstance(key, str): return kwargs.get(key, self.default.format(key)) else: return super(CustomFormatter, self).get_value(key, args, kwargs) diff --git a/plexpy/versioncheck.py b/plexpy/versioncheck.py index 2bab630f..a0f1958d 100644 --- a/plexpy/versioncheck.py +++ b/plexpy/versioncheck.py @@ -19,7 +19,6 @@ from __future__ import division from __future__ import unicode_literals from future.builtins import next from future.builtins import str -from past.utils import old_div import os import platform @@ -439,7 +438,7 @@ def read_changelog(latest_only=False, since_prev_release=False): output[-1] += '' + header_text + '' elif line_list_match: - line_level = old_div(len(line_list_match.group(1)), 2) + line_level = len(line_list_match.group(1)) // 2 line_text = line_list_match.group(2) if line_level > prev_level: