diff options
| author | 2013-12-29 21:07:28 +0100 | |
|---|---|---|
| committer | 2013-12-29 21:07:28 +0100 | |
| commit | 8318540e162cccbb049bebebc5aca03384a1e4e9 (patch) | |
| tree | 5b4dc38520a82b5c8044a026ab996be1d71a782e /pyload/plugins | |
| parent | added auth to request class (diff) | |
| download | pyload-8318540e162cccbb049bebebc5aca03384a1e4e9.tar.xz | |
added progress type enum, new DebugCrypter + Hoster, little improvements for crypter api
Diffstat (limited to 'pyload/plugins')
| -rw-r--r-- | pyload/plugins/Account.py | 2 | ||||
| -rw-r--r-- | pyload/plugins/Addon.py | 2 | ||||
| -rw-r--r-- | pyload/plugins/Base.py | 8 | ||||
| -rw-r--r-- | pyload/plugins/Crypter.py | 30 | ||||
| -rw-r--r-- | pyload/plugins/Hoster.py | 2 | ||||
| -rw-r--r-- | pyload/plugins/crypter/DebugCrypter.py | 29 | ||||
| -rw-r--r-- | pyload/plugins/hoster/DebugHoster.py | 30 | 
7 files changed, 91 insertions, 12 deletions
| diff --git a/pyload/plugins/Account.py b/pyload/plugins/Account.py index 4e6f174d2..cbf545611 100644 --- a/pyload/plugins/Account.py +++ b/pyload/plugins/Account.py @@ -45,6 +45,8 @@ class Account(Base):          return cls(m, info.loginname, info.owner,                     True if info.activated else False, True if info.shared else False, password, options) +    __type__ = "account" +      def __init__(self, manager, loginname, owner, activated, shared, password, options):          Base.__init__(self, manager.core, owner) diff --git a/pyload/plugins/Addon.py b/pyload/plugins/Addon.py index da5bbc1d7..7e331d324 100644 --- a/pyload/plugins/Addon.py +++ b/pyload/plugins/Addon.py @@ -100,6 +100,8 @@ class Addon(Base):      #: periodic call interval in seconds      interval = 0 +    __type__ = "addon" +      def __init__(self, core, manager, user=None):          Base.__init__(self, core, user) diff --git a/pyload/plugins/Base.py b/pyload/plugins/Base.py index 9dcb99453..97fb027d8 100644 --- a/pyload/plugins/Base.py +++ b/pyload/plugins/Base.py @@ -40,7 +40,10 @@ class Base(object):      """      The Base plugin class with all shared methods and every possible attribute for plugin definition.      """ +    #: Version as string or number      __version__ = "0.1" +    # Type of the plugin, will be inherited and should not be set! +    __type__ = ""      #: Regexp pattern which will be matched for download/crypter plugins      __pattern__ = r""      #: Internal addon plugin which is always loaded @@ -150,6 +153,11 @@ class Base(object):          """ Name of the plugin class """          return self.__name__ +    @property +    def pattern(self): +        """  Gives the compiled pattern of the plugin """ +        return self.core.pluginManager.getPlugin(self.__type__, self.__name__).re +      def setConfig(self, option, value):          """ Set config value for current plugin """          self.core.config.set(self.__name__, option, value) diff --git a/pyload/plugins/Crypter.py b/pyload/plugins/Crypter.py index a81fffafa..b6bdb1edd 100644 --- a/pyload/plugins/Crypter.py +++ b/pyload/plugins/Crypter.py @@ -6,11 +6,19 @@ from pyload.utils.fs import exists, remove, fs_encode  from Base import Base, Retry +# represent strings as LinkStatus +def to_link_list(links, status=DS.Queued): +    return [LinkStatus(link, link, -1, status) if isinstance(link, basestring) else link +            for link in links] + +  class Package:      """ Container that indicates that a new package should be created """      def __init__(self, name=None, links=None):          self.name = name + +        # list of link status          self.links = []          if links: @@ -24,12 +32,7 @@ class Package:          :param links: One or list of urls or :class:`LinkStatus`          """ -        links = to_list(links) -        for link in links: -            if not isinstance(link, LinkStatus): -                link = LinkStatus(link, link, -1, DS.Queued) - -            self.links.append(link) +        self.links.extend(to_link_list(to_list(links)))      def addPackage(self, pack):          self.packs.append(pack) @@ -128,13 +131,16 @@ class Crypter(Base):          for url_or_pack in result:              if isinstance(url_or_pack, Package): #package                  ret.extend(url_or_pack.getAllURLs()) -            else: # single url -                ret.append(url_or_pack) -                # eliminate duplicates +            elif isinstance(url_or_pack, LinkStatus): #link +                ret.append(url_or_pack.url) +            else: +                core.log.debug("Invalid decrypter result: " + url_or_pack) +          return uniqify(ret) + +    __type__ = "crypter"      # TODO: pass user to crypter -    # TODO: crypter could not only know url, but also the name and size      def __init__(self, core, password=None):          Base.__init__(self, core) @@ -196,7 +202,7 @@ class Crypter(Base):          """Internal method to select decrypting method          :param urls: List of urls/content -        :return: +        :return: (links, packages)          """          cls = self.__class__ @@ -235,7 +241,7 @@ class Crypter(Base):                  self.logWarning(_("Could not remove file '%s'") % f)                  self.core.print_exc() -        return result +        return to_link_list(result)      def getLocalContent(self, urls):          """Load files from disk and separate to file content and url list diff --git a/pyload/plugins/Hoster.py b/pyload/plugins/Hoster.py index b59d11a9c..0ad07878a 100644 --- a/pyload/plugins/Hoster.py +++ b/pyload/plugins/Hoster.py @@ -47,6 +47,8 @@ class Hoster(Base):          """          pass +    __type__ = "hoster" +      def __init__(self, pyfile):          # TODO: pyfile.owner, but it's not correct yet          Base.__init__(self, pyfile.m.core) diff --git a/pyload/plugins/crypter/DebugCrypter.py b/pyload/plugins/crypter/DebugCrypter.py new file mode 100644 index 000000000..a10d7c8e7 --- /dev/null +++ b/pyload/plugins/crypter/DebugCrypter.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +from random import randint +from time import sleep + +from pyload.plugins.Crypter import Crypter + +class DebugCrypter(Crypter): +    """ Generates link used by debug hoster to test the decrypt mechanism """ + +    __version__ = 0.1 +    __pattern__ = r"^debug_crypter=(\d+)$" + + +    def decryptURL(self, url): + +        m = self.pattern.search(url) +        n = int(m.group(1)) + +        sleep(randint(3, n if n > 2 else 3)) + +        return ["debug_hoster=%d" % i for i in range(n)] + + + + + + + diff --git a/pyload/plugins/hoster/DebugHoster.py b/pyload/plugins/hoster/DebugHoster.py new file mode 100644 index 000000000..d168ad1c2 --- /dev/null +++ b/pyload/plugins/hoster/DebugHoster.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- + +from time import sleep +from random import randint + +from pyload.Api import LinkStatus, DownloadStatus as DS +from pyload.plugins.Hoster import Hoster + + +class DebugHoster(Hoster): +    """ Generates link used by debug hoster to test the decrypt mechanism """ + +    __version__ = 0.1 +    __pattern__ = r"^debug_hoster=\d*$" + +    @classmethod +    def getInfo(cls, urls): +        for url in urls: +            yield LinkStatus(url, url + " - checked", randint(1024, 2048), DS.Online) +            sleep(1) + +    def process(self, pyfile): +        pass + + + + + + + | 
