diff --git a/plexpy/helpers.py b/plexpy/helpers.py index c5996d2c..65fe61b6 100644 --- a/plexpy/helpers.py +++ b/plexpy/helpers.py @@ -33,6 +33,7 @@ import maxminddb from operator import itemgetter import os import re +import shlex import socket import sys import time @@ -1137,3 +1138,12 @@ def traverse_map(obj, func): new_obj = func(obj) return new_obj + + +def split_args(args=None): + if isinstance(args, list): + return args + elif isinstance(args, basestring): + return [arg.decode(plexpy.SYS_ENCODING, 'ignore') + for arg in shlex.split(args.encode(plexpy.SYS_ENCODING, 'ignore'))] + return [] diff --git a/plexpy/notification_handler.py b/plexpy/notification_handler.py index beb97165..a919c2c2 100644 --- a/plexpy/notification_handler.py +++ b/plexpy/notification_handler.py @@ -23,7 +23,6 @@ import json from operator import itemgetter import os import re -import shlex from string import Formatter import threading import time @@ -337,12 +336,7 @@ def notify(notifier_id=None, notify_action=None, stream_data=None, timeline_data if notify_action in ('test', 'api'): subject = kwargs.pop('subject', 'Tautulli') body = kwargs.pop('body', 'Test Notification') - script_args = kwargs.pop('script_args', []) - - if script_args and isinstance(script_args, basestring): - # Attemps to format test script args for the user - script_args = [arg.decode(plexpy.SYS_ENCODING, 'ignore') - for arg in shlex.split(script_args.encode(plexpy.SYS_ENCODING, 'ignore'))] + script_args = helpers.split_args(kwargs.pop('script_args', [])) else: # Get the subject and body strings @@ -1050,8 +1044,7 @@ def build_notify_text(subject='', body='', notify_action=None, parameters=None, if agent_id == 15: try: - script_args = [custom_formatter.format(arg.decode(plexpy.SYS_ENCODING, 'ignore'), **parameters) - for arg in shlex.split(subject.encode(plexpy.SYS_ENCODING, 'ignore'))] + script_args = [custom_formatter.format(arg, **parameters) 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) script_args = [] diff --git a/plexpy/notifiers.py b/plexpy/notifiers.py index 8742ae2b..0a467c74 100644 --- a/plexpy/notifiers.py +++ b/plexpy/notifiers.py @@ -3078,7 +3078,7 @@ class SCRIPTS(Notifier): logger.error(u"Tautulli Notifiers :: No script folder specified.") return - script_args = kwargs.get('script_args', []) + script_args = helpers.split_args(kwargs.get('script_args', subject)) logger.debug(u"Tautulli Notifiers :: Trying to run notify script, action: %s, arguments: %s" % (action, script_args))