udg/ecoms: udg.py

File udg.py, 1.5 KB (added by antonio, 8 years ago)
Line 
1# -*- coding: utf-8 -*-
2"""
3Created on Wed Jan 22 16:26:17 2014
4
5@author: antonio
6"""
7   
8def install_udg_client(username=None, password=None):
9    import urllib2, cookielib, urlparse, pydap.lib, re
10    from pydap.exceptions import ClientError
11    pwdmngr = urllib2.HTTPPasswordMgrWithDefaultRealm()
12    authinfo = urllib2.HTTPBasicAuthHandler(pwdmngr)
13    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()),authinfo)
14    opener.addheaders = [('User-agent', pydap.lib.USER_AGENT)]
15    def new_request(url):
16        scheme, netloc, path, query, fragment = urlparse.urlsplit(url)
17        if '@' in netloc:
18            credentials, netloc = netloc.split('@', 1)  # remove credentials from netloc
19            username, password = credentials.split(':', 1)
20            pwdmngr.add_password(None, urlparse.urlunsplit([scheme,netloc,'','','']), username, password)
21        url = urlparse.urlunsplit((
22                scheme, netloc, path, query, fragment
23                )).rstrip('?&')
24        r = opener.open(url)
25        resp = r.headers.dict
26        resp['status'] = str(r.code)
27        data = r.read()
28       
29        if resp.get("content-description") in ["dods_error", "dods-error"]:
30            m = re.search('code = (?P<code>[^;]+);\s*message = "(?P<msg>.*)"',
31                    data, re.DOTALL | re.MULTILINE)
32            msg = 'Server error %(code)s: "%(msg)s"' % m.groupdict()
33            raise ClientError(msg)
34   
35        return resp, data
36    from pydap.util import http
37    http.request = new_request