diff options
Diffstat (limited to 'module/plugins/internal')
-rw-r--r-- | module/plugins/internal/Hoster.py | 28 | ||||
-rw-r--r-- | module/plugins/internal/MultiCrypter.py | 2 | ||||
-rw-r--r-- | module/plugins/internal/MultiHoster.py | 14 | ||||
-rw-r--r-- | module/plugins/internal/Notifier.py | 4 | ||||
-rw-r--r-- | module/plugins/internal/OCR.py | 2 | ||||
-rw-r--r-- | module/plugins/internal/Plugin.py | 7 | ||||
-rw-r--r-- | module/plugins/internal/SevenZip.py | 6 | ||||
-rw-r--r-- | module/plugins/internal/SimpleHoster.py | 22 | ||||
-rw-r--r-- | module/plugins/internal/UnRar.py | 6 | ||||
-rw-r--r-- | module/plugins/internal/XFSAccount.py | 5 | ||||
-rw-r--r-- | module/plugins/internal/XFSCrypter.py | 4 | ||||
-rw-r--r-- | module/plugins/internal/XFSHoster.py | 20 |
12 files changed, 59 insertions, 61 deletions
diff --git a/module/plugins/internal/Hoster.py b/module/plugins/internal/Hoster.py index fbb675281..bd8daded8 100644 --- a/module/plugins/internal/Hoster.py +++ b/module/plugins/internal/Hoster.py @@ -139,14 +139,14 @@ class Hoster(Base): self.pyload.hookManager.dispatchEvent("download_processed", self.pyfile) try: - unfinished = any(fdata['status'] == 3 for fid, fdata in pypack.getChildren().items() - if fid != self.pyfile.id) + unfinished = any(fdata.get('status') == 3 for fid, fdata in pypack.getChildren().items() + if fid is not self.pyfile.id) if unfinished: return self.pyload.hookManager.dispatchEvent("package_processed", pypack) - failed = any(fdata['status'] in (1, 6, 8, 9, 14) + failed = any(fdata.get('status') in (1, 6, 8, 9, 14) for fid, fdata in pypack.getChildren().items()) if not failed: @@ -171,11 +171,9 @@ class Hoster(Base): elif redirect: maxredirs = int(self.pyload.api.getConfigValue("UserAgentSwitcher", "maxredirs", "plugin")) or maxredirs #@TODO: Remove `int` in 0.4.10 - for i in xrange(maxredirs): - self.log_debug("Redirect #%d to: %s" % (i, url)) - - header = self.load(url, just_header=True) + header = self.load(url, just_header=True) + for i in xrange(1, maxredirs): if not redirect or header.get('connection') == "close": resumable = False @@ -190,11 +188,12 @@ class Hoster(Base): resource = location elif code == 301 or resumable: + self.log_debug("Redirect #%d to: %s" % (i, location)) + header = self.load(location, just_header=True) url = location continue else: - mimetype = "" contenttype = header.get('content-type') extension = os.path.splitext(parse_name(url))[-1] @@ -205,6 +204,9 @@ class Hoster(Base): mimetype = mimetypes.guess_type(extension, False)[0] or \ "application/octet-stream" + else: + mimetype = None + if mimetype and (resource or 'html' not in mimetype): resource = url else: @@ -217,7 +219,7 @@ class Hoster(Base): file = encode(filename) #@TODO: Safe-filename check in HTTPDownload in 0.4.10 resume = self.resume_download if resume is None else bool(resume) - dl_chunks = self.pyload.config.get("download", "chunks") + dl_chunks = self.pyload.config.get('download', 'chunks') chunk_limit = chunks or self.chunk_limit or -1 if -1 in (dl_chunks, chunk_limit): @@ -277,7 +279,7 @@ class Hoster(Base): self.pyfile.setStatus("downloading") - dl_folder = self.pyload.config.get("general", "download_folder") + dl_folder = self.pyload.config.get('general', 'download_folder') dl_dirname = safejoin(dl_folder, self.pyfile.package().folder) dl_filename = safejoin(dl_dirname, dl_basename) @@ -479,8 +481,8 @@ class Hoster(Base): :raises Skip: """ - pack_folder = self.pyfile.package().folder if self.pyload.config.get("general", "folder_per_package") else "" - dl_folder = self.pyload.config.get("general", "download_folder") + pack_folder = self.pyfile.package().folder if self.pyload.config.get('general', 'folder_per_package') else "" + dl_folder = self.pyload.config.get('general', 'download_folder') dl_file = fsjoin(dl_folder, pack_folder, self.pyfile.name) if not exists(dl_file): @@ -491,7 +493,7 @@ class Hoster(Base): self.last_download = "" return - if self.pyload.config.get("download", "skip_existing"): + if self.pyload.config.get('download', 'skip_existing'): plugin = self.pyload.db.findDuplicates(self.pyfile.id, pack_folder, self.pyfile.name) msg = plugin[0] if plugin else _("File exists") self.skip(msg) diff --git a/module/plugins/internal/MultiCrypter.py b/module/plugins/internal/MultiCrypter.py index c924ee916..7bca45c61 100644 --- a/module/plugins/internal/MultiCrypter.py +++ b/module/plugins/internal/MultiCrypter.py @@ -20,7 +20,7 @@ class MultiCrypter(SimpleCrypter): def init(self): - self.PLUGIN_NAME = self.pyload.pluginManager.crypterPlugins[self.classname]['name'] + self.PLUGIN_NAME = self.pyload.pluginManager.crypterPlugins.get(self.classname)['name'] def _log(self, level, plugintype, pluginname, messages): diff --git a/module/plugins/internal/MultiHoster.py b/module/plugins/internal/MultiHoster.py index a38230b9d..0adbf8d90 100644 --- a/module/plugins/internal/MultiHoster.py +++ b/module/plugins/internal/MultiHoster.py @@ -32,7 +32,7 @@ class MultiHoster(SimpleHoster): def init(self): - self.PLUGIN_NAME = self.pyload.pluginManager.hosterPlugins[self.classname]['name'] + self.PLUGIN_NAME = self.pyload.pluginManager.hosterPlugins.get(self.classname)['name'] def _log(self, level, plugintype, pluginname, messages): @@ -54,8 +54,8 @@ class MultiHoster(SimpleHoster): super(MultiHoster, self).setup_base() - def prepare(self): - super(MultiHoster, self).prepare() + def _prepare(self): + super(MultiHoster, self)._prepare() if self.DIRECT_LINK is None: self.direct_dl = self.__pattern__ != r'^unmatchable$' and re.match(self.__pattern__, self.pyfile.url) @@ -68,9 +68,9 @@ class MultiHoster(SimpleHoster): super(MultiHoster, self)._process(thread) except Fail, e: - if self.config.get("revertfailed", True) and \ - self.pyload.pluginManager.hosterPlugins[self.classname].get('new_module'): - hdict = self.pyload.pluginManager.hosterPlugins[self.classname] + if self.config.get('revertfailed', True) and \ + self.pyload.pluginManager.hosterPlugins.get(self.classname).get('new_module'): + hdict = self.pyload.pluginManager.hosterPlugins.get(self.classname) tmp_module = hdict['new_module'] tmp_name = hdict['new_name'] @@ -85,7 +85,7 @@ class MultiHoster(SimpleHoster): self.restart(_("Revert to original hoster plugin")) else: - raise Fail(encode(e)) + raise Fail(e) def handle_premium(self, pyfile): diff --git a/module/plugins/internal/Notifier.py b/module/plugins/internal/Notifier.py index e9f1fab74..8c79cf7fa 100644 --- a/module/plugins/internal/Notifier.py +++ b/module/plugins/internal/Notifier.py @@ -136,13 +136,13 @@ class Notifier(Addon): elapsed_time = time.time() - self.last_notify - if elapsed_time < self.config.get("sendinterval", 1): + if elapsed_time < self.config.get('sendinterval', 1): return elif elapsed_time > 60: self.notifications = 0 - elif self.notifications >= self.config.get("sendpermin", 60): + elif self.notifications >= self.config.get('sendpermin', 60): return self.log_debug("Sending notification...") diff --git a/module/plugins/internal/OCR.py b/module/plugins/internal/OCR.py index 274f14d8b..0ffcbb4ec 100644 --- a/module/plugins/internal/OCR.py +++ b/module/plugins/internal/OCR.py @@ -60,7 +60,7 @@ class OCR(Plugin): """ Run a command """ - call = [command] + args + call = (command,) + args self.log_debug("EXECUTE " + " ".join(call)) call = map(encode, call) diff --git a/module/plugins/internal/Plugin.py b/module/plugins/internal/Plugin.py index bbb4e33b8..a8ef9b4f2 100644 --- a/module/plugins/internal/Plugin.py +++ b/module/plugins/internal/Plugin.py @@ -249,12 +249,7 @@ class Plugin(object): os.makedirs(os.path.join("tmp", self.classname)) with open(framefile, "wb") as f: - try: - html = encode(self.last_html) - except Exception: - html = self.last_html - - f.write(html) + f.write(encode(self.last_html)) except IOError, e: self.log_error(e) diff --git a/module/plugins/internal/SevenZip.py b/module/plugins/internal/SevenZip.py index 2ae3c197c..5ad1156fe 100644 --- a/module/plugins/internal/SevenZip.py +++ b/module/plugins/internal/SevenZip.py @@ -123,8 +123,10 @@ class SevenZip(UnRar): args.append("-y") #: Set a password - if kwargs.get('password'): - args.append("-p%s" % kwargs['password']) + password = kwargs.get('password') + + if password: + args.append("-p%s" % password) else: args.append("-p-") diff --git a/module/plugins/internal/SimpleHoster.py b/module/plugins/internal/SimpleHoster.py index 98f040bad..5feb96aec 100644 --- a/module/plugins/internal/SimpleHoster.py +++ b/module/plugins/internal/SimpleHoster.py @@ -96,7 +96,7 @@ class SimpleHoster(Hoster): CHECK_TRAFFIC = False #: Set to True to reload checking traffic left for premium account COOKIES = True #: or False or list of tuples [(domain, name, value)] DIRECT_LINK = True #: Set to True to looking for direct link (as defined in handle_direct method), set to None to do it if self.account is True else False - DISPOSITION = True #: Set to True to use any content-disposition value in http header as file name + DISPOSITION = True #: Set to True to use any content-disposition value found in http header as file name LOGIN_ACCOUNT = False #: Set to True to require account login LOGIN_PREMIUM = False #: Set to True to require premium account login LEECH_HOSTER = False #: Set to True to leech other hoster link (as defined in handle_multi method) @@ -199,7 +199,7 @@ class SimpleHoster(Hoster): self.resume_download = self.premium - def prepare(self): + def _prepare(self): self.link = "" self.direct_dl = False self.leech_dl = False @@ -220,7 +220,7 @@ class SimpleHoster(Hoster): self.LINK_PREMIUM_PATTERN = self.LINK_PATTERN if self.LEECH_HOSTER: - pattern = self.pyload.pluginManager.hosterPlugins[self.classname]['pattern'] + pattern = self.pyload.pluginManager.hosterPlugins.get(self.classname)['pattern'] if self.__pattern__ is not pattern and re.match(self.__pattern__, self.pyfile.url) is None: self.leech_dl = True @@ -228,7 +228,7 @@ class SimpleHoster(Hoster): self.direct_dl = False elif self.DIRECT_LINK is None: - self.direct_dl = bool(self.account) + self.direct_dl = bool(self.premium) else: self.direct_dl = self.DIRECT_LINK @@ -237,7 +237,7 @@ class SimpleHoster(Hoster): self.pyfile.url = replace_patterns(self.pyfile.url, self.URL_REPLACEMENTS) - def preload(self): + def _preload(self): if self.data: return @@ -248,7 +248,7 @@ class SimpleHoster(Hoster): def process(self, pyfile): - self.prepare() + self._prepare() #@TODO: Remove `handle_multi`, use MultiHoster instead if self.leech_dl: @@ -266,7 +266,7 @@ class SimpleHoster(Hoster): self.log_info(_("Direct download link not found")) if not self.link: - self.preload() + self._preload() self.check_errors() if self.info.get('status', 3) != 2: @@ -352,7 +352,7 @@ class SimpleHoster(Hoster): self.log_warning(errmsg) wait_time = parse_time(errmsg) - self.wait(wait_time, reconnect=wait_time > self.config.get("max_wait", 10) * 60) + self.wait(wait_time, reconnect=wait_time > self.config.get('max_wait', 10) * 60) self.restart(_("Download limit exceeded")) if self.HAPPY_HOUR_PATTERN and re.search(self.HAPPY_HOUR_PATTERN, self.data): @@ -381,7 +381,7 @@ class SimpleHoster(Hoster): elif re.search(r'limit|wait|slot', errmsg, re.I): wait_time = parse_time(errmsg) - self.wait(wait_time, reconnect=wait_time > self.config.get("max_wait", 10) * 60) + self.wait(wait_time, reconnect=wait_time > self.config.get('max_wait', 10) * 60) self.restart(_("Download limit exceeded")) elif re.search(r'country|ip|region|nation', errmsg, re.I): @@ -423,7 +423,7 @@ class SimpleHoster(Hoster): waitmsg = m.group(0).strip() wait_time = parse_time(waitmsg) - self.wait(wait_time, reconnect=wait_time > self.config.get("max_wait", 10) * 60) + self.wait(wait_time, reconnect=wait_time > self.config.get('max_wait', 10) * 60) self.log_info(_("No errors found")) self.info.pop('error', None) @@ -437,7 +437,7 @@ class SimpleHoster(Hoster): def handle_direct(self, pyfile): - self.link = pyfile.url if self.isresource(pyfile.url) else None + self.link = self.isresource(pyfile.url) def handle_multi(self, pyfile): #: Multi-hoster handler diff --git a/module/plugins/internal/UnRar.py b/module/plugins/internal/UnRar.py index d1f180546..07f3b0f23 100644 --- a/module/plugins/internal/UnRar.py +++ b/module/plugins/internal/UnRar.py @@ -212,8 +212,10 @@ class UnRar(Extractor): args.append("-y") #: Set a password - if kwargs.get('password'): - args.append("-p%s" % kwargs['password']) + password = kwargs.get('password') + + if password: + args.append("-p%s" % password) else: args.append("-p-") diff --git a/module/plugins/internal/XFSAccount.py b/module/plugins/internal/XFSAccount.py index f5aa37c81..6866f8b19 100644 --- a/module/plugins/internal/XFSAccount.py +++ b/module/plugins/internal/XFSAccount.py @@ -69,8 +69,9 @@ class XFSAccount(MultiAccount): self._set_xfs_cookie() - def grab_hosters(self, user, password, data): - pass + #@TODO: Implement default grab_hosters routine + # def grab_hosters(self, user, password, data): + # pass def grab_info(self, user, password, data): diff --git a/module/plugins/internal/XFSCrypter.py b/module/plugins/internal/XFSCrypter.py index d80276cfb..5754be1d8 100644 --- a/module/plugins/internal/XFSCrypter.py +++ b/module/plugins/internal/XFSCrypter.py @@ -40,11 +40,11 @@ class XFSCrypter(SimpleCrypter): set_cookie(self.req.cj, *cookie) - def prepare(self): + def _prepare(self): if not self.PLUGIN_DOMAIN: self.fail(_("Missing PLUGIN DOMAIN")) if self.COOKIES: self._set_xfs_cookie() - super(XFSCrypter, self).prepare() + super(XFSCrypter, self)._prepare() diff --git a/module/plugins/internal/XFSHoster.py b/module/plugins/internal/XFSHoster.py index dabf1457a..81347e1ac 100644 --- a/module/plugins/internal/XFSHoster.py +++ b/module/plugins/internal/XFSHoster.py @@ -46,7 +46,7 @@ class XFSHoster(SimpleHoster): HAPPY_HOUR_PATTERN = r'>[Hh]appy hour' ERROR_PATTERN = r'(?:class=["\']err["\'].*?>|<[Cc]enter><b>|>Error</td>|>\(ERROR:)(?:\s*<.+?>\s*)*(.+?)(?:["\']|<|\))' - LINK_LEECH_PATTERN = r'<h2>Download Link</h2>\s*<textarea[^>]*>([^<]+)' + LINK_LEECH_PATTERN = r'<h2>Download Link</h2>\s*<textarea.*?>(.+?)' CAPTCHA_PATTERN = r'(https?://[^"\']+?/captchas?/[^"\']+)' CAPTCHA_BLOCK_PATTERN = r'>Enter code.*?<div.*?>(.+?)</div>' @@ -71,7 +71,7 @@ class XFSHoster(SimpleHoster): set_cookie(self.req.cj, *cookie) - def prepare(self): + def _prepare(self): if not self.PLUGIN_DOMAIN: self.fail(_("Missing PLUGIN DOMAIN")) @@ -82,7 +82,7 @@ class XFSHoster(SimpleHoster): pattern = r'(?:file: "(.+?)"|(https?://(?:www\.)?([^/]*?%s|\d+\.\d+\.\d+\.\d+)(\:\d+)?(/d/|(/files)?/\d+/\w+/).+?)["\'<])' self.LINK_PATTERN = pattern % self.PLUGIN_DOMAIN.replace('.', '\.') - super(XFSHoster, self).prepare() + super(XFSHoster, self)._prepare() if self.DIRECT_LINK is None: self.direct_dl = self.premium @@ -98,12 +98,11 @@ class XFSHoster(SimpleHoster): if m is not None: break - data = self._post_parameters() + self.data = self.load(pyfile.url, + post=self._post_parameters(), + redirect=False) - self.data = self.load(pyfile.url, post=data, redirect=False) - - m = re.search(r'Location\s*:\s*(.+)', self.req.http.header, re.I) - if m and not "op=" in m.group(1): + if not "op=" in self.last_header.get('location', "op="): break m = re.search(self.LINK_PATTERN, self.data, re.S) @@ -169,10 +168,7 @@ class XFSHoster(SimpleHoster): if m is None: self.error(_("LINK_LEECH_PATTERN not found")) - header = self.load(m.group(1), just_header=True) - - if 'location' in header: #: Direct download link - self.link = header.get('location') + self.link = self.load(m.group(1), just_header=True).get('location') def _post_parameters(self): |