diff options
Diffstat (limited to 'module/Api.py')
| -rw-r--r-- | module/Api.py | 53 | 
1 files changed, 38 insertions, 15 deletions
| diff --git a/module/Api.py b/module/Api.py index 54aeff669..5583bb603 100644 --- a/module/Api.py +++ b/module/Api.py @@ -20,6 +20,7 @@  from base64 import standard_b64encode  from os.path import join  from time import time +import re  from remote.thriftbackend.thriftgen.pyload.ttypes import *  from remote.thriftbackend.thriftgen.pyload.Pyload import Iface @@ -28,6 +29,11 @@ from PyFile import PyFile  from database.UserDatabase import ROLE  from utils import freeSpace, compare_time  from common.packagetools import parseNames +from network.RequestFactory import getURL + + +urlmatcher = re.compile(r"((https?|ftps?|xdcc|sftp):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)", re.IGNORECASE) +  class Api(Iface):      """ @@ -39,6 +45,8 @@ class Api(Iface):      for information about data structures and what methods are usuable with rpc.      """ +    EXTERNAL = Iface  # let the json api know which methods are external +      def __init__(self, core):          self.core = core @@ -54,7 +62,7 @@ class Api(Iface):              section = ConfigSection(sectionName, sub["desc"])              items = []              for key, data in sub.iteritems(): -                if key in ("desc","outline"): +                if key in ("desc", "outline"):                      continue                  item = ConfigItem()                  item.name = key @@ -130,7 +138,7 @@ class Api(Iface):          """          return self.core.config.plugin -     +      def pauseServer(self):          """Pause server: Tt wont start any new downloads, but nothing gets aborted."""          self.core.threadManager.pause = True @@ -175,7 +183,7 @@ class Api(Iface):          return freeSpace(self.core.config["general"]["download_folder"])      def getServerVersion(self): -        """pyLoad Core version """  +        """pyLoad Core version """          return self.core.version      def kill(self): @@ -266,14 +274,30 @@ class Api(Iface):          return pid -    def parseURLs(self, html): -        # TODO parse +    def parseURLs(self, html=None, url=None): +        """Parses html content or any arbitaty text for links and returns result of `checkURLs` + +        :param html: html source +        :return: +        """          urls = [] +        if html: +            urls += [x[0] for x in urlmatcher.findall(html)] + +        if url: +            page = getURL(url) +            urls += [x[0] for x in urlmatcher.findall(page)] +          return self.checkURLs(urls)      def checkURLs(self, urls): +        """ Gets urls and returns pluginname mapped to list of matches urls. + +        :param urls: +        :return: {plugin: urls} +        """          data = self.core.pluginManager.parseUrls(urls)          plugins = {} @@ -289,7 +313,7 @@ class Api(Iface):          """ initiates online status check          :param urls: -        :return: initial set of data and the result id +        :return: initial set of data as `OnlineCheck` instance containing the result id          """          data = self.core.pluginManager.parseUrls(urls) @@ -298,7 +322,7 @@ class Api(Iface):          tmp = [(url, (url, OnlineStatus(url, pluginname, "unknown", 3, 0))) for url, pluginname in data]          data = parseNames(tmp)          result = {} -         +          for k, v in data.iteritems():              for url, status in v:                  status.packagename = k @@ -307,7 +331,7 @@ class Api(Iface):          return OnlineCheck(rid, result)      def checkOnlineStatusContainer(self, urls, container, data): -        """ checks online status of files and container file +        """ checks online status of urls and a submited container file          :param urls: list of urls          :param container: container file name @@ -323,8 +347,8 @@ class Api(Iface):      def pollResults(self, rid):          """ Polls the result available for ResultID -        :param rid: if -1 no more data is available -        :return: +        :param rid: `ResultID` +        :return: `OnlineCheck`, if rid is -1 then no more data available          """          result = self.core.threadManager.getInfoResult(rid) @@ -336,12 +360,12 @@ class Api(Iface):      def generatePackages(self, links): -        """ Parses links, generates packages names only from urls +        """ Parses links, generates packages names from urls          :param links: list of urls -        :return: package names mapt to urls +        :return: package names mapped to urls          """ -        result = parseNames((x,x) for x in links) +        result = parseNames((x, x) for x in links)          return result      def generateAndAddPackages(self, links, dest=Destination.Queue): @@ -365,7 +389,6 @@ class Api(Iface):          data = self.core.pluginManager.parseUrls(links)          self.core.threadManager.createResultThread(data, True) -              def getPackageData(self, pid):          """Returns complete information about package, and included files. @@ -410,7 +433,7 @@ class Api(Iface):          info = self.core.files.getFileData(int(fid))          if not info:              raise FileDoesNotExists(fid) -         +          fdata = self._convertPyFile(info.values()[0])          return fdata | 
