示例#1
0
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)
示例#2
0
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 = {}
示例#3
0
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