E5Network/E5NetworkProxyFactory.py

changeset 270
41505c92ac31
child 282
868936f80311
child 283
efe6750fb0ec
equal deleted inserted replaced
269:56e0107f2b01 270:41505c92ac31
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a network proxy factory.
8 """
9
10 import sys
11 import os
12
13 from PyQt4.QtCore import QUrl
14 from PyQt4.QtGui import QMessageBox
15 from PyQt4.QtNetwork import QNetworkProxyFactory, QNetworkProxy, QNetworkProxyQuery
16
17 import Preferences
18
19 class E5NetworkProxyFactory(QNetworkProxyFactory):
20 """
21 Class implementing a network proxy factory.
22 """
23 def __init__(self):
24 """
25 Constructor
26 """
27 QNetworkProxyFactory.__init__(self)
28
29 def queryProxy(self, query):
30 """
31 Public method to determine a proxy for a given query.
32
33 @param query reference to the query object (QNetworkProxyQuery)
34 @return list of proxies in order of preference (list of QNetworkProxy)
35 """
36 if query.queryType() == QNetworkProxyQuery.UrlRequest and \
37 query.protocolTag() in ["http", "https", "ftp"] and \
38 Preferences.getUI("UseProxy"):
39 if Preferences.getUI("UseSystemProxy"):
40 proxyList = QNetworkProxyFactory.systemProxyForQuery(query)
41 if sys.platform not in ["darwin", "nt"] and \
42 len(proxyList) == 1 and \
43 proxyList[0].type() == QNetworkProxy.NoProxy:
44 # try it the Python way
45 # scan the environment for variables named <scheme>_proxy
46 # scan over whole environment to make this case insensitive
47 for name, value in os.environ.items():
48 name = name.lower()
49 if value and name[-6:] == '_proxy' and \
50 name[:-6] == query.protocolTag().lower():
51 url = QUrl(value)
52 if url.scheme() in ["http", "https"]:
53 proxyType = QNetworkProxy.HttpProxy
54 else:
55 proxyType = QNetworkProxy.FtpCachingProxy
56 proxy = QNetworkProxy(proxyType, url.host(), url.port(),
57 url.userName(), url.password())
58 proxyList = [proxy]
59 break
60 return proxyList
61 else:
62 host = Preferences.getUI("ProxyHost")
63 if not host:
64 QMessageBox.critical(None,
65 self.trUtf8("Proxy Configuration Error"),
66 self.trUtf8("""Proxy usage was activated"""
67 """ but no proxy host configured."""))
68 return [QNetworkProxy(QNetworkProxy.DefaultProxy)]
69 else:
70 pProxyType = Preferences.getUI("ProxyType")
71 if pProxyType == 0:
72 proxyType = QNetworkProxy.HttpProxy
73 elif pProxyType == 1:
74 proxyType = QNetworkProxy.HttpCachingProxy
75 elif pProxyType == 2:
76 proxyType = QNetworkProxy.Socks5Proxy
77 proxy = QNetworkProxy(proxyType, host,
78 Preferences.getUI("ProxyPort"),
79 Preferences.getUI("ProxyUser"),
80 Preferences.getUI("ProxyPassword"))
81 return [proxy, QNetworkProxy(QNetworkProxy.DefaultProxy)]
82 else:
83 return [QNetworkProxy(QNetworkProxy.NoProxy)]

eric ide

mercurial