~mcfletch/eric/update-to-4.5.13

« back to all changes in this revision

Viewing changes to eric/E4Network/E4NetworkProxyFactory.py

Tags: 4.5.0-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
 
 
3
# Copyright (c) 2010 - 2012 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 E4NetworkProxyFactory(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().toLower():
 
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
                if proxyList:
 
61
                    proxyList[0].setUser(Preferences.getUI("ProxyUser"))
 
62
                    proxyList[0].setPassword(Preferences.getUI("ProxyPassword"))
 
63
                    return proxyList
 
64
                else:
 
65
                    return [QNetworkProxy(QNetworkProxy.NoProxy)]
 
66
            else:
 
67
                host = Preferences.getUI("ProxyHost")
 
68
                if not host:
 
69
                    QMessageBox.critical(None,
 
70
                        self.trUtf8("Proxy Configuration Error"),
 
71
                        self.trUtf8("""Proxy usage was activated"""
 
72
                                    """ but no proxy host configured."""))
 
73
                    return [QNetworkProxy(QNetworkProxy.DefaultProxy)]
 
74
                else:
 
75
                    pProxyType = Preferences.getUI("ProxyType")
 
76
                    if pProxyType == 0:
 
77
                        proxyType = QNetworkProxy.HttpProxy
 
78
                    elif pProxyType == 1:
 
79
                        proxyType = QNetworkProxy.HttpCachingProxy
 
80
                    elif pProxyType == 2:
 
81
                        proxyType = QNetworkProxy.Socks5Proxy
 
82
                    proxy = QNetworkProxy(proxyType, host, 
 
83
                        Preferences.getUI("ProxyPort"),
 
84
                        Preferences.getUI("ProxyUser"),
 
85
                        Preferences.getUI("ProxyPassword"))
 
86
                    return [proxy, QNetworkProxy(QNetworkProxy.DefaultProxy)]
 
87
        else:
 
88
            return [QNetworkProxy(QNetworkProxy.NoProxy)]