summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Walter Purcaro <vuolter@users.noreply.github.com> 2015-12-14 16:40:52 +0100
committerGravatar Walter Purcaro <vuolter@users.noreply.github.com> 2015-12-27 21:21:33 +0100
commit3917c4560555134e2bef8c6849ef09db0de188d1 (patch)
tree3f1d31d5eb3bcad85344f9df57c7f009f5648639
parent[crypters] Remove create_getInfo + minor code cosmetics (w/ strict comparison... (diff)
downloadpyload-3917c4560555134e2bef8c6849ef09db0de188d1.tar.xz
[ExternalScripts] Update and fix
-rw-r--r--module/plugins/hooks/ExternalScripts.py111
1 files changed, 55 insertions, 56 deletions
diff --git a/module/plugins/hooks/ExternalScripts.py b/module/plugins/hooks/ExternalScripts.py
index 99427dfab..eb7958213 100644
--- a/module/plugins/hooks/ExternalScripts.py
+++ b/module/plugins/hooks/ExternalScripts.py
@@ -3,18 +3,18 @@
import os
import subprocess
-from module.plugins.internal.Addon import Addon, Expose
-from module.plugins.internal.utils import encode, fs_join
+from module.plugins.internal.Addon import Addon
+from module.plugins.internal.misc import Expose, encode, fsjoin
class ExternalScripts(Addon):
__name__ = "ExternalScripts"
__type__ = "hook"
- __version__ = "0.55"
+ __version__ = "0.56"
__status__ = "testing"
- __config__ = [("activated", "bool", "Activated" , True ),
- ("lock" , "bool", "Wait for script to terminate", False)]
+ __config__ = [("activated", "bool", "Activated" , True ),
+ ("unlock" , "bool", "Execute script concurrently", False)]
__description__ = """Run external scripts"""
__license__ = "GPLv3"
@@ -32,7 +32,8 @@ class ExternalScripts(Addon):
'package_extract_failed': "package_extract_failed" ,
'package_extracted' : "package_extracted" ,
'all_archives_extracted': "all_archives_extracted" ,
- 'all_archives_processed': "all_archives_processed" }
+ 'all_archives_processed': "all_archives_processed" ,
+ 'pyload_updated' : "pyload_updated" }
folders = ["pyload_start", "pyload_restart", "pyload_stop",
"before_reconnect", "after_reconnect",
@@ -62,11 +63,11 @@ class ExternalScripts(Addon):
os.makedirs(path)
except OSError, e:
- self.log_debug(e)
+ self.log_debug(e, trace=True)
return
for filename in os.listdir(path):
- file = fs_join(path, filename)
+ file = fsjoin(path, filename)
if not os.path.isfile(file):
continue
@@ -81,138 +82,136 @@ class ExternalScripts(Addon):
@Expose
- def call(self, script, args=[], lock=None):
- if lock is None:
- lock = self.get_config('lock')
+ def call_cmd(self, command, *args, **kwargs):
+ self.log_info(_("EXECUTE [%s] %s") % (os.path.dirname(command), args))
+ call = map(encode, [command] + args)
- try:
- script = os.path.abspath(script)
- args = [script] + map(lambda arg: encode(arg) if isinstance(arg, basestring) else encode(str(arg)), args)
+ p = subprocess.Popen(call, bufsize=-1) #@NOTE: output goes to pyload
- self.log_info(_("EXECUTE [%s] %s") % (os.path.dirname(script), args))
- p = subprocess.Popen(args, bufsize=-1) #@NOTE: output goes to pyload
- if lock:
- p.communicate()
+ return p
- except Exception, e:
- self.log_error(_("Runtime error: %s") % script,
- e or _("Unknown error"))
-
- def _call(self, folder, args=[], lock=None):
+ @Expose
+ def call_script(self, folder, *args, **kwargs):
for script in self.scripts[folder]:
- self.call(script, args, lock)
+ try:
+ p = self.call_cmd(script, args)
+
+ except Exception, e:
+ self.log_error(_("Runtime error: %s") % script,
+ e or _("Unknown error"))
+
+ else:
+ if kwargs.get('lock') or not self.config.get('unlock'):
+ p.communicate()
+
+
+ def pyload_updated(self, etag):
+ self.call_script("pyload_updated", etag)
def pyload_start(self):
- self._call('pyload_start')
+ self.call_script('pyload_start')
def exit(self):
- folder = "pyload_restart" if self.pyload.do_restart else "pyload_stop"
- self._call(folder, lock=True)
+ event = "restart" if self.pyload.do_restart else "stop"
+ self.call_script("pyload_" + event, lock=True)
def before_reconnect(self, ip):
- args = [ip]
- self._call("before_reconnect", args)
+ self.call_script("before_reconnect", ip)
def after_reconnect(self, ip, oldip):
- args = [ip, oldip]
- self._call("after_reconnect", args)
+ self.call_script("after_reconnect", ip, oldip)
def download_preparing(self, pyfile):
args = [pyfile.id, pyfile.name, None, pyfile.pluginname, pyfile.url]
- self._call("download_preparing", args)
+ self.call_script("download_preparing", *args)
def download_failed(self, pyfile):
if self.pyload.config.get("general", "folder_per_package"):
- dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pyfile.package().folder)
+ dl_folder = fsjoin(self.pyload.config.get("general", "download_folder"), pyfile.package().folder)
else:
dl_folder = self.pyload.config.get("general", "download_folder")
- file = fs_join(dl_folder, pyfile.name)
+ file = os.path.join(dl_folder, pyfile.name)
args = [pyfile.id, pyfile.name, file, pyfile.pluginname, pyfile.url]
- self._call("download_failed", args)
+ self.call_script("download_failed", *args)
def download_finished(self, pyfile):
- if self.pyload.config.get("general", "folder_per_package"):
- dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pyfile.package().folder)
- else:
- dl_folder = self.pyload.config.get("general", "download_folder")
-
- file = fs_join(dl_folder, pyfile.name)
+ file = pyfile.plugin.last_download
args = [pyfile.id, pyfile.name, file, pyfile.pluginname, pyfile.url]
- self._call("download_finished", args)
+ self.call_script("download_finished", *args)
def archive_extract_failed(self, pyfile, archive):
args = [pyfile.id, pyfile.name, archive.filename, archive.out, archive.files]
- self._call("archive_extract_failed", args)
+ self.call_script("archive_extract_failed", *args)
def archive_extracted(self, pyfile, archive):
args = [pyfile.id, pyfile.name, archive.filename, archive.out, archive.files]
- self._call("archive_extracted", args)
+ self.call_script("archive_extracted", *args)
def package_finished(self, pypack):
if self.pyload.config.get("general", "folder_per_package"):
- dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pypack.folder)
+ dl_folder = fsjoin(self.pyload.config.get("general", "download_folder"), pypack.folder)
else:
dl_folder = self.pyload.config.get("general", "download_folder")
args = [pypack.id, pypack.name, dl_folder, pypack.password]
- self._call("package_finished", args)
+ self.call_script("package_finished", *args)
def package_deleted(self, pid):
pdata = self.pyload.api.getPackageInfo(pid)
if self.pyload.config.get("general", "folder_per_package"):
- dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pdata.folder)
+ dl_folder = fsjoin(self.pyload.config.get("general", "download_folder"), pdata.folder)
else:
dl_folder = self.pyload.config.get("general", "download_folder")
args = [pdata.pid, pdata.name, dl_folder, pdata.password]
- self._call("package_deleted", args)
+ self.call_script("package_deleted", *args)
def package_extract_failed(self, pypack):
if self.pyload.config.get("general", "folder_per_package"):
- dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pypack.folder)
+ dl_folder = fsjoin(self.pyload.config.get("general", "download_folder"), pypack.folder)
else:
dl_folder = self.pyload.config.get("general", "download_folder")
args = [pypack.id, pypack.name, dl_folder, pypack.password]
- self._call("package_extract_failed", args)
+ self.call_script("package_extract_failed", *args)
def package_extracted(self, pypack):
if self.pyload.config.get("general", "folder_per_package"):
- dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pypack.folder)
+ dl_folder = fsjoin(self.pyload.config.get("general", "download_folder"), pypack.folder)
else:
dl_folder = self.pyload.config.get("general", "download_folder")
args = [pypack.id, pypack.name, dl_folder]
- self._call("package_extracted", args)
+ self.call_script("package_extracted", *args)
def all_downloads_finished(self):
- self._call("all_downloads_finished")
+ self.call_script("all_downloads_finished")
def all_downloads_processed(self):
- self._call("all_downloads_processed")
+ self.call_script("all_downloads_processed")
def all_archives_extracted(self):
- self._call("all_archives_extracted")
+ self.call_script("all_archives_extracted")
def all_archives_processed(self):
- self._call("all_archives_processed")
+ self.call_script("all_archives_processed")