E5Network/E5NetworkProxyFactory.py

Wed, 26 May 2010 08:16:15 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 26 May 2010 08:16:15 +0200
changeset 283
efe6750fb0ec
parent 270
41505c92ac31
child 286
652f5159f1c3
permissions
-rw-r--r--

Fixed an issue with the new NetworkProxyFactory.

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

eric ide

mercurial