diff options
author | Walter Purcaro <vuolter@users.noreply.github.com> | 2015-12-14 16:40:52 +0100 |
---|---|---|
committer | Walter Purcaro <vuolter@users.noreply.github.com> | 2015-12-27 21:21:33 +0100 |
commit | 3917c4560555134e2bef8c6849ef09db0de188d1 (patch) | |
tree | 3f1d31d5eb3bcad85344f9df57c7f009f5648639 /module/plugins/hooks/ExternalScripts.py | |
parent | [crypters] Remove create_getInfo + minor code cosmetics (w/ strict comparison... (diff) | |
download | pyload-3917c4560555134e2bef8c6849ef09db0de188d1.tar.xz |
[ExternalScripts] Update and fix
Diffstat (limited to 'module/plugins/hooks/ExternalScripts.py')
-rw-r--r-- | module/plugins/hooks/ExternalScripts.py | 111 |
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") |