Autenticación básica#
Muchos servidores OPeNDAP requieren autenticación. PyDAP usa la biblioteca requests de Python para obtener datos a través de la web, y también maneja dos formas generales de autenticación:
username/password.tokens
Requisito#
Un archivo
.netrcen tu sistema local para guardar tus credenciales de autenticación (en máquinas Windows se llama_netrc).
Note
A continuación demostraremos cómo crear un archivo .netrc en tu sistema local.
Recomendamos firmemente tener un archivo local y estático ~/.netrc que contenga todas las credenciales de autenticación, ya que requests puede manejar por ti la autenticación desde un archivo .netrc, sin que tengas que hacer pasos adicionales. Es decir, pydap puede “descubrir” tus credenciales de autenticación OPeNDAP (usuario/contraseña) de forma eficiente si están definidas correctamente en un archivo .netrc (_netrc en máquinas Windows).
Aunque no todos los servidores OPeNDAP están configurados para autenticarse mediante token, la gran mayoría de los servidores Hyrax de NASA sí lo están, y el token se crea desde tu cuenta Earth Data Login (EDL). Entre los dos enfoques anteriores, la autenticación con token se recomienda generalmente a lo largo de la documentación porque puede evitar muchas redirecciones (aunque no todas).
Note
Para una introducción más amplia a la autenticación, consulta la documentación de OPeNDAP sobre Authentication for DAP Clients y Client Authentication With EDLTokens.
¡Accedamos a algunos datos remotos!#
from pydap.client import open_url
from pydap.net import create_session
dataset_url = "https://opendap.earthdata.nasa.gov/providers/POCLOUD/collections/ECCO%20Ocean%20Temperature%20and%20Salinity%20-%20Monthly%20Mean%200.5%20Degree%20(Version%204%20Release%204)/granules/OCEAN_TEMPERATURE_SALINITY_mon_mean_2017-12_ECCO_V4r4_latlon_0p50deg"
username / password#
No se necesita nada más que iniciar un objeto requests.Session. pydap.net tiene una función que puede iniciar una sesión de este tipo junto con algunos parámetros adicionales. Esto es:
my_session = create_session() # default requests.session() object.
print(my_session)
<requests.sessions.Session object at 0x10bb18530>
o si quieres cachear la sesión para evitar descargas repetidas:
my_session = create_session(use_cache=True) # default requests_cache.session() object.
print(my_session)
<CachedSession(cache=<SQLiteCache(name=http_cache)>, settings=CacheSettings(expire_after=86400))>
Note
tanto requests como requests_cache pueden recuperar y manejar autenticación mediante .netrc
Ahora abrimos el dataset remoto#
Ahora, todo lo que se necesita es:
ds = open_url(dataset_url, session=my_session, protocol="dap4")
La sesión de requests (predeterminada) recuperará las credenciales de .netrc y no se necesita información adicional.
Tokens#
Este es otro enfoque soportado por varias instituciones y se usará a lo largo de la documentación. Para habilitar la autenticación con token, primero debes asegurarte de tener un token válido (no expirado) y, si no, crear uno nuevo. Por ejemplo, consulta este recurso EDL específico de NASA.
Para mejorar la experiencia de uso, pydap.net.create_session puede recibir argumentos extra de sesión, como el token, para:
Crear una
requests.sessioncon información del token en sus encabezados.Deshabilitar el descubrimiento automático del archivo
.netrc.
session_extra = {"token": "YourToken"}
# initialize a requests.session object with the token headers. All handled by pydap.
my_session = create_session(session_kwargs=session_extra)
ds = open_url(dataset_url, session=my_session, protocol='dap4')
Note
En este punto solo se han descargado los metadatos para generar el dataset de pydap y se han agregado referencias a cada variable remota.
earthaccess#
earthaccess permite ocultar la abstracción asociada con la recuperación de credenciales EDL. Pydap puede heredarlas desde el método de autenticación de earthaccess. Consulta el tutorial complementario.