import codecs import posixpath from os import path import re from six import iteritems, string_types from six.moves.urllib import parse, request from docutils import nodes from docutils.utils import relative_path import sphinx from sphinx.locale import _ from sphinx.builders.html import INVENTORY_FILENAME default_handlers = [request.ProxyHandler(), request.HTTPRedirectHandler(), request.HTTPHandler()] try: default_handlers.append(request.HTTPSHandler) except AttributeError: pass default_opener = request.build_opener(*default_handlers) UTF8StreamReader = codecs.lookup('utf-8')[2] def read_inventory_v1(f, uri, join): f = UTF8StreamReader(f) invdata = {} line = next(f)
import posixpath from os import path import re from six import iteritems from six.moves.urllib import parse, request from docutils import nodes from docutils.utils import relative_path import sphinx from sphinx.locale import _ from sphinx.builders.html import INVENTORY_FILENAME default_handlers = [ request.ProxyHandler(), request.HTTPRedirectHandler(), request.HTTPHandler() ] try: default_handlers.append(request.HTTPSHandler) except AttributeError: pass default_opener = request.build_opener(*default_handlers) UTF8StreamReader = codecs.lookup('utf-8')[2] def read_inventory_v1(f, uri, join): f = UTF8StreamReader(f) invdata = {}
def request(url, timeout=None, debug=False): """Request the given URL using LIGO.ORG SAML authentication. This requires an active Kerberos ticket for the user, to get one: >>> from ligo.org import kinit >>> kinit('albert.einstein') Then request as follows >>> from ligo.org import request >>> response = request(myurl) >>> print(response.read()) Parameters ---------- url : `str` URL path for request timeout : `int`, optional, default: no timeout number of seconds to wait for server response, debug : `bool`, optional, default: `False` Query in verbose debugging mode Returns ------- response : `file`-like the raw response from the URL, probably XML/HTML or JSON Examples -------- >>> from ligo.org import request >>> response = request('https://ldas-jobs.ligo.caltech.edu/') >>> print(response.read()) """ # set debug to 1 to see all HTTP(s) traffic debug = int(debug) # need an instance of HTTPS handler to do HTTPS httpshandler = urllib2.HTTPSHandler(debuglevel=debug) # use a cookie jar to store session cookies jar = http_cookiejar.LWPCookieJar() # if a cookie jar exists open it and read the cookies # and make sure it has the right permissions if os.path.exists(COOKIE_JAR): os.chmod(COOKIE_JAR, stat.S_IRUSR | stat.S_IWUSR) # set ignore_discard so that session cookies are preserved try: jar.load(COOKIE_JAR, ignore_discard=True) except http_cookiejar.LoadError as e: warnings.warn('http_cookiejar.LoadError caught: %s' % str(e)) # create a cookie handler from the cookie jar cookiehandler = urllib2.HTTPCookieProcessor(jar) # need a redirect handler to follow redirects redirecthandler = urllib2.HTTPRedirectHandler() # need an auth handler that can do negotiation. # input parameter is the Kerberos service principal. auth_handler = HTTPNegotiateAuthHandler(service_principal='HTTP@%s' % LIGO_LOGIN_URL) # create the opener. opener = urllib2.build_opener(auth_handler, cookiehandler, httpshandler, redirecthandler) # prepare the request object req = urllib2.Request(url) # use the opener and the request object to make the request. if timeout is None: timeout = socket._GLOBAL_DEFAULT_TIMEOUT response = opener.open(req, timeout=timeout) # save the session cookies to a file so that they can # be used again without having to authenticate jar.save(COOKIE_JAR, ignore_discard=True) return response