summaryrefslogtreecommitdiffstats
path: root/pyload/network/RequestFactory.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyload/network/RequestFactory.py')
-rw-r--r--pyload/network/RequestFactory.py106
1 files changed, 106 insertions, 0 deletions
diff --git a/pyload/network/RequestFactory.py b/pyload/network/RequestFactory.py
new file mode 100644
index 000000000..472705409
--- /dev/null
+++ b/pyload/network/RequestFactory.py
@@ -0,0 +1,106 @@
+# -*- coding: utf-8 -*-
+
+###############################################################################
+# Copyright(c) 2008-2013 pyLoad Team
+# http://www.pyload.org
+#
+# This file is part of pyLoad.
+# pyLoad is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# Subjected to the terms and conditions in LICENSE
+#
+# @author: RaNaN
+###############################################################################
+
+from Bucket import Bucket
+
+from pyload.plugins.network.DefaultRequest import DefaultRequest, DefaultDownload
+
+
+class RequestFactory:
+ def __init__(self, core):
+ self.core = core
+ self.bucket = Bucket()
+ self.updateBucket()
+
+ def getURL(self, *args, **kwargs):
+ """ see HTTPRequest for argument list """
+ h = DefaultRequest(self.getConfig())
+ try:
+ rep = h.load(*args, **kwargs)
+ finally:
+ h.close()
+
+ return rep
+
+ ########## old api methods above
+
+ def getRequest(self, context=None, klass=DefaultRequest):
+ """ Creates a request with new or given context """
+ # also accepts the context class directly
+ if isinstance(context, klass.CONTEXT_CLASS):
+ return klass(self.getConfig(), context)
+ elif context:
+ return klass(*context)
+ else:
+ return klass(self.getConfig())
+
+ def getDownloadRequest(self, request=None, klass=DefaultDownload):
+ """ Instantiates a instance for downloading """
+ # TODO: load with plugin manager
+ return klass(self.bucket, request)
+
+ def getInterface(self):
+ return self.core.config["download"]["interface"]
+
+ def getProxies(self):
+ """ returns a proxy list for the request classes """
+ if not self.core.config["proxy"]["proxy"]:
+ return {}
+ else:
+ type = "http"
+ setting = self.core.config["proxy"]["type"].lower()
+ if setting == "socks4":
+ type = "socks4"
+ elif setting == "socks5":
+ type = "socks5"
+
+ username = None
+ if self.core.config["proxy"]["username"] and self.core.config["proxy"]["username"].lower() != "none":
+ username = self.core.config["proxy"]["username"]
+
+ pw = None
+ if self.core.config["proxy"]["password"] and self.core.config["proxy"]["password"].lower() != "none":
+ pw = self.core.config["proxy"]["password"]
+
+ return {
+ "type": type,
+ "address": self.core.config["proxy"]["address"],
+ "port": self.core.config["proxy"]["port"],
+ "username": username,
+ "password": pw,
+ }
+
+ def getConfig(self):
+ """returns options needed for pycurl"""
+ return {"interface": self.getInterface(),
+ "proxies": self.getProxies(),
+ "ipv6": self.core.config["download"]["ipv6"]}
+
+ def updateBucket(self):
+ """ set values in the bucket according to settings"""
+ if not self.core.config["download"]["limit_speed"]:
+ self.bucket.setRate(-1)
+ else:
+ self.bucket.setRate(self.core.config["download"]["max_speed"] * 1024)
+
+# needs pyreq in global namespace
+def getURL(*args, **kwargs):
+ return pyreq.getURL(*args, **kwargs)
+
+
+def getRequest(*args, **kwargs):
+ return pyreq.getRequest(*args, **kwargs)