Source code for pyvo.auth.authsession

import logging

from .authurls import AuthURLs
from .credentialstore import CredentialStore

__all__ = ["AuthSession"]


[docs]class AuthSession: """ A requests-like session that pyvo can use to dispatch its network calls with authentication. The user adds their credentials to the credentials object, such as adding a cookie, certificate, or password. The network requests made by pyvo pass through here, and the URL of the request is matched against the capabilities of the service. Based on what credentials have been provided and the capabilities of the service, appropriate credentials are added to the request before it is sent. """ def __init__(self): super(AuthSession, self).__init__() self.credentials = CredentialStore() self._auth_urls = AuthURLs()
[docs] def add_security_method_for_url(self, url, security_method, exact=False): """ Add a security method for a url. This is additive with update_from_capabilities. This can be useful to set additional security methods that aren't set in the capabilities for whatever reason. Parameters ---------- url : str URL to set a security method for security_method : str URI of the security method to set exact : bool If True, match only this URL. If false, match all URLs that match this as a base URL. """ self._auth_urls.add_security_method_for_url(url, security_method, exact=exact)
[docs] def update_from_capabilities(self, capabilities): """ Update the URL to security method mapping using the capabilities provided. Parameters ---------- capabilities : object List of `~pyvo.io.vosi.voresource.Capabilities` """ self._auth_urls.update_from_capabilities(capabilities)
[docs] def get(self, url, **kwargs): """ Wrapper to make a HTTP GET request with authentication. """ return self._request('GET', url, **kwargs)
[docs] def post(self, url, **kwargs): """ Wrapper to make a HTTP POST request with authentication. """ return self._request('POST', url, **kwargs)
[docs] def put(self, url, **kwargs): """ Wrapper to make a HTTP PUT request with authentication. """ return self._request('PUT', url, **kwargs)
[docs] def delete(self, url, **kwargs): """ Wrapper to make a HTTP DELETE request with authentication. """ return self._request('DELETE', url, **kwargs)
def _request(self, http_method, url, **kwargs): """ Make an HTTP request with authentication. This function looks at the url of the request, determines what credentials it should attach to the request to authenticate, and then dispatches the request to the underlying requests library using the session that has been configured with the credentials. Parameters ---------- http_method : str the HTTP verb of the request. url : str the URL to request """ auth_methods = self._auth_urls.allowed_auth_methods(url) logging.debug('Possible auth methods: %s', auth_methods) negotiated_method = self.credentials.negotiate_method(auth_methods) logging.debug('Using auth method: %s', negotiated_method) session = self.credentials.get(negotiated_method) return session.request(http_method, url, **kwargs) def __repr__(self): return '\n'.join([repr(self.credentials), repr(self._auth_urls)])