#!/usr/bin/env python # -*- coding: utf-8 -*- from module.Api import Api, RequirePerm, Permission from ApiComponent import ApiComponent class AddonApi(ApiComponent): """ Methods to interact with addons """ def getAllInfo(self): """Returns all information stored by addon plugins. Values are always strings :return: {"plugin": {"name": value } } """ return self.core.addonManager.getAllInfo() def getInfoByPlugin(self, plugin): """Returns information stored by a specific plugin. :param plugin: pluginname :return: dict of attr names mapped to value {"name": value} """ return self.core.addonManager.getInfo(plugin) if Api.extend(AddonApi): del AddonApi
"""Check online status of all files in a package, also a default action when package is added. """ self.core.files.reCheckPackage(pid) @RequirePerm(Permission.Modify) def restartFailed(self): """Restarts all failed failes.""" self.core.files.restartFailed() @RequirePerm(Permission.Modify) def stopAllDownloads(self): """Aborts all running downloads.""" pyfiles = self.core.files.cachedFiles() for pyfile in pyfiles: pyfile.abortDownload() @RequirePerm(Permission.Modify) def stopDownloads(self, fids): """Aborts specific downloads. :param fids: list of file ids :return: """ pyfiles = self.core.files.cachedFiles() for pyfile in pyfiles: if pyfile.id in fids: pyfile.abortDownload() if Api.extend(DownloadApi): del DownloadApi
:param fids: list of file ids :param pid: destination package :return: False if files can't be moved """ return self.core.files.moveFiles(fids, pid) @RequirePerm(Permission.Modify) def orderPackage(self, pid, position): """Set new position for a package. :param pid: package id :param position: new position, 0 for very beginning """ self.core.files.orderPackage(pid, position) @RequirePerm(Permission.Modify) def orderFiles(self, fids, pid, position): """ Set a new position for a bunch of files within a package. All files have to be in the same package and must be **continuous**\ in the package. That means no gaps between them. :param fids: list of file ids :param pid: package id of parent package :param position: new position: 0 for very beginning """ self.core.files.orderFiles(fids, pid, position) if Api.extend(FileApi): del FileApi
if t.type == Interaction.Notification: t.setWaiting(self.core.interactionManager.CLIENT_THRESHOLD) return tasks @RequirePerm(Permission.Interaction) def setInteractionResult(self, iid, result): """Set Result for a interaction task. It will be immediately removed from task queue afterwards :param iid: interaction id :param result: result as json string """ task = self.core.interactionManager.getTaskByID(iid) if task and self.primaryUID == task.owner: task.setResult(result) @RequirePerm(Permission.Interaction) def getAddonHandler(self): pass @RequirePerm(Permission.Interaction) def callAddonHandler(self, plugin, func, pid_or_fid): pass @RequirePerm(Permission.Download) def generateDownloadLink(self, fid, timeout): pass if Api.extend(UserInteractionApi): del UserInteractionApi
return self.checkOnlineStatus(urls) @RequirePerm(Permission.Add) def pollResults(self, rid): """ Polls the result available for ResultID :param rid: `ResultID` :return: `OnlineCheck`, if rid is -1 then there is no more data available """ result = self.core.threadManager.getInfoResult(rid) if "ALL_INFO_FETCHED" in result: del result["ALL_INFO_FETCHED"] return OnlineCheck(-1, result) else: return OnlineCheck(rid, result) @RequirePerm(Permission.Add) def generatePackages(self, links): """ Parses links, generates packages names from urls :param links: list of urls :return: package names mapped to urls """ result = parseNames((x, x) for x in links) return result if Api.extend(DownloadPreparingApi): del DownloadPreparingApi
accounts = [] for plugin in accs.itervalues(): accounts.extend(plugin.values()) return accounts @RequirePerm(Permission.All) def getAccountTypes(self): """All available account types. :return: string list """ return self.core.pluginManager.getPlugins("accounts").keys() @RequirePerm(Permission.Accounts) def updateAccount(self, plugin, account, password=None, options={}): """Changes pw/options for specific account.""" self.core.accountManager.updateAccount(plugin, account, password, options) @RequirePerm(Permission.Accounts) def removeAccount(self, plugin, account): """Remove account from pyload. :param plugin: pluginname :param account: accountname """ self.core.accountManager.removeAccount(plugin, account) if Api.extend(AccountApi): del AccountApi
urls.append(th.name) return self.checkOnlineStatus(urls) @RequirePerm(Permission.Add) def pollResults(self, rid): """ Polls the result available for ResultID :param rid: `ResultID` :return: `OnlineCheck`, if rid is -1 then there is no more data available """ result = self.core.threadManager.getInfoResult(rid) if "ALL_INFO_FETCHED" in result: del result["ALL_INFO_FETCHED"] return OnlineCheck(-1, result) else: return OnlineCheck(rid, result) @RequirePerm(Permission.Add) def generatePackages(self, links): """ Parses links, generates packages names from urls :param links: list of urls :return: package names mapped to urls """ result = parseNames((x, x) for x in links) return result if Api.extend(DownloadPreparingApi): del DownloadPreparingApi
return accounts @RequirePerm(Permission.All) def getAccountTypes(self): """All available account types. :return: string list """ return self.core.pluginManager.getPlugins("accounts").keys() @RequirePerm(Permission.Accounts) def updateAccount(self, plugin, login, password): """Changes pw/options for specific account.""" # TODO: options self.core.accountManager.updateAccount(plugin, login, password, {}) def updateAccountInfo(self, account): """ Update account from :class:`AccountInfo` """ #TODO @RequirePerm(Permission.Accounts) def removeAccount(self, account): """Remove account from pyload. :param account: :class:`ÀccountInfo` instance """ self.core.accountManager.removeAccount(account.plugin, account.loginname) if Api.extend(AccountApi): del AccountApi
fh.close() if offset >= len(lines): return [] return lines[offset:] except: return ['No log available'] @RequirePerm(Permission.All) def isTimeDownload(self): """Checks if pyload will start new downloads according to time in config. :return: bool """ start = self.core.config['downloadTime']['start'].split(":") end = self.core.config['downloadTime']['end'].split(":") return compare_time(start, end) @RequirePerm(Permission.All) def isTimeReconnect(self): """Checks if pyload will try to make a reconnect :return: bool """ start = self.core.config['reconnect']['startTime'].split(":") end = self.core.config['reconnect']['endTime'].split(":") return compare_time(start, end) and self.core.config["reconnect"]["activated"] if Api.extend(CoreApi): del CoreApi
fh = open(filename, "r") lines = fh.readlines() fh.close() if offset >= len(lines): return [] return lines[offset:] except: return ['No log available'] @RequirePerm(Permission.All) def isTimeDownload(self): """Checks if pyload will start new downloads according to time in config. :return: bool """ start = self.core.config['downloadTime']['start'].split(":") end = self.core.config['downloadTime']['end'].split(":") return compare_time(start, end) @RequirePerm(Permission.All) def isTimeReconnect(self): """Checks if pyload will try to make a reconnect :return: bool """ start = self.core.config['reconnect']['startTime'].split(":") end = self.core.config['reconnect']['endTime'].split(":") return compare_time(start, end) and self.core.config["reconnect"]["activated"] if Api.extend(CoreApi): del CoreApi
class CollectorApi(ApiComponent): """ Link collector """ @RequirePerm(Permission.All) def getCollector(self): pass @RequirePerm(Permission.Add) def addToCollector(self, links): pass @RequirePerm(Permission.Add) def addFromCollector(self, name, new_name): pass @RequirePerm(Permission.Delete) def deleteCollPack(self, name): pass @RequirePerm(Permission.Add) def renameCollPack(self, name, new_name): pass @RequirePerm(Permission.Delete) def deleteCollLink(self, url): pass if Api.extend(CollectorApi): del CollectorApi
# requires at least plugin permissions, but only admin can load core config config, values = self.core.config.getSection(name, self.primaryUID) return toConfigHolder(name, config, values) @RequirePerm(Permission.Plugins) def saveConfig(self, config): """Used to save a configuration, core config can only be saved by admins :param config: :class:`ConfigHolder` """ for item in config.items: self.core.config.set(config.name, item.name, item.value, sync=False, user=self.primaryUID) # save the changes self.core.config.saveValues(self.primaryUID, config.name) @RequirePerm(Permission.Plugins) def deleteConfig(self, plugin): """Deletes modified config :param plugin: plugin name """ #TODO: delete should deactivate addons? self.core.config.delete(plugin, self.primaryUID) if Api.extend(ConfigApi): del ConfigApi
:param name: Name of plugin or config section :rtype: ConfigHolder """ # requires at least plugin permissions, but only admin can load core config config, values = self.core.config.getSection(name, self.primaryUID) return toConfigHolder(name, config, values) @RequirePerm(Permission.Plugins) def saveConfig(self, config): """Used to save a configuration, core config can only be saved by admins :param config: :class:`ConfigHolder` """ for item in config.items: self.core.config.set(config.name, item.name, item.value, sync=False, user=self.primaryUID) # save the changes self.core.config.saveValues(self.primaryUID, config.name) @RequirePerm(Permission.Plugins) def deleteConfig(self, plugin): """Deletes modified config :param plugin: plugin name """ #TODO: delete should deactivate addons? self.core.config.delete(plugin, self.primaryUID) if Api.extend(ConfigApi): del ConfigApi