Changeset 1181:f768c6025b94

Show
Ignore:
Timestamp:
06/10/08 01:10:03 (6 months ago)
Author:
Ali Afshar <aafshar@…>
Message:

Support http proxy. Fixes lp:120543

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pida/services/plugins/plugins.py

    r1170 r1181  
    2929import base64 
    3030import shutil 
     31import httplib 
    3132 
    3233from kiwi.ui.objectlist import Column 
     
    6162    return tab[key] 
    6263 
     64# http://docs.python.org/lib/xmlrpc-client-example.html 
     65class ProxiedTransport(xmlrpclib.Transport): 
     66 
     67    def set_proxy(self, proxy): 
     68        self.proxy = proxy 
     69 
     70    def make_connection(self, host): 
     71        self.realhost = host 
     72        h = httplib.HTTP(self.proxy) 
     73        return h 
     74 
     75    def send_request(self, connection, handler, request_body): 
     76        connection.putrequest("POST", 'http://%s%s' % (self.realhost, handler)) 
     77 
     78    def send_host(self, connection, host): 
     79        connection.putheader('Host', self.realhost) 
     80 
     81def create_transport(): 
     82    if 'http_proxy' in os.environ: 
     83        host = os.environ['http_proxy'] 
     84        t = ProxiedTransport() 
     85        t.set_proxy(host) 
     86        return t 
     87    else: 
     88        return xmlrpclib.Transport() 
    6389 
    6490class PluginsItem(object): 
     
    185211            if self.first_start: 
    186212                self.first_start = False 
    187                 gcall(self.svc.fetch_available_plugins) 
     213                def _fetch(): 
     214                    gcall(self.svc.fetch_available_plugins) 
     215                gobject.idle_add(_fetch) 
    188216        else: 
    189217            self.svc.update_installed_plugins() 
     
    490518        self._view.start_pulse(_('Download available plugins')) 
    491519        try: 
    492             proxy = xmlrpclib.ServerProxy(self.rpc_url) 
     520            proxy = xmlrpclib.ServerProxy(self.rpc_url, 
     521                                          transport=create_transport()) 
    493522            plist = proxy.plugins.list({'version': PIDA_VERSION}) 
    494523            for k in plist: 
     
    597626                    data = file.read() 
    598627                    file.close() 
    599                     proxy = xmlrpclib.ServerProxy(self.rpc_url) 
     628                    proxy = xmlrpclib.ServerProxy(self.rpc_url, 
     629                                                  transport=create_transport()) 
    600630                    code = proxy.plugins.push(login, password, 
    601631                            plugin, base64.b64encode(data))